summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/tex-image-with-invalid-data.html
blob: 4500624c813f64fd11107cc2ec7200ac86055119 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title>texImage2D and texSubImage2D tests with invalid data</title>
  <link rel="stylesheet" href="../../../resources/js-test-style.css"/>
  <script src="../../../js/js-test-pre.js"></script>
  <script src="../../../js/webgl-test-utils.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="2" height="2"> </canvas>
<script type="application/javascript">
description("texImage2D and texSubImage2D tests with invalid data");

var wtu = WebGLTestUtils;
var canvas = document.getElementById("canvas");
var contextVersion = wtu.getDefault3DContextVersion();
var gl = wtu.create3DContext(canvas);
if (!gl)
  testFailed("Context created.");
else
  testPassed("Context created.");

var tex;

function setup() {
    tex = gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D, tex);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
}

function teardown() {
    gl.deleteTexture(tex);
}

function test(desc, func, expected) {
    debug(desc);

    var exc = null;
    try {
        func();
    } catch (x) {
        exc = x;
    }

    if (expected == gl.INVALID_OPERATION) {
      wtu.glErrorShouldBe(gl, expected);
    } else if (expected == "exception") {
        if (exc) {
            testPassed("threw exception");
        } else {
            testFailed("did not throw exception");
        }
    }
}

test("Calling texImage2D with no WebGLTexture bound generates INVALID_OPERATION",
     function () {
        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
     },
     gl.INVALID_OPERATION);

test("Calling texSubImage2D with no WebGLTexture bound generates INVALID_OPERATION",
     function () {
        var buffer = new Uint8Array(4);
        gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
     },
     gl.INVALID_OPERATION);

setup();

test("Passing a buffer not large enough to texImage2D should generate an INVALID_OPERATION",
     function () {
     var tooSmall = new Uint8Array(64);
        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, tooSmall);
     },
     gl.INVALID_OPERATION);

if (contextVersion < 2) {
    test("Passing texImage2D parameter data of Number type should throw an exception",
         function () {
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, 42);
         },
         "exception");
} else {
    test("Passing texImage2D parameter data of Number type should generate an INVALID_OPERATION",
         function () {
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, 42);
         },
         gl.INVALID_OPERATION);
}

if (contextVersion < 2) {
    test("Passing texImage2D parameter data of String type should throw a TypeError",
         function () {
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
         },
         "exception");
} else {
    test("Passing texImage2D parameter data of String type should generate an INVALID_OPERATION",
         function () {
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
         },
         gl.INVALID_OPERATION);
}

test("Passing a buffer not large enough to texSubImage2D should generate an INVALID_OPERATION",
     function () {
        var tooSmall = new Uint8Array(64);
        gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, tooSmall);
     },
     gl.INVALID_OPERATION);

if (contextVersion < 2) {
    test("Passing texSubImage2D parameter data of Number type should throw a TypeError",
         function () {
            gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, 42);
         },
         "exception");
} else {
    test("Passing texSubImage2D parameter data of Number type should generate an INVALID_OPERATION",
         function () {
            gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, 42);
         },
         gl.INVALID_OPERATION);
}

if (contextVersion < 2) {
    test("Passing texSubImage2D parameter data of String type should throw a TypeError",
         function () {
            gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
         },
         "exception");
} else {
    test("Passing texSubImage2D parameter data of String type should generate an INVALID_OPERATION",
         function () {
            gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
         },
         gl.INVALID_OPERATION);
}

teardown();

debug("");
var successfullyParsed = true;
</script>
<script src="../../../js/js-test-post.js"></script>

</body>
</html>