diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ef0a7362..9e66d1f9 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -17,6 +17,8 @@ jobs: steps: - name: Check out the code uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + submodules: true - name: Set up with Node.js LTS uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f28e1f53..6c9adcce 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -43,6 +43,8 @@ jobs: steps: - name: Check out the code uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + submodules: true - name: Set up with Node.js ${{ matrix.node-version }} uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6 with: diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..cfc4295c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "hed-tests"] + path = spec_tests/hed-tests + url = https://github.com/hed-standard/hed-tests.git + branch = main diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b567abc..68b3de04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ ### Changed - Replaced action versions with hashes for security. +- The JSON spec tests now come from the [hed-tests](https://github.com/hed-standard/hed-tests) + repository, checked out as the git submodule `spec_tests/hed-tests` instead of the vendored + `spec_tests/javascriptTests.json`. Cases this validator does not pass yet are skipped by name + in `spec_tests/skippedTests.js`. Clone with `--recurse-submodules` or run + `git submodule update --init` before `npm run testSpecs`. ### Fixed @@ -16,7 +21,7 @@ ### Added -- `BidsWebAccessor` — a new browser-compatible BIDS file accessor that +- `BidsWebAccessor` — a new browser-compatible BIDS file accessor that reads dataset files from browser `File` objects provided via an `` element or drag-and-drop upload. Schema loading is performed via remote HTTPS fetching. This enables in-browser BIDS/HED diff --git a/README.md b/README.md index 7b7fd66a..05efb69e 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,22 @@ main() The `main` branch is now the default branch. All changes to the repository should be done as PRs (pull requests) to the `main` branch. +### Running the tests + +The JSON spec tests in `spec_tests/` read the [hed-tests](https://github.com/hed-standard/hed-tests) +suite from the git submodule `spec_tests/hed-tests`, so check it out before running them: + +```code +git clone --recurse-submodules https://github.com/hed-standard/hed-javascript +cd hed-javascript +npm install +npm test # unit tests in tests/ +npm run testSpecs # hed-tests JSON suite in spec_tests/ +``` + +In an existing clone, `git submodule update --init` fetches the submodule. See +`spec_tests/README.md` for how the suite is run and how failing cases are skipped. + ### Running the browser locally The browser app has moved to the [hed-web](https://github.com/hed-standard/hed-web) repository. diff --git a/jest.config.js b/jest.config.js index d5fa2985..033d8d4f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,15 +5,16 @@ module.exports = { '^.+\\.(js|jsx)$': 'babel-jest', }, transformIgnorePatterns: ['/node_modules/(?!unicode-name|semver)'], - testPathIgnorePatterns: ['node_modules/', '/types/test.ts', '/browser/'], + testPathIgnorePatterns: [ + 'node_modules/', + '/types/test.ts', + '/browser/', + '/spec_tests/hed-tests/', + ], moduleNameMapper: { '\\.(css|less|scss|sass)$': 'identity-obj-proxy', }, - collectCoverageFrom: [ - 'src/**/*.js', - '!src/**/*.spec.js', - '!src/**/*.test.js', - ], + collectCoverageFrom: ['src/**/*.js', '!src/**/*.spec.js', '!src/**/*.test.js'], coveragePathIgnorePatterns: [ '/node_modules/', '/tests/', diff --git a/spec_tests/README.md b/spec_tests/README.md index e3522fb6..26a411e1 100644 --- a/spec_tests/README.md +++ b/spec_tests/README.md @@ -1,27 +1,74 @@ # HED spec tests -This directory contains the HED specification-level test suite. +This directory runs the official HED JSON test suite from the +[hed-tests](https://github.com/hed-standard/hed-tests) repository against this validator. -## Running tests +## Getting the test data -Run the spec tests using the npm script: +The suite lives in the git submodule `spec_tests/hed-tests`, pinned to a specific hed-tests +commit. It is empty in a plain clone until you fetch it: ```powershell -npm run testSpecs +git submodule update --init ``` -This is equivalent to: +or clone with `git clone --recurse-submodules`. The runner fails with a message pointing here if +the submodule is missing. + +## Running the tests ```powershell -npx jest --testPathPatterns='spec_tests/' +npm run testSpecs ``` -## Test files +This is equivalent to `npx jest --testPathPatterns='/spec_tests/'`. + +## Files + +- **hedTests.spec.js** - the runner. Reads + `hed-tests/json_test_data/validation_tests.json` and runs every case's string, sidecar, + events and sidecar+events sub-tests through the BIDS validation entry points. A failing case + passes when one of its `error_code` or `alt_codes` is among the errors returned (among the + warnings, with no errors, when the case has `warning: true`). A passing case passes when no + errors are returned (and no warnings when `warning: true`). +- **skippedTests.js** - cases this validator does not pass yet, keyed by test case name with a + one-line reason. Each listed case is reported as skipped in the jest summary. Remove the entry + once the case passes. +- **hed-tests/** - the submodule. Do not edit files inside it; changes to the test suite go to + the hed-tests repository. + +## Schema loading + +Cases name schemas by version string (`8.4.0`, `ts:testconflict_2.1.0`, ...). Following the +convention in `hed-tests/json_test_data/test_schemas/README.md`, the runner resolves each version +string against `hed-tests/json_test_data/test_schemas/hedxml/` by cache-convention file name +(`HED.xml` or `HED__.xml`) when such a file exists, and otherwise +against the schemas bundled in `src/data/schemas/`. The test-only libraries (`testconflict`, +`testclash`, `testminimal`, `testaux`) and the vendored 8.5.0 prerelease therefore need no +network access. When building the schemas for a case throws, that issue is the result of every +sub-test of the case, which is how the SCHEMA_LOAD_FAILED cases are checked. -- **jsonTests.spec.js** — The main spec test suite that runs HED validation tests against test cases defined in `javascriptTests.json`. It validates parser behavior, BIDS support, and schema compliance using a comprehensive set of test vectors. +## Schema tests are not run + +hed-tests also ships `schema_tests.json`, which checks that validators detect errors in HED +schema files themselves (the cases are mediawiki schema source text). hed-javascript assumes the +schemas it loads are valid and does not implement schema validation, so that file is skipped as a +block in `hedTests.spec.js` and is not part of this validator's conformance target. + +## Updating the pin + +```powershell +git -C spec_tests/hed-tests fetch origin +git -C spec_tests/hed-tests checkout +npm run testSpecs +``` -- **javascriptTests.json** — Data file containing the test cases used by `jsonTests.spec.js`. Includes test scenarios for tag parsing, definition validation, BIDS file validation, and error handling. +Add any newly failing case to `skippedTests.js` with a reason (or fix it), then commit the +submodule pointer together with the skip-list change. -## About spec tests +## Debugging one case -Spec tests validate the validator against the HED specification and ensure that all validator behavior is correct according to the spec. These are distinct from unit tests in `tests/` which test individual modules and functions. +At the top of `hedTests.spec.js`, set `runAll` to `false` and put the error code and case names +in `runMap`, or keep `runAll` and list cases in `skipMap`. `runOnly` restricts the sub-test kinds +(`stringPass`, `stringFail`, `sidecarPass`, `sidecarFail`, `eventsPass`, `eventsFail`, +`comboPass`, `comboFail`). diff --git a/spec_tests/hed-tests b/spec_tests/hed-tests new file mode 160000 index 00000000..183c235e --- /dev/null +++ b/spec_tests/hed-tests @@ -0,0 +1 @@ +Subproject commit 183c235e527de4bc0b00f7c06b99f899dd31f4d5 diff --git a/spec_tests/hedTests.spec.js b/spec_tests/hedTests.spec.js new file mode 100644 index 00000000..27259b58 --- /dev/null +++ b/spec_tests/hedTests.spec.js @@ -0,0 +1,344 @@ +/** + * Run the hed-tests JSON validation suite (spec_tests/hed-tests, a git submodule) against this + * validator. + * + * Only validation_tests.json is run. The suite's schema_tests.json validates HED schema files + * themselves (mediawiki source text); hed-javascript assumes the schemas it loads are valid and + * does not implement schema validation, so that file is skipped as a block below. + * + * Schema loading convention (hed-tests json_test_data/test_schemas/README.md): every version + * string in a case's "schema" field is resolved against test_schemas/hedxml by its cache-convention + * file name (HED.xml or HED__.xml) when such a file exists, and + * otherwise against the schemas bundled in src/data/schemas. A schema build that throws becomes + * the issue list of every sub-test of that case, so SCHEMA_LOAD_FAILED cases are expressible. + * + * Cases this validator does not pass yet are listed by name in skippedTests.js. + */ +import chai from 'chai' +const assert = chai.assert +import { beforeAll, describe, test } from '@jest/globals' +import path from 'node:path' +import fs from 'node:fs' + +import { BidsHedIssue } from '../src/bids/types/issues' +import { buildSchemas } from '../src/schema/init' +import { SchemaSpec, SchemasSpec } from '../src/schema/specs' +import { BidsSidecar, BidsTsvFile } from '../src/bids' +import { generateIssue, IssueError } from '../src/issues/issues' +import { DefinitionManager } from '../src/parser/definitionManager' +import parseTSV from '../src/bids/tsvParser' +import { shouldRun } from '../tests/testHelpers/testUtilities' +import { skippedTests } from './skippedTests' + +const hedTestsDataDir = path.join(__dirname, 'hed-tests', 'json_test_data') +const testSchemasDir = path.join(hedTestsDataDir, 'test_schemas', 'hedxml') +const validationTestsFile = path.join(hedTestsDataDir, 'validation_tests.json') + +// Debugging hooks: set runAll to false and list the cases to run in runMap, or keep runAll and +// list cases to skip in skipMap. Both map an error code to an array of case names (empty = all). +const runAll = true +const runMap = new Map() +const skipMap = new Map() +// Restrict to some sub-test kinds while debugging, e.g. new Set(['stringFail']). Empty = all. +const runOnly = new Set() + +function loadTestData() { + if (!fs.existsSync(validationTestsFile)) { + throw new Error( + `${validationTestsFile} not found. The hed-tests submodule is not checked out: run "git submodule update --init".`, + ) + } + return JSON.parse(fs.readFileSync(validationTestsFile, 'utf8')) +} + +const testInfo = loadTestData() + +/** + * Build the Schemas object for a case's "schema" field. + * + * @param {string|string[]} schemaVersions One version string or a list of them. + * @returns {Promise} The built schemas. + * @throws {IssueError} If the schemas cannot be built. + */ +function buildTestSchemas(schemaVersions) { + const versions = typeof schemaVersions === 'string' ? [schemaVersions] : schemaVersions + const specs = new SchemasSpec() + for (const version of versions) { + const spec = SchemaSpec.parseVersionSpec(version) + const localFile = path.join(testSchemasDir, spec.localName + '.xml') + if (fs.existsSync(localFile)) { + spec.localPath = localFile + } + specs.addSchemaSpec(spec) + } + return buildSchemas(specs) +} + +const schemaCache = new Map() + +/** + * Build the schemas for a case, caching by the JSON of the "schema" field. + * + * @param {string|string[]} schemaVersions The case's "schema" field. + * @returns {Promise} The built schemas. + */ +function getTestSchemas(schemaVersions) { + const key = JSON.stringify(schemaVersions) + if (!schemaCache.has(key)) { + schemaCache.set(key, buildTestSchemas(schemaVersions)) + } + return schemaCache.get(key) +} + +/** + * Convert a thrown error into an issue. + * + * @param {Error} error A thrown error. + * @returns {Issue} The issue. + */ +function convertIssue(error) { + if (error instanceof IssueError) { + return error.issue + } + return generateIssue('internalError', { message: error.message }) +} + +/** + * Separate the error codes and warning codes of a list of issues. + * + * @param {Array} issues The issues. + * @returns {[Set, Set]} The error codes and the warning codes. + */ +function extractErrorCodes(issues) { + const errors = new Set() + const warnings = new Set() + for (const issue of issues) { + const hedIssue = issue instanceof BidsHedIssue ? issue.hedIssue : issue + if (hedIssue.level === 'error') { + errors.add(hedIssue.hedCode) + } else if (hedIssue.level === 'warning') { + warnings.add(hedIssue.hedCode) + } + } + return [errors, warnings] +} + +function tsvToString(events) { + return events.map((row) => row.join('\t')).join('\n') +} + +function stringifyList(items) { + return (items ?? []).map((item) => JSON.stringify(item)) +} + +function tsvListToStrings(eventList) { + return (eventList ?? []).map((events) => tsvToString(events)) +} + +function comboListToStrings(items) { + return (items ?? []).map((item) => [JSON.stringify(item.sidecar), tsvToString(item.events)]) +} + +describe('HED validation using the hed-tests JSON suite', () => { + test('should load the test data', () => { + expect(testInfo).toBeDefined() + expect(testInfo.length).toBeGreaterThan(0) + }) + + describe.each(testInfo)( + '$error_code $name : $description', + ({ error_code, alt_codes, name, schema, definitions, warning, tests }) => { + let hedSchemas = null + let loadIssue = null + let defList = [] + let expectedErrors + const noErrors = new Set() + + const passedStrings = tests.string_tests?.passes ?? [] + const failedStrings = tests.string_tests?.fails ?? [] + const passedSidecars = stringifyList(tests.sidecar_tests?.passes) + const failedSidecars = stringifyList(tests.sidecar_tests?.fails) + const passedEvents = tsvListToStrings(tests.event_tests?.passes) + const failedEvents = tsvListToStrings(tests.event_tests?.fails) + const passedCombos = comboListToStrings(tests.combo_tests?.passes) + const failedCombos = comboListToStrings(tests.combo_tests?.fails) + + const assertErrors = function (expected, issues, header) { + const [errors, warnings] = extractErrorCodes(issues) + if (warning) { + assert.isTrue(errors.size === 0, `${header} expected no errors but received [${[...errors].join(', ')}]`) + let warningIntersection = [...expected].some((element) => warnings.has(element)) + if (expected.size === 0 && warnings.size === 0) { + warningIntersection = true + } + assert.isTrue( + warningIntersection, + `${header} expected one of warnings[${[...expected].join(', ')}] but received [${[...warnings].join(', ')}]`, + ) + return + } + let errorIntersection = [...expected].some((element) => errors.has(element)) + if (expected.size === 0 && errors.size === 0) { + errorIntersection = true + } + assert.isTrue( + errorIntersection, + `${header} expected one of errors[${[...expected].join(', ')}] but received [${[...errors].join(', ')}]`, + ) + } + + /** + * Run a validation, returning the schema load issue instead if the schemas did not build. + * + * @param {function(): Array} validate The validation to run. + * @returns {Array} The issues. + */ + const runValidation = function (validate) { + if (loadIssue !== null) { + return [loadIssue] + } + try { + return validate() + } catch (e) { + return [convertIssue(e)] + } + } + + const newDefManager = function () { + const defManager = new DefinitionManager() + defManager.addDefinitions(defList) + return defManager + } + + const statusOf = (expected) => (expected.size === 0 ? 'Expect pass' : 'Expect fail') + + const stringValidator = function (str, expected) { + const header = `\n[${error_code} ${name}](${statusOf(expected)})\tSTRING: "${str}"` + const hTsv = `onset\tHED\n5.4\t${str}\n` + const issues = runValidation(() => { + const parsedTsv = parseTSV(hTsv) + assert.instanceOf(parsedTsv, Map, `${str} cannot be parsed`) + return new BidsTsvFile('string', { path: 'string test tsv' }, parsedTsv, {}, newDefManager()).validate( + hedSchemas, + ) + }) + assertErrors(expected, issues, header) + } + + const sidecarValidator = function (side, expected) { + const header = `\n[${error_code} ${name}](${statusOf(expected)})\tSIDECAR "${side}"` + const issues = runValidation(() => + new BidsSidecar('sidecar', { path: 'sidecar test' }, JSON.parse(side), newDefManager()).validate(hedSchemas), + ) + assertErrors(expected, issues, header) + } + + const eventsValidator = function (events, expected) { + const header = `\n[${error_code} ${name}](${statusOf(expected)})\tEvents:\n"${events}"` + const issues = runValidation(() => { + const parsedTsv = parseTSV(events) + assert.instanceOf(parsedTsv, Map, `${events} cannot be parsed`) + return new BidsTsvFile('events', { path: 'events test' }, parsedTsv, {}, newDefManager()).validate(hedSchemas) + }) + assertErrors(expected, issues, header) + } + + const comboValidator = function (side, events, expected) { + const header = `\n[${error_code} ${name}](${statusOf(expected)})\tCOMBO\t"${side}"\n"${events}"` + const issues = runValidation(() => { + const parsedTsv = parseTSV(events) + assert.instanceOf(parsedTsv, Map, `${events} cannot be parsed`) + return new BidsTsvFile( + 'events', + { path: 'combo test tsv' }, + parsedTsv, + JSON.parse(side), + newDefManager(), + ).validate(hedSchemas) + }) + assertErrors(expected, issues, header) + } + + beforeAll(async () => { + expectedErrors = new Set(alt_codes ?? []) + expectedErrors.add(error_code) + try { + hedSchemas = await getTestSchemas(schema) + } catch (e) { + loadIssue = convertIssue(e) + return + } + let defIssues + ;[defList, defIssues] = DefinitionManager.createDefinitions(definitions ?? [], hedSchemas) + assert.equal(defIssues.length, 0, `${name}: input definitions "${definitions}" have errors "${defIssues}"`) + }) + + if (!shouldRun(error_code, name, runAll, runMap, skipMap)) { + // eslint-disable-next-line no-console + console.log(`----Skipping hed-tests case ${error_code} [${name}]`) + return + } + + if (name in skippedTests) { + test.skip(`Skipping ${error_code} [${name}]: ${skippedTests[name]}`, () => {}) + return + } + + test('it should build the schemas', () => { + expect(loadIssue === null || expectedErrors.has(loadIssue.hedCode)).toBe(true) + }) + + if (passedStrings.length > 0 && (runOnly.size === 0 || runOnly.has('stringPass'))) { + test.each(passedStrings)('Valid string: %s', (str) => { + stringValidator(str, noErrors) + }) + } + + if (failedStrings.length > 0 && (runOnly.size === 0 || runOnly.has('stringFail'))) { + test.each(failedStrings)('Invalid string: %s', (str) => { + stringValidator(str, expectedErrors) + }) + } + + if (passedSidecars.length > 0 && (runOnly.size === 0 || runOnly.has('sidecarPass'))) { + test.each(passedSidecars)('Valid sidecar: %s', (side) => { + sidecarValidator(side, noErrors) + }) + } + + if (failedSidecars.length > 0 && (runOnly.size === 0 || runOnly.has('sidecarFail'))) { + test.each(failedSidecars)('Invalid sidecar: %s', (side) => { + sidecarValidator(side, expectedErrors) + }) + } + + if (passedEvents.length > 0 && (runOnly.size === 0 || runOnly.has('eventsPass'))) { + test.each(passedEvents)('Valid events: %s', (events) => { + eventsValidator(events, noErrors) + }) + } + + if (failedEvents.length > 0 && (runOnly.size === 0 || runOnly.has('eventsFail'))) { + test.each(failedEvents)('Invalid events: %s', (events) => { + eventsValidator(events, expectedErrors) + }) + } + + if (passedCombos.length > 0 && (runOnly.size === 0 || runOnly.has('comboPass'))) { + test.each(passedCombos)('Valid combo: [%s] [%s]', (side, events) => { + comboValidator(side, events, noErrors) + }) + } + + if (failedCombos.length > 0 && (runOnly.size === 0 || runOnly.has('comboFail'))) { + test.each(failedCombos)('Invalid combo: [%s] [%s]', (side, events) => { + comboValidator(side, events, expectedErrors) + }) + } + }, + ) +}) + +describe('HED schema tests from the hed-tests JSON suite', () => { + test.skip('schema_tests.json is not run: hed-javascript assumes the schemas it loads are valid and does not validate schema files', () => {}) +}) diff --git a/spec_tests/javascriptTests.json b/spec_tests/javascriptTests.json deleted file mode 100644 index e386cbe4..00000000 --- a/spec_tests/javascriptTests.json +++ /dev/null @@ -1,12966 +0,0 @@ -[ - { - "error_code": "CHARACTER_INVALID", - "alt_codes": [ - "TAG_INVALID", - "UNITS_INVALID", - "VALUE_INVALID" - ], - "name": "character-invalid-non-printing-appears", - "description": "The HED string contains a UTF-8 character.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Item/Bl\b", - "Item/ABC\u009e" - ], - "passes": [ - "Red, Blue, Description/Red", - "Description/This is a \u00ca\u00b0 good character" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "show": "Red, Item/Bl\b" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "show": "Red, Label/a-\u00ca\u00b0-good" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Item/Bl\b" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Item/{abc}" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/Temp, Label/a-\u00ca\u00b0-good" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "show": "Red, Item/Bl\b", - "ball": "Def/Acc/4.5" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "show", - "Description/a \u00ca\u00b0 good" - ], - [ - 5.0, - 0, - "ball", - "Blue" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "show": "Red, Label/a, Description/a \u00ca\u00b0 good" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "show", - "Description/goodness" - ] - ] - } - ] - } - } - }, - { - "error_code": "CHARACTER_INVALID", - "alt_codes": [ - "TAG_INVALID", - "UNITS_INVALID", - "VALUE_INVALID" - ], - "name": "curly-braces-not-in-sidecar", - "description": "The curly brace notation is used outside a sidecar.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "{col_1}, Red" - ], - "passes": [ - "Red, Blue, Description/Red" - ] - }, - "sidecar_tests": { - "fails": [], - "passes": [ - { - "event_code": { - "HED": { - "face": "Statistical-accuracy/0.677, {response}" - } - }, - "response": { - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "{who_knows}, Red" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/Temp" - ] - ] - ] - }, - "combo_tests": { - "fails": [], - "passes": [] - } - } - }, - { - "error_code": "CHARACTER_INVALID", - "alt_codes": [ - "TAG_INVALID", - "VALUE_INVALID" - ], - "name": "invalid-character-name-value-class", - "description": "An invalid character was used in an 8.3.0 or greater style name value class.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Parameter-label/[", - "Parameter-label/Taco*", - "Label/30$", - "Label/30db kg" - ], - "passes": [ - "Parameter-label/Words", - "Label/30e10", - "Label/3e10asdf" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "show": "Parameter-label/[" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": "Parameter-label/#" - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/%max1" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/$30" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/30db kg" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/3e10asdf" - ] - ] - ] - }, - "combo_tests": { - "fails": [], - "passes": [] - } - } - }, - { - "error_code": "CHARACTER_INVALID", - "alt_codes": [ - "TAG_INVALID", - "VALUE_INVALID" - ], - "name": "invalid-character-name-value-class", - "description": "An invalid character was used in an 8.2.0 or earlier.", - "warning": false, - "schema": "8.2.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Parameter-label/[", - "Parameter-label/Taco*", - "Label/30$", - "Label/30db kg" - ], - "passes": [ - "Parameter-label/Words", - "Label/30e10", - "Label/3e10asdf" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "show": "Parameter-label/[" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": "Parameter-label/#" - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/%max1" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/$30" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/30db kg" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/3e10asdf" - ] - ] - ] - }, - "combo_tests": { - "fails": [], - "passes": [] - } - } - }, - { - "error_code": "COMMA_MISSING", - "alt_codes": [], - "name": "comma-missing-tag-groups", - "description": "Two tag groups are not separated by commas: (A, B)(C, D).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Red, Blue)(Green, (Yellow))", - "(Def/MyColor, Onset)(Def/Acc/3.5)" - ], - "passes": [ - "(Red, Blue), (Green, (Yellow))", - "(Def/MyColor, Onset),(Def/Acc/3.5)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue)(Green, (Yellow))", - "ball": "(Def/MyColor, Onset)(Def/Acc/3.5)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, ( Yellow))", - "ball": "(Def/MyColor, Onset),(Def/Acc/3.5)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, Blue)(Green, (Yellow))" - ], - [ - 5.5, - 0, - "(Def/MyColor, Onset)(Def/Acc/3.5)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, Blue), (Green, (Yellow))" - ], - [ - 5.5, - 0, - "(Def/MyColor, Onset),(Def/Acc/3.5)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue)(Green, (Yellow))", - "ball": "(Def/MyColor, Onset)(Def/Acc/3.5)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ], - [ - 6.0, - 0, - "n/a", - "(Blue, Green)(Blue, Red)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, ( Yellow))", - "ball": "(Def/MyColor, Onset),(Def/Acc/3.5)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "(Green, Def/MyColor),(Red)" - ] - ] - } - ] - } - } - }, - { - "error_code": "COMMA_MISSING", - "alt_codes": [], - "name": "comma-missing-tag-and-group", - "description": "A tag and a tag group are not separated by commas: A(B,D).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red, Blue(Green, (Yellow))", - "(Def/MyColor, Onset)Def/Acc/3.5" - ], - "passes": [ - "Red, (Green, (Yellow))", - "(Def/MyColor, Onset),Def/Acc/3.5" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Red(Green, (Yellow))", - "ball": "(Def/MyColor, Onset)Def/Acc/3.5" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red, (Green, (Yellow))", - "ball": "(Def/MyColor, Onset),Def/Acc/3.5" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red(Green, (Yellow))" - ], - [ - 5.5, - 0, - "(Def/MyColor, Onset)Def/Acc/3.5" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Green, (Yellow))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red(Green, (Yellow))", - "ball": "(Def/MyColor, Onset)Def/Acc/3.5" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ], - [ - 6.0, - 0, - "n/a", - "(Green, Yellow)Red" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red, (Green, (Yellow))", - "ball": "(Def/MyColor, Onset),Def/Acc/3.5" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_GROUP_ERROR", - "TAG_INVALID" - ], - "name": "definition-invalid-tag-group", - "description": "A Definition tag does not appear in a tag group at the top level in an annotation.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Definition/Apple, (Blue)), ((Definition/Blech, (Red)))", - "Definition/Blech, (Red)" - ], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue)), ((Definition/Blech, (Red)))", - "def2": "Definition/Blech, (Red)" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Blech, (Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue)), ((Definition/Blech, (Red)))", - "def2": "Definition/Blech, (Red)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/MyColor, Def/Apple" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue))", - "def2": "(Definition/Blech, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/MyColor, Def/Apple" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_EMPTY" - ], - "name": "definition-invalid-empty-inner-group", - "description": "A definition's enclosing tag group has an empty inner group (i.e., the definition's contents).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def2": "(Definition/Blech/#, ())" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple)" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def2": "(Definition/Blech/#, ())" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/MyColor, Def/Apple" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple)", - "def2": "(Definition/Blech, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/MyColor, Def/Apple" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "definition-invalid-multiple-definition-tags", - "description": "A definition's enclosing tag group contains more than a `Definition` tag and an inner group.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, Definition/Banana, (Blue))", - "def2": "(Definition/Blech, (Red), Definition/Banana1)", - "def3": "(Definition/Blech1, (Red), Blue)" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue))", - "def2": "((Red), Definition/Blech)" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, Definition/Banana, (Blue))", - "def2": "(Definition/Blech, (Red), Definition/Banana1)", - "def3": "(Definition/Blech1, (Red), Blue)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple, Def/Banana" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue))", - "def2": "((Red), Definition/Blech)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech, Def/Apple" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "definition-invalid-inner-group-defs", - "description": "A definition's inner tag group contains `Definition`, `Def` or `Def-expand` tags.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Definition/Banana, Blue))", - "def2": "(Definition/Blech, (Red, Def/Apple))" - } - } - } - ], - "passes": [] - }, - "event_tests": { - "fails": [], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/a" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Definition/Banana, (Blue)))", - "def2": "(Definition/Blech, ((Red), Def/MyColor))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple, Def/Banana" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Blue))", - "def2": "((Red), Definition/Blech)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech, Def/Apple" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [], - "name": "definition-invalid-bad-number-of-placeholders", - "description": "A definition that includes a placeholder (`#`) does not have exactly two `#` characters.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#, Description/#))", - "def2": "(Definition/Blech/#, (Red))" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech/#, (Red, Label/#))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#, Description/#))", - "def2": "(Definition/Blech/#, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple/3, Def/Blech/might" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech/#, (Red, Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech/5, Def/Apple/4" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_INVALID", - "PLACEHOLDER_INVALID" - ], - "name": "definition-invalid-placeholder-incorrect-of-positions", - "description": "A definition has placeholders (`#`) in incorrect positions.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Label/#))", - "def2": "(Definition/Blech/#, (Red, #))" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Label/Blue))", - "def2": "(Definition/Blech/#, (Label/#, Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Label/#))", - "def2": "(Definition/Blech/#, (Red, #))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple, Def/Blech/might" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech/#, (Red, Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech/5, Def/Apple/4" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_INVALID", - "PLACEHOLDER_INVALID" - ], - "name": "definition-invalid-placeholder-conflict", - "description": "Definitions of the same name appear with and without a `#`.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Label/#))", - "def2": "(Definition/Apple/#, (Red, #))" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Blech/#, (Label/#))", - "def2": "(Definition/Apple, (Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Label/#))", - "def2": "(Definition/Apple/#, (Red, #))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple/3, Def/Apple" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech, Def/Apple/4" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [], - "name": "definition-invalid-multiple-definitions", - "description": "Multiple `Definition` tags with same name are encountered.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#, Description/#))", - "def2": "(Definition/Apple/#, (Label/#))", - "def3": "(Definition/MyColor, (Blue))" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/ThisIsALabel, Description/#))", - "def2": "(Definition/Apple2/#, (Label/#))", - "def3": "(Definition/MyColor2, (Blue))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#, Description/#))", - "def2": "(Definition/Apple/#, (Label/#))", - "def3": "(Definition/MyColor, (Blue))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple/3, Def/Blech/might" - ], - [ - 5.0, - 0, - "Def/MyColor" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech/#, (Red, Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech/5, Def/Apple/4" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "definition-invalid-content-has-top-level-tag", - "description": "A tag with a required or unique attribute appears in a definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Event-context, Red))", - "def2": "(Definition/Banana/#, (Label/#))" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Red))", - "def2": "(Definition/Banana/#, (Label/#))" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Event-context, Red))", - "def2": "(Definition/Banana/#, (Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple, Def/Banana/might" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple, (Red))", - "def2": "(Definition/Banana/#, (Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple, Def/Banana/might" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEFINITION_INVALID", - "alt_codes": [ - "TAG_INVALID" - ], - "name": "definition-not-allowed-here", - "description": "A definition appears in an unexpected place such as an events file or sidecar.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Item, (Label/Pie)))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red, Blue, (Definition/myDef, (Label/Red, Blue))" - ], - "passes": [ - "Red, Blue" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Red, Blue, (Definition/myDef, (Label/Red, Blue))", - "ball": "Def/Acc/4.5" - } - } - } - ], - "passes": [ - { - "defs": { - "HED": { - "face": "(Definition/myDef, (Label/Red, Blue)), (Definition/myDef2, (Label/Red, Blue))", - "ball": "(Definition/myDef1, (Label/Red, Blue))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Definition/myDef, (Label/Red, Green))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, Blue, Def/MyColor" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red, Blue, (Definition/myDef, (Label/Red, Blue))", - "ball": "Def/Acc/4.5" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/myDef, Red" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "defs": { - "HED": { - "def1": "(Definition/Apple/#, (Label/#))", - "def2": "(Definition/Blech/#, (Red, Label/#))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Blech/5, Def/Apple/4" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [], - "name": "def-expand-invalid-name-not-definition", - "description": "A `Def-expand` tag's name does not correspond to a definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/MyColor2, (Label/Pie))" - ], - "passes": [ - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc2/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/MyColor2, (Label/Pie))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/MyColor, (Label/Pie))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc2/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/MyColor2, (Label/Pie))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/MyColor, (Label/Pie))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc2/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/MyColor2, (Label/Pie))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ], - [ - 5.0, - 0, - "ball", - "(Def-expand/Junk, (Label/Red))" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/MyColor, (Label/Pie))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/MyColor, (Label/Pie))" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [ - "VALUE_INVALID" - ], - "name": "def-expand-invalid-missing-placeholder", - "description": "A `Def-expand` is missing an expected placeholder value or has an unexpected placeholder value.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/Acc, (Acceleration, Red))", - "(Def-expand/MyColor/Blue, (Label/Pie))" - ], - "passes": [ - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc, (Acceleration, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration, Red))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc, (Acceleration, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration, Red))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc, (Acceleration, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration, Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code" - ], - [ - 4.5, - 0, - "face" - ], - [ - 5.5, - 0, - "ball" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ], - [ - 5.2, - 0, - "ball", - "(Def-expand/MyColor, (Label/Pie))" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [ - "VALUE_INVALID", - "UNITS_INVALID" - ], - "name": "def-expand-invalid-bad-placeholder-value-or-units", - "description": "A `Def-expand` has an incorrect type of placeholder value.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/Acc/Make-me, (Acceleration/Make-me, Red))", - "(Def-expand/Acc/4.5, (Acceleration/4.5 m, Red))", - "(Def-expand/Acc/4.5, (Acceleration/4.5m-per-s^2, Red))" - ], - "passes": [ - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/Make-me, (Acceleration/Make-me, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m, Red))", - "square": "(Def-expand/Acc/4.5, (Acceleration/4.5m-per-s^2, Red))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/Make-me, (Acceleration/Make-me, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m, Red))" - ], - [ - 6.3, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5m-per-s^2, Red))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/Make-me, (Acceleration/Make-me, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m, Red))", - "square": "(Def-expand/Acc/4.5, (Acceleration/4.5m-per-s^2, Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def-expand/Acc/Make-me, (Acceleration/Make-me, Red))" - ], - [ - 5.5, - 0, - "ball", - "(Def-expand/Acc/4.5, (Acceleration/4.5 m, Red))" - ], - [ - 6.3, - 0, - "square", - "(Def-expand/Acc/4.5, (Acceleration/4.5m-per-s^2, Red))" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def-expand/Acc/5.5, (Acceleration/5.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "ball", - "(Def-expand/Acc/5.5, (Acceleration/5.5 m-per-s^2, Red))" - ], - [ - 6.5, - 0, - "n/a", - "n/a" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [], - "name": "def-expand-invalid-tags-not-in-definition", - "description": "The tags within a Def-expand do not match the corresponding definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/Acc/4.5, (Acceleration/6, Red))", - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Blue))", - "(Def-expand/MyColor, (Label/Cake))" - ], - "passes": [ - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/6, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Blue))", - "square": "(Def-expand/MyColor, (Label/Cake))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/6, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Blue))" - ], - [ - 6.3, - 0, - "(Def-expand/MyColor, (Label/Cake))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/6, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Blue))", - "square": "(Def-expand/MyColor, (Label/Cake))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def-expand/Acc/4.5, (Acceleration/6, Red))" - ], - [ - 5.5, - 0, - "ball", - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Blue))" - ], - [ - 6.3, - 0, - "square", - "(Def-expand/MyColor, (Label/Cake))" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def-expand/Acc/6.5, (Acceleration/6.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "ball", - "(Def-expand/Acc/8.5, (Acceleration/8.5 m-per-s^2, Red))" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [], - "name": "def-expand-missing-inner-group", - "description": "A Def-expand is missing its inner group containing the definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Item, (Label/Pie)))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/Acc/5.4)" - ], - "passes": [ - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Orange", - "ball": "(Def-expand/Acc/4.5)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))", - "ball": "Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.4, - 0, - "(Def-expand/Acc/5.4 )" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "(Def-expand/Acc/4.5)" - ], - [ - 5.4, - 0, - "n/a", - "Green" - ], - [ - 6.4, - 0, - "face", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))", - "ball": "(Acceleration/4.5, Blue), Def/MyColor" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 6.5, - 0, - "ball", - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_EXPAND_INVALID", - "alt_codes": [ - "DEFINITION_INVALID" - ], - "name": "def-expand-has-extras", - "description": "A Def-expand has extra tags or groups.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Item, (Label/Pie)))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), Blue)", - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), (Blue, Green), Black)" - ], - "passes": [ - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), Blue)", - "ball": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), (Blue, Green), Black)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))", - "ball": "Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), Blue)" - ], - [ - 5.4, - 0, - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), (Blue, Green), Black)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), Blue)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Def/Acc, (Def-expand/Acc/4.5)" - ], - [ - 5.4, - 0, - "n/a", - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red), Blue)" - ], - [ - 6.4, - 0, - "face", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))", - "ball": "(Acceleration/4.5 m-per-s^2, Blue), Def/MyColor" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 6.5, - 0, - "ball", - "(Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red))" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_INVALID", - "alt_codes": [], - "name": "def-invalid-name", - "description": "A `Def` tag's name does not correspond to a definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Def/Apple2, Green", - "Def/Acc2/4.5", - "Def/Acc" - ], - "passes": [ - "Def/Acc/4.5" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def/Apple2, Green", - "ball": "Def/Acc2/4.5, Def/Acc/3.2" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Def/Acc/4.5" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Apple2, Green" - ], - [ - 5.5, - 0, - "Def/Acc2/4.5" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Acc/4.5" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def/Apple2, Green", - "ball": "Def/Acc2/4.5, Def/Acc/3.2" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Def/Apple2, Green" - ], - [ - 5.5, - 0, - "face", - "Def/Acc2/4.5" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def/Acc/4.5", - "ball": "Item" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_INVALID", - "alt_codes": [], - "name": "def-invalid-missing-placeholder", - "description": "A `Def` tag is missing an expected placeholder value or has an unexpected placeholder value.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Def/Acc, (Def/Acc/4.5, Red)", - "Def/MyColor/Blue" - ], - "passes": [ - "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def/Acc, (Def/Acc/4.5, Red)", - "ball": "(Def/MyColor/Blue, Green)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Def/Acc/4.5, Red", - "ball": "(Acceleration/4.5 m-per-s^2, Red), Def/MyColor" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Acc, (Def/Acc/4.5, Red)" - ], - [ - 5.4, - 0, - "Def/MyColor/Blue, Green" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def/Acc, (Def/Acc/4.5, Red)", - "ball": "(Def/MyColor/Blue, Green)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Def/Acc, (Def/Acc/4.5, Red)" - ], - [ - 5.4, - 0, - "n/a", - "Def/MyColor/Blue, Green" - ], - [ - 6.4, - 0, - "face", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def/Acc/4.5, Red", - "ball": "(Acceleration/4.5 m-per-s^2, Red), Def/MyColor" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Def/Acc/5.5, (Acceleration/4.5 m-per-s^2, Red)" - ], - [ - 6.5, - 0, - "ball", - "n/a" - ] - ] - } - ] - } - } - }, - { - "error_code": "DEF_INVALID", - "alt_codes": [ - "VALUE_INVALID", - "UNITS_INVALID" - ], - "name": "def-invalid-bad-placeholder-value", - "description": "A `Def` has a placeholder value of incorrect format or units for definition.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Def/Acc/baloney, (Def/Acc/4.5, Red)", - "Def/Acc/3 m", - "Def/Acc/4m-per-s^2", - "Def/MyColor/Redish" - ], - "passes": [ - "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def/Acc/baloney, (Def/Acc/4.5, Red)", - "ball": "Def/Acc/3 m", - "square": "Def/Acc/4m-per-s^2", - "triangle": "Def/MyColor/Redish" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def/Acc/4.5, Red)", - "ball": "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Acc/baloney, (Def/Acc/4.5, Red)" - ], - [ - 5.0, - 0, - "Def/3 m" - ], - [ - 6.3, - 0, - "Def/Acc/4m-per-s^2" - ], - [ - 7.2, - 0, - "Def/MyColor/Redish" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def/Acc/baloney, (Def/Acc/4.5 m-per-s^2, Red)", - "ball": "Def/Acc/3 m", - "square": "Def/Acc/4m-per-s^2", - "triangle": "Def/MyColor/Redish" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Def/Acc/baloney, (Def/Acc/4.5, Red)" - ], - [ - 5.0, - 0, - "face", - "Def/Acc/3 m" - ], - [ - 6.3, - 0, - "n/a", - "Def/Acc/4m-per-s^2" - ], - [ - 7.2, - 0, - "square", - "Def/MyColor/Redish" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/Acc/4.5, Red)", - "ball": "Def/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "ELEMENT_DEPRECATED", - "alt_codes": [], - "name": "tag-deprecated", - "description": "A tag is deprecated", - "warning": true, - "schema": "8.2.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Def/MyColor, Green, Gentalia", - "Gentalia" - ], - "passes": [ - "Torso" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def/MyColor, Green, Gentalia", - "ball": "Green, Blue" - } - }, - "other_code": { - "HED": "Label/#, Gentalia" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Torso" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Gentalia, Green" - ], - [ - 5.5, - 0, - "n/a" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Torso" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Gentalia", - "ball": "Green" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Blue" - ], - [ - 5.5, - 0, - "face", - "Red" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Torso", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "PARENTHESES_MISMATCH", - "alt_codes": [], - "name": "parentheses-mismatch-unmatched-parentheses", - "description": "A HED string does not have the same number of open and closed parentheses.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def/MyColor, (Blue, (Yellow)), Red))", - "((Red, ((Blue, Green), Yellow))", - "((Red, ((Blue), Green)), (Yellow)" - ], - "passes": [ - "(Def/Acc/5.3, (Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def/MyColor, (Blue, (Yellow)), Red))", - "ball": "(Red, ((Blue, Green), Yellow))", - "square": "(Red, ((Blue), Green)), (Yellow)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def/Acc/5.3, (Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, (Blue, (Yellow)), Red))" - ], - [ - 5.5, - 0, - "(Red, ((Blue, Green), Yellow))" - ], - [ - 6.3, - 0, - "(Red, ((Blue), Green)), (Yellow)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/Acc/5.3, (Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Def/Acc/6, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "PARENTHESES_MISMATCH", - "alt_codes": [], - "name": "parentheses-mismatch-incorrect-nesting", - "description": "The open and closed parentheses are not correctly nested in the HED string.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def/MyColor)), (Blue, (Yellow)), (Red)", - ")(Def/MyColor)), (Blue, (Yellow)), (Red))" - ], - "passes": [ - "(Def/Acc/5.3, (Red))", - "(((((Def/Acc/5.3, (Red))))))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def/MyColor)), (Blue, (Yellow)), (Red)", - "ball": ")(Def/MyColor)), (Blue, (Yellow)), (Red))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def/Acc/5.3, (Red))", - "ball": "(((((Def/Acc/5.3, (Red))))))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor)), (Blue, (Yellow)), (Red)" - ], - [ - 5.5, - 0, - ")(Def/MyColor)), (Blue, (Yellow)), (Red))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/Acc/5.3, (Red))" - ], - [ - 5.5, - 0, - "(((((Def/Acc/5.3, (Red))))))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor)), (Blue, (Yellow)), (Red)", - "ball": ")(Def/MyColor)), (Blue, (Yellow)), (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "),Red, (((Def/MyColor)))" - ], - [ - 5.0, - 0, - "ball", - "(Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/Acc/5.3, (Red))", - "ball": "(((((Def/Acc/5.3, (Red))))))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, ((Def/MyColor))" - ] - ] - } - ] - } - } - }, - { - "error_code": "PLACEHOLDER_INVALID", - "alt_codes": [ - "VALUE_INVALID" - ], - "name": "placeholder-invalid-misplaced", - "description": "A `#` appears in a place that it should not (such as in the `HED` column of an event file outside a definition).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Label/#", - "Def/Acc/#" - ], - "passes": [ - "Label/This-label" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Label/#", - "ball": "Def/Acc/#2" - } - } - } - ], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/#" - ], - [ - 5.0, - 0, - "Def/Acc/#" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label/This-label" - ], - [ - 6.0, - 0, - "(Def/Acc/3.5)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/banana", - "ball": "Def/Acc/apple3, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/Acc/#" - ], - [ - 5.0, - 0, - "ball", - "Label/#" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "PLACEHOLDER_INVALID", - "alt_codes": [], - "name": "placeholder-invalid-#-in-categorical-column", - "description": "A JSON sidecar has a placeholder (`#`) in the HED dictionary for a categorical column.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Label/#", - "ball": "Def/Acc/#" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Label/This-label", - "ball": "(Def/Acc/3.5)" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Label/#", - "ball": "Def/Acc/#" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "PLACEHOLDER_INVALID", - "alt_codes": [], - "name": "placeholder-invalid-json-value-column", - "description": "A JSON sidecar does not have exactly one placeholder (`#`) in each HED string representing a value column.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "trial": { - "HED": "Def/Acc/#, Label/#" - }, - "memory": { - "HED": "Blue, Red, Label/#" - } - } - ], - "passes": [ - { - "trial": { - "HED": "Def/Acc/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "trial": { - "HED": "Def/Acc/#, Label/#" - }, - "memory": { - "HED": "Blue, Red, Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "trial", - "memory", - "HED" - ], - [ - 4.5, - 0, - "3", - "4", - "Green, Def/MyColor" - ], - [ - 5.0, - 0, - "2", - "6", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "trial": { - "HED": "Def/Acc/#, Label/Trial" - }, - "memory": { - "HED": "Blue, Red, Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "trial", - "memory", - "HED" - ], - [ - 4.5, - 0, - "5", - "4", - "Green" - ], - [ - 5.0, - 0, - "3", - "2", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "PLACEHOLDER_INVALID", - "alt_codes": [ - "TAG_EXTENSION_INVALID", - "VALID_INVALID" - ], - "name": "placeholder-invalid-json-#-misplaced", - "description": "A placeholder (`#`) is used in JSON sidecar or definition, but its parent in the schema does not have a placeholder child.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "trial": { - "HED": "Sensory-event/#" - }, - "defs": { - "def1": "(Definition/Blech/#, (Red, Blue/#))" - } - } - ], - "passes": [ - { - "trial": { - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "trial": { - "HED": "Sensory-event/#" - }, - "defs": { - "def1": "(Definition/Blech/#, (Red, Blue/#))" - } - }, - "events": [ - [ - "onset", - "duration", - "trial", - "HED" - ], - [ - 4.5, - 0, - "3", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "2", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "trial": { - "HED": "Sensory-event, Label/#" - }, - "defs": { - "def1": "(Definition/Blech/#, (Red, Label/#))" - } - }, - "events": [ - [ - "onset", - "duration", - "trial", - "HED" - ], - [ - 4.5, - 0, - "3", - "Blue" - ], - [ - 5.0, - 0, - "2", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_BRACES_INVALID", - "alt_codes": [ - "CHARACTER_INVALID", - "SIDECAR_INVALID" - ], - "name": "sidecar-braces-contents-invalid", - "description": "The item in curly braces is not the word HED or a column name with HED annotations in the sidecar.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description but no HED" - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_action": { - "Description": "Does not correspond to curly braces" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{HED}, (Def/Acc/3.5)" - } - }, - "response_action": { - "Description": "Does not correspond to curly braces" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED", - "response_time" - ], - [ - 4.5, - 0, - "face", - "Blue", - 0 - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor", - 1 - ], - [ - 5.5, - 0, - "face", - "", - 2 - ], - [ - 5.7, - 0, - "face", - "n/a", - 3 - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_BRACES_INVALID", - "alt_codes": [ - "VALUE_INVALID", - "CHARACTER_INVALID", - "UNITS_INVALID", - "DEF_INVALID" - ], - "name": "sidecar-braces-invalid-spot", - "description": "A curly brace reference must only appear where a tag could.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Label/{response_time})" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [], - "passes": [] - } - } - }, - { - "error_code": "SIDECAR_BRACES_INVALID", - "alt_codes": [], - "name": "sidecar-braces-circular-reference", - "description": "The item in curly braces has a HED annotation that contains curly braces.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), {HED}", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "HED": "Label/#, {event_code}" - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), {HED}", - "ball": "{response_time}, (Def/Acc/3.5)", - "dog": "Orange, {event_type}" - } - }, - "response_time": { - "HED": "Label/#" - }, - "event_type": { - "HED": { - "banana": "Blue, {response_time}", - "apple": "Green" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - }, - "response_count": { - "Description": "A count used to test curly braces in value columns.", - "HED": "(Item-count/#, {response_time})" - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{HED}, (Def/Acc/3.5, {response_action})" - } - }, - "response_action": { - "Description": "Does not correspond to curly braces", - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Parameter-value/#" - } - }, - "events": [ - [ - "onset", - "duration", - "response_time", - "event_code", - "HED" - ], - [ - 4.5, - 0, - 3.4, - "face", - "Blue" - ], - [ - 5.0, - 0, - 6.8, - "ball", - "Green, Def/MyColor" - ], - [ - 5.2, - 0, - "n/a", - "face", - "" - ], - [ - 5.5, - 0, - "any", - "face", - "n/a" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_BRACES_INVALID", - "alt_codes": [], - "name": "sidecar-braces-self-reference", - "description": "The item in curly braces has a HED annotation that contains itself.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), {HED}", - "ball": "{HED}, (Def/Acc/3.5)" - } - }, - "response_time": { - "HED": "Parameter-value/#, {response_time}" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Parameter-value/#" - }, - "response_count": { - "Description": "A count used to test curly braces in value columns.", - "HED": "(Item-count/#, {response_time})" - } - }, - { - "event_code": { - "HED": { - "face": "{HED}", - "ball": "Red" - } - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "{HED}, (Def/Acc/3.5, {response_action})" - } - }, - "response_action": { - "Description": "Does not correspond to curly braces", - "HED": "Parameter-value/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "{HED}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Parameter-value/#, {response_time}" - } - }, - "events": [ - [ - "onset", - "duration", - "response_time", - "event_code", - "HED" - ], - [ - 4.5, - 0, - 3.4, - "face", - "Blue" - ], - [ - 5.0, - 0, - 6.8, - "ball", - "Green, Def/MyColor" - ], - [ - 5.2, - 0, - "n/a", - "face", - "" - ], - [ - 5.5, - 0, - "any", - "face", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Parameter-value/#" - } - }, - "events": [ - [ - "onset", - "duration", - "response_time", - "event_code", - "HED" - ], - [ - 4.5, - 0, - 3.4, - "face", - "Blue" - ], - [ - 5.0, - 0, - 6.8, - "ball", - "Green, Def/MyColor" - ], - [ - 5.2, - 0, - "n/a", - "face", - "" - ], - [ - 5.5, - 0, - "7,3", - "face", - "n/a" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "{HED}", - "ball": "Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "response_time", - "event_code" - ], - [ - 4.5, - 0, - 3.4, - "face" - ], - [ - 5.0, - 0, - 6.8, - "ball" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_BRACES_INVALID", - "alt_codes": [ - "CHARACTER_INVALID", - "VALUE_INVALID", - "UNITS_INVALID" - ], - "name": "sidecar-braces-appear-as-value-rather-than-tag", - "description": "The curly braces are in a value rather than as a separate tag substitute.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "Label/{response_time}, Black" - } - }, - "response_time": { - "Description": "Has description but no HED", - "HED": "Orange" - } - }, - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "Label/{response_time}, Black" - } - }, - "response_time": { - "Description": "Has description but no HED", - "HED": "Label/#" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), ({response_time}, (Green, (Yellow)))", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "Label/{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Orange" - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ], - [ - 5.2, - 0, - "face", - "" - ], - [ - 5.5, - 0, - "face", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow)), ({HED})", - "ball": "{response_time}, (Def/Acc/3.5)" - } - }, - "response_time": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED", - "response_time" - ], - [ - 4.5, - 0, - "face", - "Blue", - 1 - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor", - 1 - ], - [ - 5.2, - 0, - "face", - "", - 1 - ], - [ - 5.5, - 0, - "face", - "n/a", - 1 - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_INVALID", - "alt_codes": [], - "name": "sidecar-invalid-key-at-wrong-level", - "description": "The HED key is not a second-level dictionary key.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "temp": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - } - } - }, - { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset),(Def/Acc/3.5)" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "temp": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - }, - { - "sidecar": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - }, - "events": [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_INVALID", - "alt_codes": [], - "name": "sidecar-invalid-na-annotated", - "description": "An annotation entry is provided for `n/a`.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue),(Green, (Yellow))", - "n/a": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset),(Def/Acc/3.5)" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, Blue),(Green, (Yellow))", - "n/a": "(Def/MyColor, Onset), (Def/Acc/3.5)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "n/a", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_KEY_MISSING", - "alt_codes": [], - "name": "sidecar-key-missing", - "description": "A value in a categorical column does not have an expected entry in a sidecar.", - "warning": true, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Black, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "square", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "SIDECAR_KEY_MISSING", - "alt_codes": [], - "name": "sidecar-refers-to-missing-tsv-hed-column", - "description": "(Warning) A sidecar uses a {HED} column which does not appear in the corresponding tsv file.", - "warning": true, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [ - { - "event_code": { - "HED": { - "face": "{HED}", - "ball": "Red" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "{HED}", - "ball": "Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code" - ], - [ - 4.5, - 0, - "face" - ], - [ - 5.0, - 0, - "ball" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "{HED}", - "ball": "Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Green" - ], - [ - 5.0, - 0, - "ball", - "Black" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EMPTY", - "alt_codes": [], - "name": "tag-empty-extra-commas-or-parentheses", - "description": "A HED string has extra commas or parentheses separated by only white space.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red, , , Green", - "(, Red, Green), Blue", - "(Red, , Green), Blue", - "(Red, Green,), Blue", - "(Red, Green), Blue," - ], - "passes": [ - "(Red, Blue), Green" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "square": "Red, , , Green", - "test": "(, Red, Green), Blue", - "pine": "(Red, , Green), Blue", - "apple": "(Red, Green,), Blue" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red, Blue", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.5, - 0, - "Red, , , Green" - ], - [ - 7.5, - 0, - "(, Red, Green), Blue" - ], - [ - 8.2, - 0, - "(Red, , Green), Blue" - ], - [ - 9.1, - 0, - "(Red, Green,), Blue" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Blue, Green)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "square": "Red, , , Green", - "test": "(, Red, Green), Blue", - "pine": "(Red, , Green), Blue", - "apple": "(Red, Green,), Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "test", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "apple", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red, Green", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EMPTY", - "alt_codes": [], - "name": "tag-empty-begin-end-comma", - "description": "A HED string begins or ends with a comma (ignoring white space).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - ", Blue,Def/Acc/3.2 m-per-s^2", - "(Blue, Green),Yellow,", - ",,(Blue, Green),Yellow," - ], - "passes": [ - "(Red, Blue), Green" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": ", Blue,Def/Acc/3.2", - "ball": "(Blue, Green),Yellow,", - "square": ",,(Blue, Green),Yellow," - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red, Blue", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - ", (Blue, Green),Yellow," - ], - [ - 5.5, - 0, - ",,(Blue, Green),Yellow," - ], - [ - 6.5, - 0, - ", Blue,Def/Acc/3.2" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Blue, Green)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": ", Blue,Def/Acc/3.2", - "ball": "(Blue, Green),Yellow,", - "square": ",,(Blue, Green),Yellow," - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EMPTY", - "alt_codes": [], - "name": "tag-empty-empty-parentheses", - "description": "A tag group is empty (i.e., empty parentheses are not allowed).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Red, (), (Blue), ((Green)))", - "((( ))), Red" - ], - "passes": [ - "(Red, ( Blue ), ((Green)))", - "(((Def/Acc/3.5)))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red, (), (Blue), ((Green)))", - "ball": "((( ))), Red" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, ( Blue ), ((Green)))", - "ball": "(((Def/Acc/3.5)))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, (), (Blue), ((Green)))" - ], - [ - 5.5, - 0, - "((( ))), Red" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, ( Blue ), ((Green)))" - ], - [ - 5.5, - 0, - "(((Def/Acc/3.5)))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, (), (Blue), ((Green)))", - "ball": "((( ))), Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red, ( Blue ), ((Green)))", - "ball": "(((Def/Acc/3.5)))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXPRESSION_REPEATED", - "alt_codes": [], - "name": "tag-expression-repeated-same-level", - "description": "A tag is repeated in the same tag group or level.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red, (Blue), Red, Green", - "(Red, Blue, (Green)), (Red, Blue, (Green))", - "(Red, (Blue, Green, (Yellow)), Red, (Blue, Green, (Yellow)))" - ], - "passes": [ - "Red, (Blue, Red)", - "(Red, Blue, (Green)), (Red, Blue, ((Green)))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Red, (Blue), Red, Green", - "ball": "(Red, Blue, (Green)), (Red, Blue, (Green))", - "square": "(Red, (Blue, Green, (Yellow)), Red, (Blue, Green, (Yellow)))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red, (Blue, Red)", - "ball": "(Red, Blue, (Green)), (Red, Blue, ((Green)))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Blue), Red, Green" - ], - [ - 5.5, - 0, - "(Red, Blue, (Green)), (Red, Blue, (Green))" - ], - [ - 6.5, - 0, - "(Red, (Blue, Green, (Yellow)), Red, (Blue, Green, (Yellow)))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Blue, Red)" - ], - [ - 5.5, - 0, - "(Red, Blue, (Green)), (Red, Blue, ((Green)))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red, (Blue), Red, Green", - "ball": "(Red, Blue, (Green)), (Red, Blue, (Green))", - "square": "(Red, (Blue, Green, (Yellow)), Red, (Blue, Green, (Yellow)))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red, (Blue, Red)", - "ball": "(Red, Blue, (Green)), (Red, Blue, ((Green)))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXPRESSION_REPEATED", - "alt_codes": [], - "name": "tags-duplicated-across-multiple-rows", - "description": "Tags are repeated because two rows have the same onset value.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, Blue, Green)" - ], - [ - 5.5, - 0, - "(Red, Blue, Green)" - ], - [ - 4.5, - 0, - "(Blue, Red, Green)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, Blue, Green)" - ], - [ - 5.5, - 0, - "(Red, Blue, Green)" - ], - [ - 4.5, - 0, - "(Blue, (Red, Green))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Green, ((Blue, Orange, (Black, Purple))), White), Blue, Orange" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "(Red, Blue, Green)" - ], - [ - 5.5, - 0, - "ball", - "(Red, Blue, Green)" - ], - [ - 4.5, - 0, - "n/a", - "(Blue, Red, Green)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Green, ((Blue, Orange, (Black, Purple))), White), Blue, Orange" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "(Red, Blue, Green)" - ], - [ - 5.5, - 0, - "ball", - "(Red, Blue, Green)" - ], - [ - 4.5, - 0, - "n/a", - "(Blue, (Red, Green))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXPRESSION_REPEATED", - "alt_codes": [], - "name": "tags-with-duplicated-onsets-across-multiple-rows", - "description": "Tags are repeated because two rows have the same onset value.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 5.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 4.5, - 0, - "(Def/MyColor, Onset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 5.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 4.5, - 0, - "(Blue, (Red, Green))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Green, ((Blue, Orange, (Black, Purple))), White), Blue, Orange" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "(Onset, Def/MyColor)" - ], - [ - 5.5, - 0, - "ball", - "(Red, Blue, Green)" - ], - [ - 4.5, - 0, - "n/a", - "(Def/MyColor, Onset)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Green, ((Blue, Orange, (Black, Purple))), White), Blue, Orange" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "(Onset, Def/MyColor)" - ], - [ - 5.5, - 0, - "ball", - "(Def/MyColor, Onset)" - ], - [ - 4.5, - 0, - "n/a", - "Red" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXTENDED", - "alt_codes": [], - "name": "tag-extended-extension", - "description": "A tag represents an extension from the schema.", - "warning": true, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Red-color/Red/Big-red, Blue/Nice-blue),(Green, (Yellow))", - "Sensory-presentation/Visual-presentation/Nice-yellow", - "Red-color/Red/Redish", - "Red-color/Red/Redish/More-redish", - "((Green/Greenish))", - "Red/1red", - "Red/Red--2red" - ], - "passes": [ - "Red-color/Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Red-color/Red/Big-red, Blue/Nice-blue),(Green, (Yellow))", - "ball": "Sensory-presentation/Visual-presentation/Nice-yellow", - "square": "((Green/Greenish))", - "triangle": "Red/1red", - "catwalk": "Red/Red--2red" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red-color/Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red-color/Red/Big-red, Blue/Nice-blue),(Green, (Yellow))" - ], - [ - 5.5, - 0, - "Sensory-presentation/Visual-presentation/Nice-yellow" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red-color/Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Red-color/Red/Big-red/Bigger-red, Blue/Nice-blue),(Green, (Yellow))", - "ball": "Sensory-presentation/Visual-presentation/Nice-yellow" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXTENSION_INVALID", - "alt_codes": [], - "name": "tag-extension-invalid-duplicate", - "description": "A tag extension term is already in the schema.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red-color/Red/DarkRed, Sensory-presentation/Red", - "Sensory-presentation/Red/Redish" - ], - "passes": [ - "Red-color/Red/Redish", - "((Green/Greenish))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Red-color/Red/DarkRed, Sensory-presentation/Red", - "ball": "Sensory-presentation/Red/Redish" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red-color/Red/Redish", - "ball": "((Green/Greenish))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red-color/Red/DarkRed, Sensory-presentation/Red" - ], - [ - 5.5, - 0, - "Sensory-presentation/Red/Redish" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red-color/Red" - ], - [ - 5.5, - 0, - "((Green))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red-color/Red/DarkRed, Sensory-presentation/Red", - "ball": "Sensory-presentation/Red/Redish" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red-color/Red", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_EXTENSION_INVALID", - "alt_codes": [ - "CHARACTER_INVALID", - "PLACEHOLDER_INVALID" - ], - "name": "tag-extension-invalid-bad-node-name", - "description": "A tag extension term does not comply with rules for schema nodes.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Red/Red$2", - "Red/R#d" - ], - "passes": [ - "Red-color/Red", - "((Green))", - "Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Red/Red$2", - "ball": "Red/R#d" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Red-color/Red/Redish", - "ball": "Red-color/Red/Redish/More-redish", - "square": "((Green/Greenish))", - "triangle": "Red/1red", - "catwalk": "Red/Red--2red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red/Red$2" - ], - [ - 5.5, - 0, - "Red/R#d" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red-color/Red/Redish" - ], - [ - 5.5, - 0, - "Red-color/Red/Redish/More-redish" - ], - [ - 6.5, - 0, - "((Green/Greenish))" - ], - [ - 7.5, - 0, - "Red/1red" - ], - [ - 8.2, - 0, - "Red/Red--2red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red/Red$2", - "ball": "Red/R#d" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red/Redish-like", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_GROUP_ERROR", - "alt_codes": [ - "TEMPORAL_TAG_ERROR", - "TAG_INVALID", - "DEFINITION_INVALID" - ], - "name": "tag-group-error-missing", - "description": "A tag has tagGroup or topLevelTagGroup attribute, but is not enclosed in parentheses.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Definition/Blech, (Red)", - "Def-expand/Acc/4.5 m-per-s^2, (Acceleration/4.5, Red)", - "Onset", - "Duration/3.0 s", - "Delay/3.0 s" - ], - "passes": [ - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "((Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset)", - "(Duration/3.0 s, (Event))", - "(Duration/3.0 s, Delay/2.0 s, (Event))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))", - "ball": "((Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)" - ], - [ - 5.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red))" - ], - [ - 5.5, - 0, - "((Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)", - "ball": "(Def-expand/Acc/4.5, (Acceleration/4.5 m-per-s^2, Red)), Onset" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_GROUP_ERROR", - "alt_codes": [ - "TEMPORAL_TAG_ERROR" - ], - "name": "tag-group-error-not-top-level", - "description": "A tag with the topLevelTagGroup does not appear at a HED tag group at the top level in an assembled HED annotation.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor, ((Duration/5 s, (Red)))" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor, (Duration/5 s, (Red))" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/banana", - "ball": "((Def/Acc/3.0, Onset))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "(Def/Acc/3.0, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_GROUP_ERROR", - "alt_codes": [ - "TEMPORAL_TAG_ERROR" - ], - "name": "tag-group-error-deferred-in-splice", - "description": "A tag with the topLevelTagGroup does not appear at a HED tag group at the top level in an assembled HED annotation.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "duration": { - "HED": "Duration/#, (Red, Blue)" - }, - "event_code": { - "HED": { - "face": "(Red, Blue)", - "ball": "Black" - } - }, - "ball_type": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - { - "duration": { - "HED": "Duration/#, (Red, Blue)" - }, - "event_code": { - "HED": { - "face": "(Red, Blue)", - "ball": "{ball_type}, Black" - } - }, - "ball_type": { - "Description": "Has description with HED", - "HED": "Label/#" - } - } - ], - "passes": [ - { - "duration": { - "HED": "Parameter-value/#" - }, - "event_code": { - "HED": { - "face": "({duration}, ((Red, Blue), {ball_type}))", - "ball": "{ball_type}, Black" - } - }, - "ball_type": { - "Description": "Has description with HED", - "HED": "Label/#" - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor, ((Duration/5 s, (Red)))" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor, (Duration/5 s, (Red))" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "duration": { - "HED": "Duration/#, (Red, Blue)" - }, - "event_code": { - "HED": { - "face": "{duration}, ((Red, Blue), {ball_type})", - "ball": "{ball_type}, Black" - } - }, - "ball_type": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "duration": { - "HED": "Duration/#" - }, - "event_code": { - "HED": { - "face": "({duration}, ((Red, Blue), {ball_type}))", - "ball": "{ball_type}, Black" - } - }, - "ball_type": { - "Description": "Has description with HED", - "HED": "Label/#" - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_GROUP_ERROR", - "alt_codes": [ - "TEMPORAL_TAG_ERROR" - ], - "name": "multiple-top-level-tags-in-same-group", - "description": "Multiple tags with the topLevelTagGroup attribute appear in the same top-level tag group. (Delay and Duration are allowed to be in the same topLevelTagGroup).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def/MyColor, Onset, Event-context)", - "(Event-context, Red, Offset)", - "(Event-context, Duration/3.0 s, Offset)", - "(Delay/3.0 s, Duration/2.0 s, Offset)" - ], - "passes": [ - "(Def/MyColor, Onset)", - "((Event), Duration/3.0 s, Delay/2.0 s)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Acceleration/banana", - "ball": "(Def/Acc/3.0, Onset, Event-context)" - } - } - }, - { - "event_code": { - "HED": { - "face": "Acceleration/5.0", - "ball": "Red" - } - }, - "val_col": { - "HED": "Time-interval/# s, (Duration/5.0 s, ({event_code}), Duration/6.0)" - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Acceleration/5.0)", - "ball": "(Delay/5.0 s, (Acceleration/5.0))" - } - }, - "val_col": { - "HED": "Time-interval/# s, (Duration/5.0 s, (Red)), {event_code}" - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Event-context, Def/MyColor, Onset)" - ], - [ - 5.0, - 0, - "Green" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Red, (Event-context, (Def/MyColor))" - ], - [ - 5.0, - 0, - "Green" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/banana", - "ball": "(Def/Acc/3.0, Onset, Event-context)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, (Def/MyColor, Event-context, Event-context)" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "(Def/Acc/3.02, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue, (Event-context, (Label/Red))" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_INVALID", - "alt_codes": [ - "PLACEHOLDER_INVALID" - ], - "name": "tag-invalid-in-schema", - "description": "The tag is not valid in the schema it is associated with.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Label #", - "ReallyInvalid/Extension", - "ReallyInvalid" - ], - "passes": [ - "Brown-color/Brown" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Label #", - "ball": "ReallyInvalid/Extension", - "square": "ReallyInvalid" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Brown-color/Brown" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Label #" - ], - [ - 5.5, - 0, - "Property/Sensory-event" - ], - [ - 5.5, - 0, - "Sensory-event/Baloney" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Brown-color/Brown" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "ReallyInvalid", - "ball": "Property/Sensory-event", - "square": "Sensory-event/Baloney" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue/Apples" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_INVALID", - "alt_codes": [], - "name": "tag-has-extra-white space", - "description": "A HED tag has extra internal whitespace, including directly before or after slashes.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Sensory- event,Green", - "Sensory -event,Blue", - "Event /Sensory-event, Black", - "Event/ Sensory-event,White" - ], - "passes": [ - "Sensory-event, Green" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "square": "Sensory- event,Green", - "test": "Sensory -event,Blue", - "pine": "Event /Sensory-event, Black", - "apple": "Event/ Sensory-event,White" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Sensory-event, Green", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.5, - 0, - "Sensory- event,Green" - ], - [ - 7.5, - 0, - "Sensory -event,Blue" - ], - [ - 8.2, - 0, - "Event /Sensory-event, Black" - ], - [ - 9.1, - 0, - "Event/ Sensory-event,White" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Sensory-event, Green" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "square": "Sensory- event,Green", - "test": "Sensory -event,Blue", - "pine": "Event /Sensory-event, Black", - "apple": "Event/ Sensory-event,White" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "test", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "apple", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": " Red, Green", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_INVALID", - "alt_codes": [], - "name": "tag-has-leading-trailing-or-consecutive-slashes", - "description": "A HED tag has leading, trailing or consecutive slashes.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "/Event", - "Red/", - "Event//Sensory-event", - "//Event", - "Body-part/Head-part//Brain", - "Def/Acc/4.5//", - "Def/Acc/4.5/", - "/ /Def/Acc/4.5 ms/" - ], - "passes": [ - "Body-part/Head-part/Brain", - "Label/Red, Informational-property/Label/Blue" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Event//Sensory-event", - "ball": "/Event", - "square": "Red/", - "test": "/ /Def/Acc/4.5/" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Body-part/Head-part/Brain", - "ball": "Def/Acc/4.5, Def/Acc/3.2" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "/Event," - ], - [ - 5.5, - 0, - "Body-part/Head-part//Brain" - ], - [ - 6.5, - 0, - "Event/Sensory-event/" - ], - [ - 7.2, - 0, - "/ /Def/Acc/4.5/" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Event/Sensory-event" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Event//Sensory-event", - "ball": "//Event", - "square": "Body-part/Head-part//Brain", - "test": "/ /Def/Acc/4.5" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red/, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ], - [ - 7.2, - 0, - "n/a", - "/ /Def/Acc/4.5" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Event/Sensory-event" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_NAMESPACE_PREFIX_INVALID", - "alt_codes": [], - "name": "tag-namespace_prefix-invalid-characters", - "description": "A tag prefix has invalid characters.", - "warning": false, - "schema": [ - "8.3.0", - "sc:score_1.0.0" - ], - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "sc2:Sleep-modulator, Red", - "sca:Sleep-modulator, Red" - ], - "passes": [ - "Blue", - "sc:Sleep-modulator, Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "sc1:Sleep-modulator, Red", - "ball": "(Def/MyColor, Onset)(Def/Acc/3.5)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Red, Blue), (Green, (Yellow))", - "ball": "(Def/MyColor, Onset),(Def/Acc/3.5)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "sc1:Sleep-modulator, Red" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Red, Blue), (Green, (Yellow))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "sc1:Sleep-modulator, Red", - "ball": "(Def/MyColor, Onset)(Def/Acc/3.5)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2, sc:Sleep-modulator", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_NAMESPACE_PREFIX_INVALID", - "alt_codes": [], - "name": "tag-namespace_prefix-with-colon-values", - "description": "A tag prefix has invalid characters.", - "warning": false, - "schema": [ - "ts:8.3.0" - ], - "definitions": [ - "(ts:Definition/Acc/#, (ts:Acceleration/# m-per-s^2, ts:Red))", - "(ts:Definition/MyColor, (ts:Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Creation-date/2009-04-09T12:04:14" - ], - "passes": [ - "ts:Creation-date/2009-04-09T12:04:14" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Creation-date/2009-04-09T12:04:14", - "ball": "Red" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "ts:Creation-date/2009-04-09T12:04:14", - "ball": "ts:Blue" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Creation-date/2009-04-09T12:04:14" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "ts:Creation-date/2009-04-09T12:04:14" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Creation-date/2009-04-09T12:04:14", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Creation-date/2009-04-09T12:04:14" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "ts:Creation-date/2009-04-09T12:04:14", - "ball": "ts:Def/Acc/7, ts:Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "ts:Blue" - ], - [ - 5.0, - 0, - "ball", - "ts:Green, ts:Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_NOT_UNIQUE", - "alt_codes": [], - "name": "tag-not-unique", - "description": "A tag with unique attribute appears more than once in an event-level HED string.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Event-context, (Red, Blue)), (Event-context, (Green, Yellow))" - ], - "passes": [ - "(Event-context, (Red, Blue))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Event-context, (Red, Blue)), (Event-context, (Green, Yellow))" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Event-context, (Red, Blue))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Event-context, (Red, Blue)), (Event-context, (Green, Yellow))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Event-context, (Red, Blue))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Event-context, (Red, Blue)), (Event-context, (Green, Yellow))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Event-context, (Red, Blue))", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "(Event-context, (Red, Blue))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TAG_REQUIRES_CHILD", - "alt_codes": [], - "name": "tag-requires-child-no-child", - "description": "A tag has the requireChild schema attribute but does not have a child.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Blue, Def)", - "Def, Red" - ], - "passes": [ - "(Blue, Def/MyColor, (Red))", - "Label/Redish, Def/MyColor, Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Blue, Def)", - "ball": "Label, Red" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Blue, Def/MyColor, (Red))", - "ball": "Label/Redish, Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Blue, Def)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Blue, Def/MyColor, (Red))" - ], - [ - 5.0, - 0, - "Label/Redish, Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Blue, Def)", - "ball": "Label, Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Label/Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-not-tag-group", - "description": "An Onset or Offset tag does not appear in a tag group.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Onset, Red", - "Offset, Def/Acc/5.4" - ], - "passes": [ - "(Onset, Def/Acc/5.4)" - ] - }, - "sidecar_tests": { - "fails": [], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/Acc/5.4)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Onset, Red" - ], - [ - 5.0, - 0, - "Onset, Def/MyColor" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, (Def-expand/MyColor, (Label/Pie)), (Red))" - ], - [ - 5.5, - 0, - "(Onset, Def/Acc/5.4)" - ], - [ - 6.3, - 0, - "(Offset, Def/Acc/5.4)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Onset, Red", - "ball": "(Onset, Def/Acc/5.4)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Onset, Def/MyColor" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/Acc/5.4)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.5, - 0, - "n/a", - "(Onset, Def/Acc/5.4)" - ], - [ - 6.3, - 0, - "n/a", - "(Offset, Def/Acc/5.4)" - ], - [ - 8.5, - 0, - "face", - "Blue" - ], - [ - 9.0, - 0, - "n/a", - "Green, ((Def-expand/MyColor, (Label/Pie)), Onset)" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-nested-group", - "description": "An Onset or Offset tag appears in a nested tag group (not a top-level tag group).", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "((Onset, Def/MyColor), Red)" - ], - "passes": [ - "(Onset, Def/MyColor), Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "((Onset, Def/MyColor), Red)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor), Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "((Onset, Def/MyColor), Red)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor), Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "((Onset, Def/MyColor), Red)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "n/a", - "((Onset, Def/MyColor), Red)" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor), Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "n/a", - "(Onset, Def/MyColor), Red" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-wrong-number-of-defs", - "description": "An Onset or Offset tag is not grouped with exactly one Def-expand tag group or a Def tag.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Onset, (Red))" - ], - "passes": [ - "(Onset, Def/MyColor, (Red))", - "(Onset, (Def-expand/MyColor, (Label/Pie)), (Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Onset, (Red))", - "ball": "(Onset, Def/MyColor, Def/Acc/4.3)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor, (Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, (Red))" - ], - [ - 5.5, - 0, - "(Onset, Def/MyColor, Def/Acc/4.32)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor, (Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, (Red))", - "ball": "(Onset, Def/MyColor, Def/Acc/4.3)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Green, Def/MyColor" - ], - [ - 5.0, - 0, - "n/a", - "(Onset, (Yellow))" - ], - [ - 6.0, - 0, - "ball", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "n/a", - "(Onset, Def/MyColor, (Blue))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-onset-has-more-groups", - "description": "An Onset group has more than one additional tag group.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Onset, Def/MyColor, (Red), (Blue))", - "((Def-expand/MyColor, (Label/Pie)), (Green), (Red), Onset)" - ], - "passes": [ - "(Onset, Def/MyColor)", - "((Def-expand/MyColor, (Label/Pie)), (Red), Onset)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor, (Red), (Blue))", - "ball": "((Def-expand/MyColor, (Label/Pie)), (Green), (Yellow), Onset)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor, (Red), (Blue))" - ], - [ - 5.5, - 0, - "((Def-expand/MyColor, (Label/Pie)), (Green), ((Yellow)), Onset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 5.0, - 0, - "((Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "((Def-expand/MyColor, (Label/Pie)), (Green), ((Yellow)), Onset)", - "ball": "(Onset, Def/MyColor, (Red), (Blue))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ], - [ - 6.0, - 0, - "n/a", - "(Def/MyColor, (Red), (Blue), Onset)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "n/a", - "((Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-offset-has-groups", - "description": "An Offset appears with one or more tags or additional tag groups.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Offset, Def/MyColor, (Red))", - "circle": "((Def-expand/MyColor, (Label/Pie)), Offset, Blue)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Offset, Def/MyColor)", - "circle": "((Def-expand/MyColor, (Label/Pie)), Offset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 4.8, - 0, - "(Offset, Def/MyColor, (Red))" - ], - [ - 4.9, - 0, - "(Onset, Def/MyColor, (Red))" - ], - [ - 5.5, - 0, - "((Def-expand/MyColor, (Label/Pie)), (Green), Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Onset, Def/MyColor)" - ], - [ - 4.8, - 0, - "(Offset, Def/MyColor)" - ], - [ - 4.9, - 0, - "(Onset, Def/MyColor, (Red))" - ], - [ - 5.5, - 0, - "((Def-expand/MyColor, (Label/Pie)), Offset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Offset, Def/MyColor, (Red))", - "circle": "((Def-expand/MyColor, (Label/Pie)), Offset, Blue)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 4.8, - 0, - "square", - "n/a" - ], - [ - 4.9, - 0, - "ball", - "Green" - ], - [ - 5.5, - 0, - "((Def-expand/MyColor, (Label/Pie)), Offset, Blue)", - "Orange" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Onset, Def/MyColor)", - "ball": "((Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Offset, Def/MyColor)", - "circle": "((Def-expand/MyColor, (Label/Pie)), Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 4.8, - 0, - "square", - "n/a" - ], - [ - 4.9, - 0, - "ball", - "Green" - ], - [ - 5.5, - 0, - "circle", - "Orange" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [], - "name": "temporal-tag-error-offset-with-no-onset", - "description": "An Offset tag associated with a given definition appears after a previous Offset tag without the appearance of an intervening Onset of the same name.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red, (Def/MyColor, Offset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, Onset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Red, Blue" - ], - [ - 4.8, - 0, - "ball", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-extra tags", - "description": "An Onset tag group with has tags besides the anchor Def or Def-expand that are not in a tag group.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Def/MyColor, Blue, Green, Onset)" - ], - "passes": [ - "(Def/MyColor, (Blue), Onset)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Def/MyColor, Blue, Green, Onset)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Def/MyColor, (Blue), Onset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, Blue, (Green), Onset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, (Blue), Onset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Blue, Green, Onset)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "((Blue, Green), Def/MyColor, Onset)", - "ball": "(Def/Acc/7, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [], - "name": "temporal-tag-error-duplicated-onset-or-offset", - "description": "An Onset or an Offset with a given Def or Def-expand anchor appears in the same event marker with another Onset or Offset that uses the same anchor.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, (Green), Onset)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def/MyColor, (Blue), Onset)" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, (Green), Onset)", - "ball": "(Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def/MyColor, Offset)" - ], - [ - 5.0, - 0, - "ball", - "(Def/MyColor, Offset)" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, (Green), Onset)", - "ball": "(Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Def/MyColor, Offset)" - ], - [ - 5.0, - 0, - "ball", - "(Def/MyColor, Offset)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "((Blue, Green), Def/MyColor, Onset)", - "ball": "(Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [], - "name": "temporal-tag-error-inset-outside-its-event", - "description": "An Inset tag is not grouped with a Def or Def-expand of an ongoing Onset.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Inset, (Red))" - ], - [ - 6.5, - 0, - "Red, (Def/MyColor, Offset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, Onset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "snack", - "Red, Blue" - ], - [ - 4.8, - 0, - "face", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 4.8, - 0, - "snack", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-inset-group-has-extras", - "description": "An Inset group has tags or groups in addition to its defining Def or Def-expand.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 2.5, - 0, - "Red, (Def/MyColor, Onset)" - ], - [ - 4.5, - 0, - "(Def/MyColor, Blue, Inset)" - ], - [ - 6.5, - 0, - "Red, (Def/MyColor, Onset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Def/MyColor, (Blue), Onset)" - ], - [ - 4.8, - 0, - "(Def/MyColor, (Green), Inset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "snack", - "Red, Blue" - ], - [ - 4.8, - 0, - "face", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 4.7, - 0, - "face", - "Blue" - ], - [ - 4.8, - 0, - "snack", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-duration-group", - "description": "A Duration or Delay has extra tags or groups.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Duration/3.0 s, Delay/2.0 s, (Green), (Blue))", - "(Duration/3.0 s, (Green), (Blue))", - "(Delay/3.0 s, (Green), (Blue))" - ], - "passes": [ - "(Duration/3.0 s, Delay/2.0 s, (Blue))", - "(Duration/3.0 s, (Blue))", - "(Delay/3.0 s, (Blue))" - ] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.0, - 0, - "(Duration/3.0 s, Delay/2.0 s)" - ], - [ - 5.5, - 0, - "(Duration/3.0 s, Delay/2.0 s, Event)" - ], - [ - 6.0, - 0, - "(Duration/3.0 s, Delay/2.0 s, (Green), (Blue))" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "((Blue), Duration/3.0 s)" - ], - [ - 4.8, - 0, - "((Green), Delay/2.0 s)" - ], - [ - 5.0, - 0, - "((Green), Duration/3.0 s, Delay/2.0 s)" - ] - ] - ] - }, - "combo_tests": { - "fails": [], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Duration/3.0 s, (Event))", - "ball": "(Delay/3.0 s, (Event))", - "snack": "(Duration/3.0 s, Delay/2.0 s, (Event))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 4.7, - 0, - "face", - "Blue" - ], - [ - 4.8, - 0, - "snack", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-tag-appears-where-not-allowed", - "description": "A temporal tag appears appears in a tsv with no onset column", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "duration", - "HED" - ], - [ - 0, - "(Duration/5 s, (Red))" - ], - [ - 0, - "Red, (Def/MyColor, Onset)" - ], - [ - 0, - "(Def/MyColor, Yellow, Inset)" - ], - [ - 0, - "Red, (Def/MyColor, Onset)" - ], - [ - 0, - "(Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "duration", - "HED" - ], - [ - 0, - "(Def/MyColor, (Blue))" - ], - [ - 0, - "(Def/MyColor, (Green))" - ], - [ - 0, - "(Def/MyColor)" - ], - [ - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "n/a", - "(Duration/5.0, (Red))" - ], - [ - "face", - "Def/MyColor, Red, Blue" - ], - [ - "ball", - "Def/MyColor, Red, Blue" - ], - [ - "snack", - "Green" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Duration/5.0, (Red))", - "ball": "(Delay/4.0, (Green))" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "face", - "Def/MyColor, Red, Blue" - ], - [ - "ball", - "Def/MyColor, Red, Blue" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor)", - "ball": "(Def/MyColor)", - "snack": "(Def/MyColor)" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "face", - "Blue" - ], - [ - "face", - "Blue" - ], - [ - "snack", - "Blue" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "na-in-onset column", - "description": "n/a is in the onset column.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "Black, White" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.0, - 0, - "face", - "Def/MyColor, Red, Blue" - ], - [ - "n/a", - 0, - "ball", - "(Onset, Def/MyColor, (Red))" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "Orange", - "ball": "(Delay/4.0, (Green))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.0, - 0, - "face", - "Def/MyColor, Red, Blue" - ], - [ - "n/a", - 0, - "ball", - "Item" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "(Black, White)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.0, - "face", - "Red, Blue" - ], - [ - "n/a", - 0, - "ball", - "(Duration/5.0, (Red))" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5", - "ball": "(Black, White)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.0, - 0, - "face", - "Red, Blue" - ], - [ - "n/a", - 0, - "ball", - "(Duration/5.0, (Red))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-not-tag-group-delay", - "description": "A Delay is not in the tag group.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Delay/5, Red)", - "(Delay/5, Def/Acc/5.4)", - "(Delay/5, (Def-expand/Acc/5.4, (Acceleration/5.4 m-per-s^2, Red)))" - ], - "passes": [ - "(Delay/5 s, (Def/Acc/5.4))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Blue, Red", - "ball": "(Delay/5.0 s, Def/Acc/5.4)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, (Def/Acc/5.4))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.0, - 0, - "Delay/1.0 s, Red" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Delay/1.0 s, (Red)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, (Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Red", - "ball": "Delay/5.0 s, Def/Acc/5.4" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Red" - ], - [ - 4.8, - 0, - "n/a", - "Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, (Def/Acc/5.4))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 8.5, - 0, - "face", - "Blue" - ], - [ - 9.0, - 0, - "n/a", - "Green, (Delay/5.0 s, (Def/MyColor))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-nested-group-delay", - "description": "A delay appears in a group not in the top level.", - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "((Delay/5.0 s, Delay/7.0 s, (Def/MyColor)), Red)" - ], - "passes": [ - "(Onset, Delay/6 s, Def/MyColor), Red" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "((Delay/5.0 s, Onset, Def/MyColor), Red)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor), Red" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "((Delay/5.0 s, Onset, Def/MyColor), Red)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor), Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "((Delay/5.0 s, Onset, Def/MyColor), Red)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "n/a", - "((Delay/5.0 s, Onset, Def/MyColor), Red)" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor), Red" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "n/a", - "(Delay/5.0 s, Onset, Def/MyColor), Red" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-wrong-number-of-defs-delay", - "description": "An Onset or Offset tag is not grouped with exactly one Def-expand tag group or a Def tag.", - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Delay/5.0 s, Onset, (Red))" - ], - "passes": [ - "(Delay/5.0 s, Onset, Def/MyColor, (Red))", - "(Delay/5.0 s, Onset, (Def-expand/MyColor, (Label/Pie)), (Red))" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, (Red))", - "ball": "(Delay/5.0 s, Onset, Def/MyColor, Def/Acc/4.3)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor, (Red))" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, (Red))" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor, Def/Acc/4.3)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor, (Red))" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, (Red))", - "ball": "(Delay/5.0 s, Onset, Def/MyColor, Def/Acc/4.3)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Green, Def/MyColor" - ], - [ - 5.0, - 0, - "n/a", - "(Delay/5.0 s, Onset, (Yellow))" - ], - [ - 6.0, - 0, - "ball", - "n/a" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor, (Red))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "n/a", - "(Delay/5.0 s, Onset, Def/MyColor, (Blue))" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-onset-has-more-groups-delay", - "description": "An Onset group has more than one additional tag group.", - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Delay/5.0 s, Onset, Def/MyColor, (Red), (Blue))", - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green), (Red), Onset)" - ], - "passes": [ - "(Delay/5.0 s, Onset, Def/MyColor)", - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Red), Onset)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor, (Red), (Blue))" - } - } - }, - { - "event_code": { - "HED": { - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green), (Yellow), Onset)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor, (Red), (Blue))" - ] - ], - [ - [ - "onset", - "duration", - "HED" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green), ((Yellow)), Onset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor)" - ], - [ - 5.0, - 0, - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green), ((Yellow)), Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Delay/5.0 s, Onset, Def/MyColor, (Red), (Blue))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "ball": "(Delay/5.0 s, Onset, Def/MyColor, (Blue))" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 6.0, - 0, - "n/a", - "(Delay/5.0 s, Def/MyColor, (Red), (Blue), Onset)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "n/a", - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green, (Yellow)), Onset)" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-offset-has-groups-delay", - "description": "An Offset appears with one or more tags or additional tag groups.", - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Delay/5.0 s, Offset, Def/MyColor, (Red))" - } - } - }, - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "circle": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset, Blue)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Delay/5.0 s, Offset, Def/MyColor)", - "circle": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor)" - ], - [ - 4.8, - 0, - "(Delay/5.0 s, Offset, Def/MyColor, (Red))" - ], - [ - 4.9, - 0, - "(Delay/5.0 s, Onset, Def/MyColor, (Red))" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), (Green), Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Onset, Def/MyColor)" - ], - [ - 4.8, - 0, - "(Delay/5.0 s, Offset, Def/MyColor)" - ], - [ - 4.9, - 0, - "(Delay/5.0 s, Onset, Def/MyColor, (Red))" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Delay/5.0 s, Offset, Def/MyColor)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 4.8, - 0, - "square", - "n/a" - ], - [ - 4.9, - 0, - "ball", - "Green" - ], - [ - 5.5, - 0, - "n/a", - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset, Blue), Orange" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Delay/5.0 s, Offset, Def/MyColor, (Red))", - "circle": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset, Blue)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 4.8, - 0, - "square", - "n/a" - ], - [ - 4.9, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Onset, Def/MyColor)", - "ball": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Onset)", - "square": "(Delay/5.0 s, Offset, Def/MyColor)", - "circle": "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "n/a" - ], - [ - 4.8, - 0, - "square", - "n/a" - ], - [ - 4.9, - 0, - "ball", - "Green" - ], - [ - 10.0, - 0, - "n/a", - "(Delay/5.0 s, (Def-expand/MyColor, (Label/Pie)), Offset)" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-mismatch-delay", - "description": "An Offset tag associated with a given definition appears after a previous Offset tag without the appearance of an intervening Onset of the same name.", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red, (Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 5.5, - 0, - "(Def/MyColor, Onset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Red, Blue" - ], - [ - 4.8, - 0, - "ball", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Blue" - ], - [ - 5.0, - 0, - "face", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-extra tags-delay", - "description": "An Onset tag group with has tags besides the anchor Def or Def-expand that are not in a tag group.", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "(Delay/5.0 s, Def/MyColor, Blue, Green, Onset)" - ], - "passes": [ - "(Delay/5.0 s, Def/MyColor, (Blue), Onset)" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Blue, Green, Onset)" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, (Blue), Onset)" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, Blue, (Green), Onset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, (Blue), Onset)" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Blue, Green, Onset)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, (Blue, Green), Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/Acc/7, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "ball", - "Blue" - ], - [ - 5.0, - 0, - "face", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-duplicated-onset-or-offset-delay", - "description": "An Onset or an Offset with a given Def or Def-expand anchor appears in the same event marker with another Onset or Offset that uses the same anchor.", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, (Green), Onset)", - "ball": "Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Delay/5.0 s, Def/MyColor, (Blue), Onset)" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, (Green), Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 5.0, - 0, - "ball", - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, (Green), Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 5.0, - 0, - "ball", - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, (Blue, Green), Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Onset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-inset-outside-its-event-delay", - "description": "An Inset tag is not grouped with a Def or Def-expand of an ongoing Onset.", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Inset, (Red))" - ], - [ - 6.5, - 0, - "Red, (Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, Onset)" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)", - "snack": "(Delay/5.0 s, Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "snack", - "Red, Blue" - ], - [ - 4.8, - 0, - "face", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/2.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)", - "snack": "(Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 1.5, - 0, - "face", - "Blue" - ], - [ - 4.8, - 0, - "ball", - "Blue" - ], - [ - 5.0, - 0, - "snack", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-inset-group-has-extras-delay", - "description": "An Inset group has tags or groups in addition to its defining Def or Def-expand.", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 2.5, - 0, - "Red, (Delay/5.0 s, Def/MyColor, Onset)" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, Blue, Inset)" - ], - [ - 6.5, - 0, - "Red, (Delay/5.0 s, Def/MyColor, Onset)" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "(Delay/5.0 s, Def/MyColor, (Blue), Onset)" - ], - [ - 4.8, - 0, - "(Delay/5.0 s, Def/MyColor, (Green), Inset)" - ], - [ - 5.5, - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ], - [ - 6.5, - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)", - "snack": "(Delay/5.0 s, Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "snack", - "Red, Blue" - ], - [ - 4.8, - 0, - "face", - "Red, Blue" - ], - [ - 5.0, - 0, - "face", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)", - "snack": "(Delay/5.0 s, Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 4.7, - 0, - "face", - "Blue" - ], - [ - 4.8, - 0, - "snack", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "TEMPORAL_TAG_ERROR", - "alt_codes": [ - "TAG_GROUP_ERROR" - ], - "name": "temporal-tag-error-tag-appears-where-not-allowed-delay", - "description": "An Inset, Offset, or Onset tag appears in a tsv with no onset column", - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [], - "passes": [] - }, - "event_tests": { - "fails": [ - [ - [ - "duration", - "HED" - ], - [ - 0, - "Red, (Delay/5.0 s, Def/MyColor, Onset)" - ], - [ - 0, - "(Delay/5.0 s, Def/MyColor, Yellow, Inset)" - ], - [ - 0, - "Red, (Delay/5.0 s, Def/MyColor, Onset)" - ], - [ - 0, - "(Delay/5.0 s, Def/MyColor, Offset)" - ] - ] - ], - "passes": [ - [ - [ - "duration", - "HED" - ], - [ - 0, - "(Def/MyColor, (Blue))" - ], - [ - 0, - "(Def/MyColor, (Green))" - ], - [ - 0, - "(Def/MyColor)" - ], - [ - 0, - "Red" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Onset)", - "ball": "(Delay/5.0 s, Def/MyColor, Offset)", - "snack": "(Delay/5.0 s, Def/MyColor, Inset)" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "face", - "Def/MyColor, Red, Blue" - ], - [ - "ball", - "Def/MyColor, Red, Blue" - ], - [ - "snack", - "Green" - ] - ] - }, - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Delay/5.0 s, Def/MyColor, Duration)", - "ball": "(Delay/5.0 s, Def/MyColor, Delay/4.2)" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "face", - "Def/MyColor, Red, Blue" - ], - [ - "ball", - "Def/MyColor, Red, Blue" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "(Def/MyColor)", - "ball": "(Def/MyColor)", - "snack": "(Def/MyColor)" - } - } - }, - "events": [ - [ - "event_code", - "HED" - ], - [ - "face", - "Blue" - ], - [ - "face", - "Blue" - ], - [ - "snack", - "Blue" - ] - ] - } - ] - } - } - }, - { - "error_code": "UNITS_INVALID", - "alt_codes": [], - "name": "units-invalid-for-unit-class", - "description": "A tag has a value with units that are invalid or not of the correct unit class for the tag.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Acceleration/3 s", - "Weight/3 ms" - ], - "passes": [ - "Distance/4 km" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Acceleration/3 s", - "ball": "Weight/3 ms" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Distance/4 km", - "ball": "Angle/4 degrees" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Acceleration/3 s" - ], - [ - 5.5, - 0, - "Weight/3 ms" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Distance/4 km" - ], - [ - 5.0, - 0, - "Angle/4 degrees" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/3 s", - "ball": "Weight/3 ms" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "UNITS_INVALID", - "alt_codes": [], - "name": "units-invalid-si-units", - "description": "A unit modifier is applied to units that are not SI units.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Distance/3 kfeet", - "Distance/3 kmeters" - ], - "passes": [ - "Distance/3 kilometres" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Distance/3 kfeet", - "ball": "Distance/3 kmeters" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Distance/3 kilometres" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Distance/3 kfeet" - ], - [ - 5.0, - 0, - "Distance/3 kmeters" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Distance/3 kilometres" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Distance/3 kfeet", - "ball": "Distance/3 kmeters" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "VALUE_INVALID", - "alt_codes": [ - "CHARACTER_INVALID", - "TAG_INVALID" - ], - "name": "value-invalid-#-substitution", - "description": "The value substituted for a placeholder (`#`) is not valid.", - "warning": false, - "schema": "8.3.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [], - "passes": [] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Def/Acc/MyMy", - "ball": "Distance/4mxxx" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Def/Acc/3.4", - "ball": "Distance/4 m" - } - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "response": { - "HED": "Item-count/#" - } - }, - "events": [ - [ - "onset", - "duration", - "response", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - 4, - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "response": { - "HED": "Item-count/#" - } - }, - "events": [ - [ - "onset", - "duration", - "response", - "HED" - ], - [ - 4.5, - 0, - 5, - "Blue" - ], - [ - 5.0, - 0, - 2, - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "VALUE_INVALID", - "alt_codes": [ - "CHARACTER_INVALID" - ], - "name": "value-invalid-incompatible-value-class", - "description": "A tag placeholder value is incompatible with the specified value class.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Statistical-accuracy/1max1" - ], - "passes": [ - "Statistical-accuracy/0.677" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Statistical-accuracy/1max1" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Statistical-accuracy/0.677" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Statistical-accuracy/1max1" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Statistical-accuracy/0.677" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Statistical-accuracy/1max1" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "VALUE_INVALID", - "alt_codes": [ - "CHARACTER_INVALID", - "TAG_INVALID", - "UNITS_INVALID" - ], - "name": "value-invalid-blank-missing-before-units", - "description": "The units are not separated from the value by a single blank.", - "warning": false, - "schema": "8.4.0", - "definitions": [ - "(Definition/Acc/#, (Acceleration/# m-per-s^2, Red))", - "(Definition/MyColor, (Label/Pie))" - ], - "tests": { - "string_tests": { - "fails": [ - "Acceleration/5m-per-s^2" - ], - "passes": [ - "Acceleration/5 m-per-s^2" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "face": "Acceleration/5m-per-s^2" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2" - } - } - } - ] - }, - "event_tests": { - "fails": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Acceleration/5m-per-s^2" - ] - ] - ], - "passes": [ - [ - [ - "onset", - "duration", - "HED" - ], - [ - 4.5, - 0, - "Acceleration/5 m-per-s^2" - ] - ] - ] - }, - "combo_tests": { - "fails": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/banana", - "ball": "Def/Acc/apple3, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Red, Def/MyColor" - ], - [ - 5.0, - 0, - "ball", - "Green" - ] - ] - } - ], - "passes": [ - { - "sidecar": { - "event_code": { - "HED": { - "face": "Acceleration/5 m-per-s^2", - "ball": "Def/Acc/7, Blue" - } - } - }, - "events": [ - [ - "onset", - "duration", - "event_code", - "HED" - ], - [ - 4.5, - 0, - "face", - "Blue" - ], - [ - 5.0, - 0, - "ball", - "Green, Def/MyColor" - ] - ] - } - ] - } - } - }, - { - "error_code": "VALUE_INVALID", - "alt_codes": [ - "UNITS_INVALID" - ], - "name": "invalid-character-numeric-class", - "description": "An invalid character was used in an 8.3.0 or greater style numeric value class.", - "warning": false, - "schema": "8.4.0", - "definitions": [], - "tests": { - "string_tests": { - "fails": [ - "Weight/3.0$ kg", - "Weight/3.0db kg", - "Weight/3.0& kg", - "Weight/abc kg", - "Weight/*3.0 kg", - "Weight/3.0% kg", - "Weight/3.0^ kg", - "Weight/3.0? kg" - ], - "passes": [ - "Weight/3.0e10 kg", - "Weight/3e10 kg", - "Weight/3.0 kg", - "Weight/3000 kg", - "Weight/3e10 kg", - "Weight/3.5e10 kg", - "Weight/2.998e8 g", - "Weight/6.022e23 g", - "Weight/7.0e-10 g", - "Weight/1.6e-35 kg" - ] - }, - "sidecar_tests": { - "fails": [ - { - "event_code": { - "HED": { - "show": "Weight/3.0a" - } - } - } - ], - "passes": [ - { - "event_code": { - "HED": "Weight/# g" - } - } - ] - }, - "event_tests": { - "fails": [], - "passes": [] - }, - "combo_tests": { - "fails": [], - "passes": [] - } - } - } -] \ No newline at end of file diff --git a/spec_tests/jsonTests.spec.js b/spec_tests/jsonTests.spec.js deleted file mode 100644 index 8c2c0266..00000000 --- a/spec_tests/jsonTests.spec.js +++ /dev/null @@ -1,416 +0,0 @@ -import chai from 'chai' -const assert = chai.assert -import { beforeAll, describe, afterAll } from '@jest/globals' - -import { BidsHedIssue } from '../src/bids/types/issues' -import { buildSchemas } from '../src/schema/init' -import { SchemaSpec, SchemasSpec } from '../src/schema/specs' -import { Schemas } from '../src/schema/containers' -import path from 'node:path' -import { BidsSidecar, BidsTsvFile } from '../src/bids' -import { generateIssue, IssueError } from '../src/issues/issues' -import { DefinitionManager } from '../src/parser/definitionManager' -import parseTSV from '../src/bids/tsvParser' -import { shouldRun } from '../tests/testHelpers/testUtilities' -const fs = require('node:fs') - -const skipMap = new Map() -const runAll = true -//const runMap = new Map([['DEF_EXPAND_INVALID', ['def-expand-invalid-missing-placeholder']]]) -//const runMap = new Map([['TAG_GROUP_ERROR', ['tag-group-error-missing']]]) -const runMap = new Map([['TAG_GROUP_ERROR', ['tag-group-error-deferred-in-splice']]]) -//const runOnly = new Set(["eventsPass"]) -const runOnly = new Set() -const skippedErrors = {} -const readFileSync = fs.readFileSync -const test_file_name = 'javascriptTests.json' -// const test_file_name = 'temp6.json' - -function toMatchIssue(receivedError, expectedCode, expectedParams = {}) { - const expectedIssue = generateIssue(expectedCode, expectedParams) - - const passType = receivedError instanceof IssueError - const passMessage = receivedError.message === expectedIssue.message - - if (passType && passMessage) { - return { - pass: true, - message: () => `Expected error not to match IssueError with message "${expectedIssue.message}", but it did.`, - } - } else { - return { - pass: false, - message: () => { - let msg = '' - if (!passType) { - msg += `Expected error to be instance of IssueError but got ${receivedError.constructor.name}\n` - } - if (!passMessage) { - msg += `Expected message:\n "${expectedIssue.message}"\nReceived:\n "${receivedError.message}"` - } - return msg - }, - } - } -} - -function comboListToStrings(items) { - const comboItems = [] - if (items === undefined || items.length === 0) { - return comboItems - } - for (const item of items) { - const nextItem = [JSON.stringify(item.sidecar), tsvToString(item.events)] - comboItems.push(nextItem) - } - return comboItems -} - -function loadTestData() { - const testFile = path.join(__dirname, test_file_name) - return JSON.parse(readFileSync(testFile, 'utf8')) -} - -const testInfo = loadTestData() - -function stringifyList(items) { - const stringItems = [] - if (items === undefined || items.length === 0) { - return stringItems - } - for (const item of items) { - stringItems.push(JSON.stringify(item)) - } - return stringItems -} - -function tsvListToStrings(eventList) { - const eventStrings = [] - if (eventList === undefined || eventList.length === 0) { - return eventStrings - } - for (const item of eventList) { - eventStrings.push(tsvToString(item)) - } - return eventStrings -} - -function tsvToString(events) { - return events.map((row) => row.join('\t')).join('\n') -} - -expect.extend({ - toMatchIssue(receivedError, expectedCode, expectedParams) { - return toMatchIssue(receivedError, expectedCode, expectedParams) - }, -}) - -describe('HED validation using JSON tests', () => { - const schemaMap = new Map([ - ['8.2.0', undefined], - ['8.3.0', undefined], - ['8.4.0', undefined], - ]) - - beforeAll(async () => { - const spec2 = new SchemaSpec('', '8.2.0', '', path.join(__dirname, '../src/data/schemas/HED8.2.0.xml')) - const specs2 = new SchemasSpec().addSchemaSpec(spec2) - - const spec3 = new SchemaSpec('', '8.3.0', '', path.join(__dirname, '../src/data/schemas/HED8.3.0.xml')) - const specs3 = new SchemasSpec().addSchemaSpec(spec3) - - const spec4 = new SchemaSpec('', '8.4.0', '', path.join(__dirname, '../src/data/schemas/HED8.4.0.xml')) - const specs4 = new SchemasSpec().addSchemaSpec(spec4) - - const spec3Lib = new SchemaSpec('ts', '8.4.0', '', path.join(__dirname, '../src/data/schemas/HED8.4.0.xml')) - const specs3Lib = new SchemasSpec().addSchemaSpec(spec3Lib) - - const specScore = new SchemaSpec( - 'sc', - '1.0.0', - 'score', - path.join(__dirname, '../tests/otherTestData/HED_score_1.0.0.xml'), - ) - const specsScore = new SchemasSpec().addSchemaSpec(specScore) - - const [schemas2, schemas3, schemas4, schemas3lib, schemaScore] = await Promise.all([ - buildSchemas(specs2), - buildSchemas(specs3), - buildSchemas(specs4), - buildSchemas(specs3Lib), - buildSchemas(specsScore), - ]) - - schemaMap.set('8.2.0', schemas2) - schemaMap.set('8.3.0', schemas3) - schemaMap.set('8.4.0', schemas4) - schemaMap.set('ts:8.3.0', schemas3lib) - schemaMap.set('sc:score_1.0.0', schemaScore) - }) - - afterAll(() => {}) - - test('should load testInfo and schemas correctly', () => { - expect(testInfo).toBeDefined() - expect(schemaMap).toBeDefined() - const schema2 = schemaMap.get('8.2.0') - expect(schema2).toBeDefined() - const schema3 = schemaMap.get('8.3.0') - expect(schema3).toBeDefined() - const schema4 = schemaMap.get('8.4.0') - expect(schema4).toBeDefined() - const schema3lib = schemaMap.get('ts:8.3.0') - expect(schema3lib).toBeDefined() - const schemaScore = schemaMap.get('sc:score_1.0.0') - expect(schemaScore).toBeDefined() - }) - - describe.each(testInfo)( - '$error_code $name : $description', - ({ error_code, alt_codes, name, schema, definitions, warning, tests }) => { - let hedSchema - let defList - let expectedErrors - let noErrors - - const failedSidecars = stringifyList(tests.sidecar_tests.fails) - const passedSidecars = stringifyList(tests.sidecar_tests.passes) - const failedEvents = tsvListToStrings(tests.event_tests.fails) - const passedEvents = tsvListToStrings(tests.event_tests.passes) - const failedCombos = comboListToStrings(tests.combo_tests.fails) - const passedCombos = comboListToStrings(tests.combo_tests.passes) - - /** - * Separates the error codes and warning codes from the issues - * @param issues - * @returns {[Set,Set warnings.has(element)) - if (expectedErrors.size === 0 && warnings.size === 0) { - warningIntersection = true - } - assert.isTrue( - warningIntersection, - `${header} expected one of warnings[${[...expectedErrors].join(', ')}] but received [${[...warnings].join(', ')}]`, - ) - return - } - let errorIntersection = [...expectedErrors].some((element) => errors.has(element)) - if (expectedErrors.size === 0 && errors.size === 0) { - errorIntersection = true - } - assert.isTrue( - errorIntersection, - `${header} expected one of errors[${[...expectedErrors].join(', ')}] but received [${[...errors].join(', ')}]`, - ) - } - - const comboValidator = function (side, events, expectedErrors) { - const status = expectedErrors.size === 0 ? 'Expect pass' : 'Expect fail' - const header = `\n[${error_code} ${name}](${status})\tCOMBO\t"${side}"\n"${events}"` - let issues - try { - const defManager = new DefinitionManager() - defManager.addDefinitions(defList) - const parsedTsv = parseTSV(events) - assert.instanceOf(parsedTsv, Map, `${events} cannot be parsed`) - const bidsTsv = new BidsTsvFile(`events`, { path: 'combo test tsv' }, parsedTsv, JSON.parse(side), defManager) - issues = bidsTsv.validate(hedSchema) - } catch (e) { - issues = [convertIssue(e)] - } - assertErrors(expectedErrors, issues, header) - } - - const eventsValidator = function (events, expectedErrors) { - const status = expectedErrors.size === 0 ? 'Expect pass' : 'Expect fail' - const header = `\n[${error_code} ${name}](${status})\tEvents:\n"${events}"` - let eventsIssues - try { - const defManager = new DefinitionManager() - defManager.addDefinitions(defList) - const parsedTsv = parseTSV(events) - assert.instanceOf(parsedTsv, Map, `${events} cannot be parsed`) - const bidsTsv = new BidsTsvFile(`events`, { path: 'events test' }, parsedTsv, {}, defManager) - eventsIssues = bidsTsv.validate(hedSchema) - } catch (e) { - eventsIssues = [convertIssue(e)] - } - assertErrors(expectedErrors, eventsIssues, header) - } - - const sideValidator = function (side, expectedErrors) { - const status = expectedErrors.size === 0 ? 'Expect pass' : 'Expect fail' - const header = `\n[${error_code} ${name}](${status})\tSIDECAR "${side}"` - let issues - try { - const defManager = new DefinitionManager() - defManager.addDefinitions(defList) - const bidsSide = new BidsSidecar(`sidecar`, { path: 'sidecar test' }, JSON.parse(side), defManager) - issues = bidsSide.validate(hedSchema) - } catch (e) { - issues = [convertIssue(e)] - } - assertErrors(expectedErrors, issues, header) - } - - const stringValidator = function (str, expectedErrors) { - const status = expectedErrors.size === 0 ? 'Expect pass' : 'Expect fail' - const header = `\n[${error_code} ${name}](${status})\tSTRING: "${str}"` - const hTsv = `onset\tHED\n5.4\t${str}\n` - let stringIssues - try { - const defManager = new DefinitionManager() - defManager.addDefinitions(defList) - const parsedTsv = parseTSV(hTsv) - assert.instanceOf(parsedTsv, Map, `${str} cannot be parsed`) - const bidsTsv = new BidsTsvFile(`string`, { path: 'string test tsv' }, parsedTsv, {}, defManager) - stringIssues = bidsTsv.validate(hedSchema) - } catch (e) { - stringIssues = [convertIssue(e)] - } - assertErrors(expectedErrors, stringIssues, header) - } - - /** - * Convert an Error into an Issue. - * - * @param {Error} issueError A thrown error. - * @returns {Issue} A HED issue. - */ - const convertIssue = function (issueError) { - if (issueError instanceof IssueError) { - return issueError.issue - } else { - return generateIssue('internalError', { message: issueError.message }) - } - } - - const getSchema = function (schemaVersion) { - const parts = schemaVersion.split(':', 2) - const prefix = parts.length === 1 ? '' : parts[0] - const thisSchema = schemaMap.get(schemaVersion).schemas - return [prefix, thisSchema.get(prefix)] - } - - const getSchemas = function (schemaVersion) { - const hedMap = new Map() - if (typeof schemaVersion === 'string') { - const [prefix, schema] = getSchema(schemaVersion) - hedMap.set(prefix, schema) - } else { - for (const version of schemaVersion) { - const [prefix, schema] = getSchema(version) - hedMap.set(prefix, schema) - } - } - return new Schemas(hedMap) - } - - beforeAll(async () => { - hedSchema = getSchemas(schema) - assert(hedSchema !== undefined, 'HED schemas required should be defined') - let defIssues - ;[defList, defIssues] = DefinitionManager.createDefinitions(definitions, hedSchema) - assert.equal(defIssues.length, 0, `${name}: input definitions "${definitions}" have errors "${defIssues}"`) - expectedErrors = new Set(alt_codes) - expectedErrors.add(error_code) - noErrors = new Set() - }) - - afterAll(() => {}) - - // If debugging a single test - if (!shouldRun(error_code, name, runAll, runMap, skipMap)) { - // eslint-disable-next-line no-console - console.log(`----Skipping JSON Spec tests ${error_code} [${name}]}`) - return - } - // Run tests except for the ones explicitly skipped or because they are warnings - if (error_code in skippedErrors) { - test.skip(`Skipping tests ${error_code} [${name}] skipped because ${skippedErrors[error_code]}`, () => {}) - } else if (name in skippedErrors) { - test.skip(`Skipping tests ${error_code} [${name}] skipped because ${skippedErrors[name]}`, () => {}) - } else { - test('it should have HED schema defined', () => { - expect(hedSchema).toBeDefined() - }) - - if (tests.string_tests.passes.length > 0 && (runOnly.size === 0 || runOnly.has('stringPass'))) { - test.each(tests.string_tests.passes)('Valid string: %s', (str) => { - stringValidator(str, new Set()) - }) - } - - if (tests.string_tests.fails.length > 0 && (runOnly.size === 0 || runOnly.has('stringFail'))) { - test.each(tests.string_tests.fails)('Invalid string: %s', (str) => { - stringValidator(str, expectedErrors) - }) - } - - if (passedSidecars.length > 0 && (runOnly.size === 0 || runOnly.has('sidecarPass'))) { - test.each(passedSidecars)(`Valid sidecar: %s`, (side) => { - sideValidator(side, noErrors) - }) - } - - if (failedSidecars.length > 0 && (runOnly.size === 0 || runOnly.has('sidecarFail'))) { - test.each(failedSidecars)(`Invalid sidecar: %s`, (side) => { - sideValidator(side, expectedErrors) - }) - } - - if (passedEvents.length > 0 && (runOnly.size === 0 || runOnly.has('eventsPass'))) { - test.each(passedEvents)(`Valid events: %s`, (events) => { - eventsValidator(events, noErrors) - }) - } - - if (failedEvents.length > 0 && (runOnly.size === 0 || runOnly.has('eventsFail'))) { - test.each(failedEvents)(`Invalid events: %s`, (events) => { - eventsValidator(events, expectedErrors) - }) - } - - if (passedCombos.length > 0 && (runOnly.size === 0 || runOnly.has('combosPass'))) { - test.each(passedCombos)(`Valid combo: [%s] [%s]`, (side, events) => { - comboValidator(side, events, noErrors) - }) - } - - if (failedCombos.length > 0 && (runOnly.size === 0 || runOnly.has('combosFail'))) { - test.each(failedCombos)(`Invalid combo: [%s] [%s]`, (side, events) => { - comboValidator(side, events, expectedErrors) - }) - } - } - }, - ) -}) diff --git a/spec_tests/skippedTests.js b/spec_tests/skippedTests.js new file mode 100644 index 00000000..46e90858 --- /dev/null +++ b/spec_tests/skippedTests.js @@ -0,0 +1,48 @@ +/** + * hed-tests cases that hed-javascript does not pass yet, keyed by test case name. + * + * The runner (hedTests.spec.js) skips a whole case by name and reports the reason in the jest + * summary. Remove an entry once the case passes. Reasons record what was observed when the entry + * was added, not a diagnosis. + * + * Observed 2026-10-07 against hed-tests 183c235. + */ +export const skippedTests = { + // SCHEMA_LOAD_FAILED: merge-group cases that should load, but the partnered schema merger + // rejects any short tag shared between libraries. + 'multiple-libraries-with-same-partner': 'merger rejects shared short tag Shared-item', + 'merge-order-independent-loads': 'merger rejects shared short tag Shared-item', + 'duplicate-schema-in-merge-group': 'merger rejects the same schema listed twice', + 'shared-element-compatible-across-libraries': 'merger rejects shared short tag Shared-item', + 'shared-rooted-hierarchy-different-children': 'merger rejects shared rooted tag', + 'shared-rooted-tag-disjoint-children': 'merger rejects shared rooted tag', + 'shared-hierarchy-diverges-at-grandchild': 'merger rejects shared tag hierarchy', + + // SCHEMA_LOAD_FAILED: loading an unpartnered library XML throws + // "TypeError: propertyDefinitions is not iterable" in the schema parser. + 'namespaced-groups-load-independently': 'unpartnered library XML crashes the schema parser', + 'unpartnered-library-in-shared-namespace': 'unpartnered library XML crashes the schema parser', + 'two-unpartnered-libraries-in-same-namespace': 'unpartnered library XML crashes the schema parser', + + // SCHEMA_LOAD_FAILED: auxiliary sections (unit classes, units, unit modifiers, value classes, + // schema attributes) are not merged and conflicts in them are not detected. + 'aux-new-unit-class-merges-directly': 'merged auxiliary sections not usable after load', + 'aux-new-units-under-shared-class': 'merged auxiliary sections not usable after load', + 'aux-unit-attribute-conflict': 'auxiliary conflict not detected', + 'aux-value-class-conflict': 'auxiliary conflict not detected', + 'aux-schema-attribute-property-conflict': 'auxiliary conflict not detected', + 'aux-schema-attribute-description-conflict': 'auxiliary conflict not detected', + 'aux-unit-modifier-conflict': 'auxiliary conflict not detected', + + // TEMPORAL_TAG_ERROR: non-convertible time units are accepted. + 'temporal-tag-error-delay-not-convertible': 'Delay/3 month accepted', + 'temporal-tag-error-duration-not-convertible': 'Duration/3 year accepted', + + // UNITS_INVALID: compound units and the 8.5.0 anyUnits unit class. + 'units-invalid-compound-units': 'compound unit modifiers not handled', + 'units-invalid-any-units': 'anyUnits unit class and Quantity tag of 8.5.0 not handled', + + // VALUE_INVALID + 'bad-value-in-curly-column': 'value column consumed by a brace reference is not validated', + 'value-invalid-date-time-format': 'date-time values are not checked against the BIDS Datetime format', +}