summaryrefslogtreecommitdiffstats
path: root/dom/webgpu/tests/cts/checkout/src/common/internal/query/stringify_params.ts
blob: 907cc0791a6b1df2506734eeea4e52d309315ff9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { TestParams } from '../../framework/fixture.js';
import { assert } from '../../util/util.js';
import { JSONWithUndefined, badParamValueChars, paramKeyIsPublic } from '../params_utils.js';

import { stringifyParamValue, stringifyParamValueUniquely } from './json_param_value.js';
import { kParamKVSeparator, kParamSeparator, kWildcard } from './separators.js';

export function stringifyPublicParams(p: TestParams, addWildcard = false): string {
  const parts = Object.keys(p)
    .filter(k => paramKeyIsPublic(k))
    .map(k => stringifySingleParam(k, p[k]));

  if (addWildcard) parts.push(kWildcard);

  return parts.join(kParamSeparator);
}

/**
 * An _approximately_ unique string representing a CaseParams value.
 */
export function stringifyPublicParamsUniquely(p: TestParams): string {
  const keys = Object.keys(p).sort();
  return keys
    .filter(k => paramKeyIsPublic(k))
    .map(k => stringifySingleParamUniquely(k, p[k]))
    .join(kParamSeparator);
}

export function stringifySingleParam(k: string, v: JSONWithUndefined) {
  return `${k}${kParamKVSeparator}${stringifySingleParamValue(v)}`;
}

function stringifySingleParamUniquely(k: string, v: JSONWithUndefined) {
  return `${k}${kParamKVSeparator}${stringifyParamValueUniquely(v)}`;
}

function stringifySingleParamValue(v: JSONWithUndefined): string {
  const s = stringifyParamValue(v);
  assert(
    !badParamValueChars.test(s),
    `JSON.stringified param value must not match ${badParamValueChars} - was ${s}`
  );
  return s;
}