1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/canvas/test/webgl-conformance/conformance/misc/invalid-passed-params.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,193 @@ 1.4 +<!-- 1.5 +Copyright (C) 2011 Apple Computer, Inc. All rights reserved. 1.6 + 1.7 +Redistribution and use in source and binary forms, with or without 1.8 +modification, are permitted provided that the following conditions 1.9 +are met: 1.10 +1. Redistributions of source code must retain the above copyright 1.11 + notice, this list of conditions and the following disclaimer. 1.12 +2. Redistributions in binary form must reproduce the above copyright 1.13 + notice, this list of conditions and the following disclaimer in the 1.14 + documentation and/or other materials provided with the distribution. 1.15 + 1.16 +THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 1.17 +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.18 +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1.19 +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 1.20 +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1.21 +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1.22 +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 1.23 +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 1.24 +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1.25 +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.26 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.27 +--> 1.28 +<!DOCTYPE html> 1.29 +<html> 1.30 +<head> 1.31 +<meta charset="utf-8"> 1.32 +<link rel="stylesheet" href="../../resources/js-test-style.css"/> 1.33 +<script src="../../resources/js-test-pre.js"></script> 1.34 +<script src="../resources/webgl-test.js"></script> 1.35 +<script src="../../resources/desktop-gl-constants.js"></script> 1.36 +</head> 1.37 +<body> 1.38 +<div id="description"></div> 1.39 +<div id="console"></div> 1.40 + 1.41 +<script> 1.42 +description("Test for invalid passed parameters"); 1.43 + 1.44 +var context = create3DContext(); 1.45 + 1.46 +debug(""); 1.47 +debug("Test createShader()"); 1.48 +shouldGenerateGLError(context, context.NO_ERROR, "context.createShader(context.FRAGMENT_SHADER)"); 1.49 +shouldGenerateGLError(context, context.NO_ERROR, "context.createShader(context.VERTEX_SHADER)"); 1.50 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.createShader(0)"); 1.51 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.createShader(context.TRIANGLES)"); 1.52 + 1.53 +debug(""); 1.54 +debug("Test clear()"); 1.55 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'])"); 1.56 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'] | context.COLOR_BUFFER_BIT)"); 1.57 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.clear(desktopGL['ACCUM_BUFFER_BIT'] | context.COLOR_BUFFER_BIT | context.DEPTH_BUFFER_BIT | context.STENCIL_BUFFER_BIT)"); 1.58 +shouldGenerateGLError(context, context.NO_ERROR, "context.clear(context.COLOR_BUFFER_BIT | context.DEPTH_BUFFER_BIT | context.STENCIL_BUFFER_BIT)"); 1.59 + 1.60 +debug(""); 1.61 +debug("Test bufferData()"); 1.62 +var buffer = context.createBuffer(); 1.63 +shouldGenerateGLError(context, context.NO_ERROR, "context.bindBuffer(context.ARRAY_BUFFER, buffer)"); 1.64 +shouldGenerateGLError(context, context.NO_ERROR, "context.bufferData(context.ARRAY_BUFFER, 16, context.STREAM_DRAW)"); 1.65 +shouldGenerateGLError(context, context.NO_ERROR, "context.bufferData(context.ARRAY_BUFFER, 16, context.STATIC_DRAW)"); 1.66 +shouldGenerateGLError(context, context.NO_ERROR, "context.bufferData(context.ARRAY_BUFFER, 16, context.DYNAMIC_DRAW)"); 1.67 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['STREAM_READ'])"); 1.68 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['STREAM_COPY'])"); 1.69 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['STATIC_READ'])"); 1.70 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['STATIC_COPY'])"); 1.71 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['DYNAMIC_READ'])"); 1.72 +shouldGenerateGLError(context, context.INVALID_ENUM, "context.bufferData(context.ARRAY_BUFFER, 16, desktopGL['DYNAMIC_COPY'])"); 1.73 + 1.74 +debug(""); 1.75 +debug("Test {copy}Tex{Sub}Image2D with negative offset/width/height"); 1.76 +var tex = context.createTexture(); 1.77 +var pixels = new Uint8Array(2 * 2 * 4); 1.78 +shouldGenerateGLError(context, context.NO_ERROR, "context.bindTexture(context.TEXTURE_2D, tex)"); 1.79 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, -16, -16, 0, context.RGBA, context.UNSIGNED_BYTE, null)"); 1.80 +shouldGenerateGLError(context, context.NO_ERROR, "context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, 16, 16, 0, context.RGBA, context.UNSIGNED_BYTE, null)"); 1.81 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.texSubImage2D(context.TEXTURE_2D, 0, -1, -1, 2, 2, context.RGBA, context.UNSIGNED_BYTE, pixels)"); 1.82 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.texSubImage2D(context.TEXTURE_2D, 0, 0, 0, -1, -1, context.RGBA, context.UNSIGNED_BYTE, pixels)"); 1.83 +shouldGenerateGLError(context, context.NO_ERROR, "context.texSubImage2D(context.TEXTURE_2D, 0, 0, 0, 2, 2, context.RGBA, context.UNSIGNED_BYTE, pixels)"); 1.84 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexImage2D(context.TEXTURE_2D, 0, context.RGBA, 0, 0, -1, -1, 0)"); 1.85 +shouldGenerateGLError(context, context.NO_ERROR, "context.copyTexImage2D(context.TEXTURE_2D, 0, context.RGBA, 0, 0, 16, 16, 0)"); 1.86 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, -1, -1, 0, 0, 2, 2)"); 1.87 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, 0, 0, 0, 0, -1, -1)"); 1.88 +shouldGenerateGLError(context, context.NO_ERROR, "context.copyTexSubImage2D(context.TEXTURE_2D, 0, 0, 0, 0, 0, 2, 2)"); 1.89 + 1.90 +debug(""); 1.91 +debug("Test renderbufferStorage() with negative width/height"); 1.92 +var renderbuffer = context.createRenderbuffer(); 1.93 +shouldGenerateGLError(context, context.NO_ERROR, "context.bindRenderbuffer(context.RENDERBUFFER, renderbuffer)"); 1.94 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.renderbufferStorage(context.RENDERBUFFER, context.RGBA4, -2, -2)"); 1.95 +shouldGenerateGLError(context, context.NO_ERROR, "context.renderbufferStorage(context.RENDERBUFFER, context.RGBA4, 16, 16)"); 1.96 + 1.97 +debug(""); 1.98 +debug("Test scissor() with negative width/height"); 1.99 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.scissor(0, 0, -2, -2)"); 1.100 +shouldGenerateGLError(context, context.NO_ERROR, "context.scissor(0, 0, 16, 16)"); 1.101 + 1.102 +debug(""); 1.103 +debug("Test viewport() with negative width/height"); 1.104 +shouldGenerateGLError(context, context.INVALID_VALUE, "context.viewport(0, 0, -2, -2)"); 1.105 +shouldGenerateGLError(context, context.NO_ERROR, "context.viewport(0, 0, 16, 16)"); 1.106 + 1.107 +debug(""); 1.108 +debug("Set up a program to test invalid characters"); 1.109 +var invalidSet = ['"', '$', '`', '@', '\\', "'"]; 1.110 +var validUniformName = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890"; 1.111 +var validAttribName = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 1.112 +function generateShaderSource(opt_invalidIdentifierChar, opt_invalidCommentChar) { 1.113 + var invalidIdentifierString = ""; 1.114 + var invalidCommentString = ""; 1.115 + if (opt_invalidIdentifierChar != undefined) { 1.116 + invalidIdentifierString += opt_invalidIdentifierChar; 1.117 + } 1.118 + if (opt_invalidCommentChar != undefined) { 1.119 + invalidCommentString += opt_invalidCommentChar; 1.120 + } 1.121 + return "uniform float " + validUniformName + invalidIdentifierString + ";\n" 1.122 + + "varying float " + validAttribName + ";\n" 1.123 + + "void main() {\n" 1.124 + + validAttribName + " = " + validUniformName + ";\n" 1.125 + + "gl_Position = vec4(0.0, 0.0, 0.0, 1.0); }\n"; 1.126 + + "//.+-/*%<>[](){}^|&~=!:;,?# " + invalidCommentString; 1.127 +} 1.128 +var vShader = context.createShader(context.VERTEX_SHADER); 1.129 +context.shaderSource(vShader, generateShaderSource()); 1.130 +context.compileShader(vShader); 1.131 +shouldBe("context.getError()", "context.NO_ERROR"); 1.132 +var fShader = context.createShader(context.FRAGMENT_SHADER); 1.133 +context.shaderSource(fShader, "precision mediump float;\n" 1.134 + + "varying float " + validAttribName + ";\n" 1.135 + + "void main() {\n" 1.136 + + "gl_FragColor = vec4(" + validAttribName + ", 0.0, 0.0, 1.0); }"); 1.137 +context.compileShader(fShader); 1.138 +shouldBe("context.getError()", "context.NO_ERROR"); 1.139 +var program = context.createProgram(); 1.140 +context.attachShader(program, vShader); 1.141 +context.attachShader(program, fShader); 1.142 +context.linkProgram(program); 1.143 +var linkStatus = context.getProgramParameter(program, context.LINK_STATUS); 1.144 +shouldBeTrue("linkStatus"); 1.145 +if (!linkStatus) 1.146 + debug(context.getProgramInfoLog(program)); 1.147 +shouldBe("context.getError()", "context.NO_ERROR"); 1.148 +context.bindAttribLocation(program, 1, validAttribName); 1.149 +shouldBe("context.getError()", "context.NO_ERROR"); 1.150 +context.getAttribLocation(program, validAttribName); 1.151 +shouldBe("context.getError()", "context.NO_ERROR"); 1.152 +context.getUniformLocation(program, validUniformName); 1.153 +shouldBe("context.getError()", "context.NO_ERROR"); 1.154 + 1.155 +debug(""); 1.156 +debug("Test shaderSource() with invalid characters"); 1.157 +for (var i = 0; i < invalidSet.length; ++i) { 1.158 + var validShaderSource = generateShaderSource(undefined, invalidSet[i]); 1.159 + context.shaderSource(vShader, validShaderSource); 1.160 + shouldBe("context.getError()", "context.NO_ERROR"); 1.161 + var invalidShaderSource = generateShaderSource(invalidSet[i], undefined); 1.162 + context.shaderSource(vShader, invalidShaderSource); 1.163 + shouldBe("context.getError()", "context.INVALID_VALUE"); 1.164 +} 1.165 + 1.166 +debug(""); 1.167 +debug("Test bindAttribLocation() with invalid characters"); 1.168 +for (var i = 0; i < invalidSet.length; ++i) { 1.169 + var invalidName = validAttribName + invalidSet[i]; 1.170 + context.bindAttribLocation(program, 1, invalidName); 1.171 + shouldBe("context.getError()", "context.INVALID_VALUE"); 1.172 +} 1.173 + 1.174 +debug(""); 1.175 +debug("Test getAttribLocation() with invalid characters"); 1.176 +for (var i = 0; i < invalidSet.length; ++i) { 1.177 + var invalidName = validAttribName + invalidSet[i]; 1.178 + context.getAttribLocation(program, invalidName); 1.179 + shouldBe("context.getError()", "context.INVALID_VALUE"); 1.180 +} 1.181 + 1.182 +debug(""); 1.183 +debug("Test getUniformLocation() with invalid characters"); 1.184 +for (var i = 0; i < invalidSet.length; ++i) { 1.185 + var invalidName = validUniformName + invalidSet[i]; 1.186 + context.getUniformLocation(program, invalidName); 1.187 + shouldBe("context.getError()", "context.INVALID_VALUE"); 1.188 +} 1.189 + 1.190 +debug("") 1.191 +successfullyParsed = true; 1.192 +</script> 1.193 + 1.194 +<script>finishTest();</script> 1.195 +</body> 1.196 +</html>