<html>
<head>
<!--
Copyright (c) 2009 Ilmari Heikkinen. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WebGL Constants Test</title>
<script src="resources/desktop-gl-constants.js" type="text/javascript"></script>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" style="width: 50px; height: 50px;"> </canvas>
<script>
description("This test ensures that the WebGL context has all the constants in the specification.");

var constants = {
    /* ClearBufferMask */
DEPTH_BUFFER_BIT               : 0x00000100,
STENCIL_BUFFER_BIT             : 0x00000400,
COLOR_BUFFER_BIT               : 0x00004000,
    
    /* BeginMode */
POINTS                         : 0x0000,
LINES                          : 0x0001,
LINE_LOOP                      : 0x0002,
LINE_STRIP                     : 0x0003,
TRIANGLES                      : 0x0004,
TRIANGLE_STRIP                 : 0x0005,
TRIANGLE_FAN                   : 0x0006,
    
    /* AlphaFunction (not supported in ES20) */
    /*      NEVER */
    /*      LESS */
    /*      EQUAL */
    /*      LEQUAL */
    /*      GREATER */
    /*      NOTEQUAL */
    /*      GEQUAL */
    /*      ALWAYS */
    
    /* BlendingFactorDest */
ZERO                           : 0,
ONE                            : 1,
SRC_COLOR                      : 0x0300,
ONE_MINUS_SRC_COLOR            : 0x0301,
SRC_ALPHA                      : 0x0302,
ONE_MINUS_SRC_ALPHA            : 0x0303,
DST_ALPHA                      : 0x0304,
ONE_MINUS_DST_ALPHA            : 0x0305,
    
    /* BlendingFactorSrc */
    /*      ZERO */
    /*      ONE */
DST_COLOR                      : 0x0306,
ONE_MINUS_DST_COLOR            : 0x0307,
SRC_ALPHA_SATURATE             : 0x0308,
    /*      SRC_ALPHA */
    /*      ONE_MINUS_SRC_ALPHA */
    /*      DST_ALPHA */
    /*      ONE_MINUS_DST_ALPHA */
    
    /* BlendEquationSeparate */
FUNC_ADD                       : 0x8006,
BLEND_EQUATION                 : 0x8009,
BLEND_EQUATION_RGB             : 0x8009,   /* same as BLEND_EQUATION */
BLEND_EQUATION_ALPHA           : 0x883D,
    
    /* BlendSubtract */
FUNC_SUBTRACT                  : 0x800A,
FUNC_REVERSE_SUBTRACT          : 0x800B,
    
    /* Separate Blend Functions */
BLEND_DST_RGB                  : 0x80C8,
BLEND_SRC_RGB                  : 0x80C9,
BLEND_DST_ALPHA                : 0x80CA,
BLEND_SRC_ALPHA                : 0x80CB,
CONSTANT_COLOR                 : 0x8001,
ONE_MINUS_CONSTANT_COLOR       : 0x8002,
CONSTANT_ALPHA                 : 0x8003,
ONE_MINUS_CONSTANT_ALPHA       : 0x8004,
BLEND_COLOR                    : 0x8005,
    
    /* Buffer Objects */
ARRAY_BUFFER                   : 0x8892,
ELEMENT_ARRAY_BUFFER           : 0x8893,
ARRAY_BUFFER_BINDING           : 0x8894,
ELEMENT_ARRAY_BUFFER_BINDING   : 0x8895,
    
STREAM_DRAW                    : 0x88E0,
STATIC_DRAW                    : 0x88E4,
DYNAMIC_DRAW                   : 0x88E8,
    
BUFFER_SIZE                    : 0x8764,
BUFFER_USAGE                   : 0x8765,
    
CURRENT_VERTEX_ATTRIB          : 0x8626,
    
    /* CullFaceMode */
FRONT                          : 0x0404,
BACK                           : 0x0405,
FRONT_AND_BACK                 : 0x0408,
    
    /* DepthFunction */
    /*      NEVER */
    /*      LESS */
    /*      EQUAL */
    /*      LEQUAL */
    /*      GREATER */
    /*      NOTEQUAL */
    /*      GEQUAL */
    /*      ALWAYS */
    
    /* EnableCap */
    /* TEXTURE_2D */
CULL_FACE                      : 0x0B44,
BLEND                          : 0x0BE2,
DITHER                         : 0x0BD0,
STENCIL_TEST                   : 0x0B90,
DEPTH_TEST                     : 0x0B71,
SCISSOR_TEST                   : 0x0C11,
POLYGON_OFFSET_FILL            : 0x8037,
SAMPLE_ALPHA_TO_COVERAGE       : 0x809E,
SAMPLE_COVERAGE                : 0x80A0,
    
    /* ErrorCode */
NO_ERROR                       : 0,
INVALID_ENUM                   : 0x0500,
INVALID_VALUE                  : 0x0501,
INVALID_OPERATION              : 0x0502,
OUT_OF_MEMORY                  : 0x0505,
    
    /* FrontFaceDirection */
CW                             : 0x0900,
CCW                            : 0x0901,
    
    /* GetPName */
LINE_WIDTH                     : 0x0B21,
ALIASED_POINT_SIZE_RANGE       : 0x846D,
ALIASED_LINE_WIDTH_RANGE       : 0x846E,
CULL_FACE_MODE                 : 0x0B45,
FRONT_FACE                     : 0x0B46,
DEPTH_RANGE                    : 0x0B70,
DEPTH_WRITEMASK                : 0x0B72,
DEPTH_CLEAR_VALUE              : 0x0B73,
DEPTH_FUNC                     : 0x0B74,
STENCIL_CLEAR_VALUE            : 0x0B91,
STENCIL_FUNC                   : 0x0B92,
STENCIL_FAIL                   : 0x0B94,
STENCIL_PASS_DEPTH_FAIL        : 0x0B95,
STENCIL_PASS_DEPTH_PASS        : 0x0B96,
STENCIL_REF                    : 0x0B97,
STENCIL_VALUE_MASK             : 0x0B93,
STENCIL_WRITEMASK              : 0x0B98,
STENCIL_BACK_FUNC              : 0x8800,
STENCIL_BACK_FAIL              : 0x8801,
STENCIL_BACK_PASS_DEPTH_FAIL   : 0x8802,
STENCIL_BACK_PASS_DEPTH_PASS   : 0x8803,
STENCIL_BACK_REF               : 0x8CA3,
STENCIL_BACK_VALUE_MASK        : 0x8CA4,
STENCIL_BACK_WRITEMASK         : 0x8CA5,
VIEWPORT                       : 0x0BA2,
SCISSOR_BOX                    : 0x0C10,
    /*      SCISSOR_TEST */
COLOR_CLEAR_VALUE              : 0x0C22,
COLOR_WRITEMASK                : 0x0C23,
UNPACK_ALIGNMENT               : 0x0CF5,
PACK_ALIGNMENT                 : 0x0D05,
MAX_TEXTURE_SIZE               : 0x0D33,
MAX_VIEWPORT_DIMS              : 0x0D3A,
SUBPIXEL_BITS                  : 0x0D50,
RED_BITS                       : 0x0D52,
GREEN_BITS                     : 0x0D53,
BLUE_BITS                      : 0x0D54,
ALPHA_BITS                     : 0x0D55,
DEPTH_BITS                     : 0x0D56,
STENCIL_BITS                   : 0x0D57,
POLYGON_OFFSET_UNITS           : 0x2A00,
    /*      POLYGON_OFFSET_FILL */
POLYGON_OFFSET_FACTOR          : 0x8038,
TEXTURE_BINDING_2D             : 0x8069,
SAMPLE_BUFFERS                 : 0x80A8,
SAMPLES                        : 0x80A9,
SAMPLE_COVERAGE_VALUE          : 0x80AA,
SAMPLE_COVERAGE_INVERT         : 0x80AB,
    
    /* GetTextureParameter */
    /*      TEXTURE_MAG_FILTER */
    /*      TEXTURE_MIN_FILTER */
    /*      TEXTURE_WRAP_S */
    /*      TEXTURE_WRAP_T */
    
COMPRESSED_TEXTURE_FORMATS     : 0x86A3,
    
    /* HintMode */
DONT_CARE                      : 0x1100,
FASTEST                        : 0x1101,
NICEST                         : 0x1102,
    
    /* HintTarget */
GENERATE_MIPMAP_HINT            : 0x8192,
    
    /* DataType */
BYTE                           : 0x1400,
UNSIGNED_BYTE                  : 0x1401,
SHORT                          : 0x1402,
UNSIGNED_SHORT                 : 0x1403,
INT                            : 0x1404,
UNSIGNED_INT                   : 0x1405,
FLOAT                          : 0x1406,
    
    /* PixelFormat */
DEPTH_COMPONENT                : 0x1902,
ALPHA                          : 0x1906,
RGB                            : 0x1907,
RGBA                           : 0x1908,
LUMINANCE                      : 0x1909,
LUMINANCE_ALPHA                : 0x190A,
    
    /* PixelType */
    /*      UNSIGNED_BYTE */
UNSIGNED_SHORT_4_4_4_4         : 0x8033,
UNSIGNED_SHORT_5_5_5_1         : 0x8034,
UNSIGNED_SHORT_5_6_5           : 0x8363,
    
    /* Shaders */
FRAGMENT_SHADER                  : 0x8B30,
VERTEX_SHADER                    : 0x8B31,
MAX_VERTEX_ATTRIBS               : 0x8869,
MAX_VERTEX_UNIFORM_VECTORS       : 0x8DFB,
MAX_VARYING_VECTORS              : 0x8DFC,
MAX_COMBINED_TEXTURE_IMAGE_UNITS : 0x8B4D,
MAX_VERTEX_TEXTURE_IMAGE_UNITS   : 0x8B4C,
MAX_TEXTURE_IMAGE_UNITS          : 0x8872,
MAX_FRAGMENT_UNIFORM_VECTORS     : 0x8DFD,
SHADER_TYPE                      : 0x8B4F,
DELETE_STATUS                    : 0x8B80,
LINK_STATUS                      : 0x8B82,
VALIDATE_STATUS                  : 0x8B83,
ATTACHED_SHADERS                 : 0x8B85,
ACTIVE_UNIFORMS                  : 0x8B86,
ACTIVE_ATTRIBUTES                : 0x8B89,
SHADING_LANGUAGE_VERSION         : 0x8B8C,
CURRENT_PROGRAM                  : 0x8B8D,
    
    /* StencilFunction */
NEVER                          : 0x0200,
LESS                           : 0x0201,
EQUAL                          : 0x0202,
LEQUAL                         : 0x0203,
GREATER                        : 0x0204,
NOTEQUAL                       : 0x0205,
GEQUAL                         : 0x0206,
ALWAYS                         : 0x0207,
    
    /* StencilOp */
    /*      ZERO */
KEEP                           : 0x1E00,
REPLACE                        : 0x1E01,
INCR                           : 0x1E02,
DECR                           : 0x1E03,
INVERT                         : 0x150A,
INCR_WRAP                      : 0x8507,
DECR_WRAP                      : 0x8508,
    
    /* StringName */
VENDOR                         : 0x1F00,
RENDERER                       : 0x1F01,
VERSION                        : 0x1F02,
    
    /* TextureMagFilter */
NEAREST                        : 0x2600,
LINEAR                         : 0x2601,
    
    /* TextureMinFilter */
    /*      NEAREST */
    /*      LINEAR */
NEAREST_MIPMAP_NEAREST         : 0x2700,
LINEAR_MIPMAP_NEAREST          : 0x2701,
NEAREST_MIPMAP_LINEAR          : 0x2702,
LINEAR_MIPMAP_LINEAR           : 0x2703,
    
    /* TextureParameterName */
TEXTURE_MAG_FILTER             : 0x2800,
TEXTURE_MIN_FILTER             : 0x2801,
TEXTURE_WRAP_S                 : 0x2802,
TEXTURE_WRAP_T                 : 0x2803,
    
    /* TextureTarget */
TEXTURE_2D                     : 0x0DE1,
TEXTURE                        : 0x1702,
    
TEXTURE_CUBE_MAP               : 0x8513,
TEXTURE_BINDING_CUBE_MAP       : 0x8514,
TEXTURE_CUBE_MAP_POSITIVE_X    : 0x8515,
TEXTURE_CUBE_MAP_NEGATIVE_X    : 0x8516,
TEXTURE_CUBE_MAP_POSITIVE_Y    : 0x8517,
TEXTURE_CUBE_MAP_NEGATIVE_Y    : 0x8518,
TEXTURE_CUBE_MAP_POSITIVE_Z    : 0x8519,
TEXTURE_CUBE_MAP_NEGATIVE_Z    : 0x851A,
MAX_CUBE_MAP_TEXTURE_SIZE      : 0x851C,
    
    /* TextureUnit */
TEXTURE0                       : 0x84C0,
TEXTURE1                       : 0x84C1,
TEXTURE2                       : 0x84C2,
TEXTURE3                       : 0x84C3,
TEXTURE4                       : 0x84C4,
TEXTURE5                       : 0x84C5,
TEXTURE6                       : 0x84C6,
TEXTURE7                       : 0x84C7,
TEXTURE8                       : 0x84C8,
TEXTURE9                       : 0x84C9,
TEXTURE10                      : 0x84CA,
TEXTURE11                      : 0x84CB,
TEXTURE12                      : 0x84CC,
TEXTURE13                      : 0x84CD,
TEXTURE14                      : 0x84CE,
TEXTURE15                      : 0x84CF,
TEXTURE16                      : 0x84D0,
TEXTURE17                      : 0x84D1,
TEXTURE18                      : 0x84D2,
TEXTURE19                      : 0x84D3,
TEXTURE20                      : 0x84D4,
TEXTURE21                      : 0x84D5,
TEXTURE22                      : 0x84D6,
TEXTURE23                      : 0x84D7,
TEXTURE24                      : 0x84D8,
TEXTURE25                      : 0x84D9,
TEXTURE26                      : 0x84DA,
TEXTURE27                      : 0x84DB,
TEXTURE28                      : 0x84DC,
TEXTURE29                      : 0x84DD,
TEXTURE30                      : 0x84DE,
TEXTURE31                      : 0x84DF,
ACTIVE_TEXTURE                 : 0x84E0,
    
    /* TextureWrapMode */
REPEAT                         : 0x2901,
CLAMP_TO_EDGE                  : 0x812F,
MIRRORED_REPEAT                : 0x8370,
    
    /* Uniform Types */
FLOAT_VEC2                     : 0x8B50,
FLOAT_VEC3                     : 0x8B51,
FLOAT_VEC4                     : 0x8B52,
INT_VEC2                       : 0x8B53,
INT_VEC3                       : 0x8B54,
INT_VEC4                       : 0x8B55,
BOOL                           : 0x8B56,
BOOL_VEC2                      : 0x8B57,
BOOL_VEC3                      : 0x8B58,
BOOL_VEC4                      : 0x8B59,
FLOAT_MAT2                     : 0x8B5A,
FLOAT_MAT3                     : 0x8B5B,
FLOAT_MAT4                     : 0x8B5C,
SAMPLER_2D                     : 0x8B5E,
SAMPLER_CUBE                   : 0x8B60,
    
    /* Vertex Arrays */
VERTEX_ATTRIB_ARRAY_ENABLED        : 0x8622,
VERTEX_ATTRIB_ARRAY_SIZE           : 0x8623,
VERTEX_ATTRIB_ARRAY_STRIDE         : 0x8624,
VERTEX_ATTRIB_ARRAY_TYPE           : 0x8625,
VERTEX_ATTRIB_ARRAY_NORMALIZED     : 0x886A,
VERTEX_ATTRIB_ARRAY_POINTER        : 0x8645,
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING : 0x889F,
    
    /* Read Format */
IMPLEMENTATION_COLOR_READ_TYPE     : 0x8B9A,
IMPLEMENTATION_COLOR_READ_FORMAT   : 0x8B9B,

    /* Shader Source */
COMPILE_STATUS                 : 0x8B81,
    
    /* Shader Precision-Specified Types */
LOW_FLOAT                      : 0x8DF0,
MEDIUM_FLOAT                   : 0x8DF1,
HIGH_FLOAT                     : 0x8DF2,
LOW_INT                        : 0x8DF3,
MEDIUM_INT                     : 0x8DF4,
HIGH_INT                       : 0x8DF5,
    
    /* Framebuffer Object. */
FRAMEBUFFER                    : 0x8D40,
RENDERBUFFER                   : 0x8D41,
    
RGBA4                          : 0x8056,
RGB5_A1                        : 0x8057,
RGB565                         : 0x8D62,
DEPTH_COMPONENT16              : 0x81A5,
STENCIL_INDEX                  : 0x1901,
STENCIL_INDEX8                 : 0x8D48,
DEPTH_STENCIL                  : 0x84F9,
    
RENDERBUFFER_WIDTH             : 0x8D42,
RENDERBUFFER_HEIGHT            : 0x8D43,
RENDERBUFFER_INTERNAL_FORMAT   : 0x8D44,
RENDERBUFFER_RED_SIZE          : 0x8D50,
RENDERBUFFER_GREEN_SIZE        : 0x8D51,
RENDERBUFFER_BLUE_SIZE         : 0x8D52,
RENDERBUFFER_ALPHA_SIZE        : 0x8D53,
RENDERBUFFER_DEPTH_SIZE        : 0x8D54,
RENDERBUFFER_STENCIL_SIZE      : 0x8D55,
    
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE           : 0x8CD0,
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME           : 0x8CD1,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL         : 0x8CD2,
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE : 0x8CD3,
    
COLOR_ATTACHMENT0              : 0x8CE0,
DEPTH_ATTACHMENT               : 0x8D00,
STENCIL_ATTACHMENT             : 0x8D20,
DEPTH_STENCIL_ATTACHMENT       : 0x821A,
    
NONE                           : 0,
    
FRAMEBUFFER_COMPLETE                      : 0x8CD5,
FRAMEBUFFER_INCOMPLETE_ATTACHMENT         : 0x8CD6,
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : 0x8CD7,
FRAMEBUFFER_INCOMPLETE_DIMENSIONS         : 0x8CD9,
FRAMEBUFFER_UNSUPPORTED                   : 0x8CDD,
  
FRAMEBUFFER_BINDING            : 0x8CA6,
RENDERBUFFER_BINDING           : 0x8CA7,
MAX_RENDERBUFFER_SIZE          : 0x84E8,
    
INVALID_FRAMEBUFFER_OPERATION  : 0x0506,

/* WebGL-specific enums */
UNPACK_FLIP_Y_WEBGL                : 0x9240,
UNPACK_PREMULTIPLY_ALPHA_WEBGL     : 0x9241,
CONTEXT_LOST_WEBGL                 : 0x9242,
UNPACK_COLORSPACE_CONVERSION_WEBGL : 0x9243,
BROWSER_DEFAULT_WEBGL              : 0x9244,
};

