summaryrefslogtreecommitdiffstats
path: root/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts
diff options
context:
space:
mode:
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts')
-rw-r--r--dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts b/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts
new file mode 100644
index 0000000000..af49c49619
--- /dev/null
+++ b/dom/webgpu/tests/cts/checkout/src/webgpu/shader/validation/parse/comments.spec.ts
@@ -0,0 +1,75 @@
+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);
+ });