| export const description = `Validation tests for comments`; |
| |
| import { makeTestGroup } from '../../../../common/framework/test_group.js'; |
| import { ShaderValidationTest } from '../shader_validation_test.js'; |
| |
| export const g = makeTestGroup(ShaderValidationTest); |
| |
| g.test('comments') |
| .desc(`Test that valid comments are handled correctly, including nesting.`) |
| .fn(t => { |
| const code = ` |
| /** |
| * Here is my shader. |
| * |
| * /* I can nest /**/ comments. */ |
| * // I can nest line comments too. |
| **/ |
| @fragment // This is the stage |
| fn main(/* |
| no |
| parameters |
| */) -> @location(0) vec4<f32> { |
| return/*block_comments_delimit_tokens*/vec4<f32>(.4, .2, .3, .1); |
| }/* terminated block comments are OK at EOF...*/`; |
| t.expectCompileResult(true, code); |
| }); |
| |
| g.test('line_comment_eof') |
| .desc(`Test that line comments can come at EOF.`) |
| .fn(t => { |
| const code = ` |
| @fragment |
| fn main() -> @location(0) vec4<f32> { |
| return vec4<f32>(.4, .2, .3, .1); |
| } |
| // line comments are OK at EOF...`; |
| t.expectCompileResult(true, code); |
| }); |
| |
| g.test('line_comment_terminators') |
| .desc(`Test that line comments are terminated by any blankspace other than space and \t`) |
| .params(u => |
| u |
| .combine('blankspace', [ |
| [' ', 'space'], |
| ['\t', 'tab'], |
| ['\u000a', 'line_feed'], |
| ['\u000b', 'vertical_tab'], |
| ['\u000c', 'form_feed'], |
| ['\u000d', 'carriage_return'], |
| ['\u000d\u000a', 'carriage_return_line_feed'], |
| ['\u0085', 'next_line'], |
| ['\u2028', 'line_separator'], |
| ['\u2029', 'paragraph_separator'], |
| ]) |
| .beginSubcases() |
| ) |
| .fn(t => { |
| const code = `// Line comment${t.params.blankspace[0]}const invalid_outside_comment = should_fail`; |
| |
| t.expectCompileResult([' ', '\t'].includes(t.params.blankspace[0]), code); |
| }); |
| |
| g.test('unterminated_block_comment') |
| .desc(`Test that unterminated block comments cause an error`) |
| .params(u => u.combine('terminated', [true, false]).beginSubcases()) |
| .fn(t => { |
| const code = ` |
| /** |
| * Unterminated block comment. |
| * |
| ${t.params.terminated ? '*/' : ''}`; |
| |
| t.expectCompileResult(t.params.terminated, code); |
| }); |