Schema tests

Structure:

- context:
    ...
  rule: rules.X.Y.Z
  does: pass
- context:
    ...
  rule: rules.X.Y.Z
  does: notapply
- context:
    ...
  rule: rules.X.Y.Z
  does: fail

Two styles of test: File-based and mock context-based

sidecars, tabular_data, checks, files, errors

- rule: rules.checks.micr.PixelSizeInconsistent
  does: pass # fail, does-not-apply
  files:
    - data_file: bids-examples/micr_SPIM/sub-01/micr/sub-01_sample-A_stain-LFB_chunk-03_SPIM.ome.tif
    - sidecars:
      - bids-examples/micr_SPIM/sub-01/micr/sub-01_sample-A_stain-LFB_chunk-03_SPIM.json
- rule: rules.checks.micr.PixelSizeInconsistent
  does: pass # fail, does-not-apply
  context:
    sidecar:
      PixelSize: [1, 1, 1]
      PixelSizeUnit: "mm"
    ome:
      PhysicalSizeX: 1.0
      PhysicalSizeY: 1.0
      PhysicalSizeZ: 1.0
      PhysicalSizeXUnit: mm
      PhysicalSizeYUnit: mm
      PhysicalSizeZUnit: mm
- rule: rules.files.raw.nirs.nirs
  does: pass
  context:
    path: sub-01/nirs/sub-01_task-rest_nirs.snirf
- rule: rules.files.raw.nirs.nirs
  does: fail
  context:
    path: sub-01/nirs/sub-01_task-rest_eeg.snirf
- rule: rules.files.raw.nirs.nirs
  passes:
    - context: {path: ...}
    - context: {path: ...}
  fails:
    - context: {path: ...}
    - context: {path: ...}
  doesnotapply:
    - context: {path: ...}
    - context: {path: ...}
- rule: rules.sidecars.anat.TaskMetadata
  does: pass
  files:
    - data: ...
    - sidecars: [...]