| 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; |
| } |