fun testKeywords()

in android-lang/testSrc/com/android/tools/idea/lang/agsl/AgslLexerTest.kt [86:352]


  fun testKeywords() {
    // From EGSL 1.0 spec, section 3.7:
    doTest(
      "attribute const uniform varying " +
      "break continue do for while " +
      "if else " +
      "in out inout" +
      "float int void bool true false " +
      "lowp mediump highp precision invariant" +
      // Note that discard is disallowed in AGSL but we
      // recognize it as a keywords and produce a parser
      // wawrning instead (as well as for a few others)
      "discard " +
      "return " +
      "mat2 mat3 mat4 " +
      "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " +
      "sampler2D samplerCube " +
      "struct " +
      // Additional keywords/aliases added in AGSL
      "half half2, half3, half4 " +
      "float2 float3 float4 " +
      "bool2 bool3 bool4 " +
      "int2 int3 int4 " +
      "float2x2 float3x3 float4x4 " +
      "half2x2 half3x3 half4x4 " +
      "shader colorFilter blender" +
      "not_a_keyword",
      "AgslTokenType.attribute ('attribute')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.const ('const')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.uniform ('uniform')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.varying ('varying')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.break ('break')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.continue ('continue')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.do ('do')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.for ('for')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.while ('while')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.if ('if')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.else ('else')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.in ('in')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.out ('out')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.IDENTIFIER ('inoutfloat')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.int ('int')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.void ('void')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bool ('bool')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.true ('true')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.false ('false')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.lowp ('lowp')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.mediump ('mediump')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.highp ('highp')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.precision ('precision')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.IDENTIFIER ('invariantdiscard')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.return ('return')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.mat2 ('mat2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.mat3 ('mat3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.mat4 ('mat4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.vec2 ('vec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.vec3 ('vec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.vec4 ('vec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.ivec2 ('ivec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.ivec3 ('ivec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.ivec4 ('ivec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bvec2 ('bvec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bvec3 ('bvec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bvec4 ('bvec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.IDENTIFIER ('sampler2D')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.samplerCube ('samplerCube')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.struct ('struct')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half ('half')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half2 ('half2')\n" +
      "AgslTokenType., (',')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half3 ('half3')\n" +
      "AgslTokenType., (',')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half4 ('half4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float2 ('float2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float3 ('float3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float4 ('float4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bool2 ('bool2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bool3 ('bool3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.bool4 ('bool4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.int2 ('int2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.int3 ('int3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.int4 ('int4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float2x2 ('float2x2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float3x3 ('float3x3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.float4x4 ('float4x4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half2x2 ('half2x2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half3x3 ('half3x3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half4x4 ('half4x4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.shader ('shader')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.colorFilter ('colorFilter')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.IDENTIFIER ('blendernot_a_keyword')"
    )

    // Reserved keywords
    doTest(
      "asm" +
      " class union enum typedef template this packed" +
      " goto switch default" +
      " inline noinline volatile public static extern external interface flat" +
      " long short double half fixed unsigned superp" +
      " input output" +
      " hvec2 hvec3 hvec4 dvec2 dvec3 dvec4 fvec2 fvec3 fvec4" +
      " sampler1D sampler3D" +
      " sampler1DShadow sampler2DShadow" +
      " sampler2DRect sampler3DRect sampler2DRectShadow" +
      " sizeof cast" +
      " namespace using",
      "AgslTokenType.asm ('asm')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.class ('class')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.union ('union')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.enum ('enum')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.typedef ('typedef')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.template ('template')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.this ('this')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.packed ('packed')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.goto ('goto')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.switch ('switch')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.default ('default')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.inline ('inline')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.noinline ('noinline')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.volatile ('volatile')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.public ('public')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.static ('static')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.extern ('extern')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.external ('external')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.interface ('interface')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.flat ('flat')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.long ('long')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.short ('short')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.double ('double')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.half ('half')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.fixed ('fixed')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.unsigned ('unsigned')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.superp ('superp')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.input ('input')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.output ('output')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.hvec2 ('hvec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.hvec3 ('hvec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.hvec4 ('hvec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.dvec2 ('dvec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.dvec3 ('dvec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.dvec4 ('dvec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.fvec2 ('fvec2')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.fvec3 ('fvec3')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.fvec4 ('fvec4')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler1D ('sampler1D')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler3D ('sampler3D')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler1DShadow ('sampler1DShadow')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler2DShadow ('sampler2DShadow')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler2DRect ('sampler2DRect')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler3DRect ('sampler3DRect')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sampler2DRectShadow ('sampler2DRectShadow')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.sizeof ('sizeof')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.cast ('cast')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.namespace ('namespace')\n" +
      "WHITE_SPACE (' ')\n" +
      "AgslTokenType.using ('using')"
    )
  }