// Constants removed from the WebGL spec compared to ES 2.0
var removedConstants = {
NUM_COMPRESSED_TEXTURE_FORMATS : 0x86A2,
FIXED                          : 0x140C,
ACTIVE_UNIFORM_MAX_LENGTH      : 0x8B87,
ACTIVE_ATTRIBUTE_MAX_LENGTH    : 0x8B8A,
EXTENSIONS                     : 0x1F03,
INFO_LOG_LENGTH                : 0x8B84,
SHADER_SOURCE_LENGTH           : 0x8B88,
SHADER_COMPILER                : 0x8DFA,
SHADER_BINARY_FORMATS          : 0x8DF8,
NUM_SHADER_BINARY_FORMATS      : 0x8DF9,
};

function assertProperty(v, p) {
  if (p in v) {
    return true;
  } else {
    testFailed("Property does not exist: " + p)
    return false;
  }
}

function assertNoProperty(v, p) {
  if (p in v) {
    testFailed("Property is defined and should not be: " + p)
    return false;
  } else {
    return true;
  }
}

function assertMsg_(bool, msg) {
  if (!bool) // show only failures to avoid spamming result list
    assertMsg(bool, msg);
  return bool;
}

debug("");
debug("Canvas.getContext");

var canvas = document.getElementById("canvas");
var gl = create3DContext(canvas);
var passed = true;
for (var i in constants) {
  var r = assertProperty(gl, i) && assertMsg_(gl[i] == constants[i], "Property "+i+" value test "+gl[i]+" == "+constants[i]);
  passed = passed && r;
}
if (passed) {
  testPassed("All WebGL constants found to have correct values.");
}
passed = true;
for (var i in removedConstants) {
  var r = assertNoProperty(gl, i);
  passed = passed && r;
}
if (passed) {
  testPassed("All constants removed from WebGL spec were absent from WebGL context.");
}
var extended = false;
for (var i in gl) {
  if (i.match(/^[^a-z]/) && constants[i] == null) {
    if (!extended) {
      extended = true;
      debug("Also found the following extra constants:");
    }
    debug(i);
  }
}

debug("");
</script>
</body>
</html>
