diff --git a/0.4/examples/valid/custom_type_axes.json b/0.4/examples/image/custom_type_axes.json similarity index 96% rename from 0.4/examples/valid/custom_type_axes.json rename to 0.4/examples/image/custom_type_axes.json index 557be833..88a5a45e 100644 --- a/0.4/examples/valid/custom_type_axes.json +++ b/0.4/examples/image/custom_type_axes.json @@ -30,5 +30,6 @@ ], "version": "0.4" } - ] + ], + "recommended": false } \ No newline at end of file diff --git a/0.4/examples/invalid/duplicate_axes.json b/0.4/examples/image/duplicate_axes.json similarity index 96% rename from 0.4/examples/invalid/duplicate_axes.json rename to 0.4/examples/image/duplicate_axes.json index ede5e00e..00312a05 100644 --- a/0.4/examples/invalid/duplicate_axes.json +++ b/0.4/examples/image/duplicate_axes.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } \ No newline at end of file diff --git a/0.4/examples/invalid_but_dont_fail/duplicate_axes_name.json b/0.4/examples/image/duplicate_axes_name.json similarity index 96% rename from 0.4/examples/invalid_but_dont_fail/duplicate_axes_name.json rename to 0.4/examples/image/duplicate_axes_name.json index a811f9a3..d7b177c9 100644 --- a/0.4/examples/invalid_but_dont_fail/duplicate_axes_name.json +++ b/0.4/examples/image/duplicate_axes_name.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "recommended": false } diff --git a/0.4/examples/invalid/duplicate_scale.json b/0.4/examples/image/duplicate_scale.json similarity index 97% rename from 0.4/examples/invalid/duplicate_scale.json rename to 0.4/examples/image/duplicate_scale.json index f5413ce1..15739781 100644 --- a/0.4/examples/invalid/duplicate_scale.json +++ b/0.4/examples/image/duplicate_scale.json @@ -36,5 +36,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/empty_transformations.json b/0.4/examples/image/empty_transformations.json similarity index 95% rename from 0.4/examples/invalid/empty_transformations.json rename to 0.4/examples/image/empty_transformations.json index 0445961f..0c2f5c45 100644 --- a/0.4/examples/invalid/empty_transformations.json +++ b/0.4/examples/image/empty_transformations.json @@ -21,5 +21,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid_strict/image.json b/0.4/examples/image/image.json similarity index 100% rename from 0.4/examples/valid_strict/image.json rename to 0.4/examples/image/image.json diff --git a/0.4/examples/valid_strict/image_metadata.json b/0.4/examples/image/image_metadata.json similarity index 100% rename from 0.4/examples/valid_strict/image_metadata.json rename to 0.4/examples/image/image_metadata.json diff --git a/0.4/examples/valid_strict/image_omero.json b/0.4/examples/image/image_omero.json similarity index 100% rename from 0.4/examples/valid_strict/image_omero.json rename to 0.4/examples/image/image_omero.json diff --git a/0.4/examples/invalid/invalid_axes_count.json b/0.4/examples/image/invalid_axes_count.json similarity index 96% rename from 0.4/examples/invalid/invalid_axes_count.json rename to 0.4/examples/image/invalid_axes_count.json index 8f14f68b..156add83 100644 --- a/0.4/examples/invalid/invalid_axes_count.json +++ b/0.4/examples/image/invalid_axes_count.json @@ -24,5 +24,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/invalid_axis_type.json b/0.4/examples/image/invalid_axis_type.json similarity index 96% rename from 0.4/examples/invalid/invalid_axis_type.json rename to 0.4/examples/image/invalid_axis_type.json index 33509a6b..8fcff87a 100644 --- a/0.4/examples/invalid/invalid_axis_type.json +++ b/0.4/examples/image/invalid_axis_type.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid/invalid_axis_units.json b/0.4/examples/image/invalid_axis_units.json similarity index 96% rename from 0.4/examples/valid/invalid_axis_units.json rename to 0.4/examples/image/invalid_axis_units.json index 078da224..63aa85f1 100644 --- a/0.4/examples/valid/invalid_axis_units.json +++ b/0.4/examples/image/invalid_axis_units.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "recommended": false } diff --git a/0.4/examples/invalid/invalid_channels_color.json b/0.4/examples/image/invalid_channels_color.json similarity index 97% rename from 0.4/examples/invalid/invalid_channels_color.json rename to 0.4/examples/image/invalid_channels_color.json index 89d02d5c..a2e8031a 100644 --- a/0.4/examples/invalid/invalid_channels_color.json +++ b/0.4/examples/image/invalid_channels_color.json @@ -43,6 +43,7 @@ } } ] - } + }, + "valid": false } diff --git a/0.4/examples/invalid/invalid_channels_window.json b/0.4/examples/image/invalid_channels_window.json similarity index 97% rename from 0.4/examples/invalid/invalid_channels_window.json rename to 0.4/examples/image/invalid_channels_window.json index 0ce38243..a39b6b4e 100644 --- a/0.4/examples/invalid/invalid_channels_window.json +++ b/0.4/examples/image/invalid_channels_window.json @@ -46,5 +46,6 @@ } } ] - } + }, + "valid": false } diff --git a/0.4/examples/invalid/invalid_multiscales_transformations.json b/0.4/examples/image/invalid_multiscales_transformations.json similarity index 97% rename from 0.4/examples/invalid/invalid_multiscales_transformations.json rename to 0.4/examples/image/invalid_multiscales_transformations.json index b93f37e6..ff33b933 100644 --- a/0.4/examples/invalid/invalid_multiscales_transformations.json +++ b/0.4/examples/image/invalid_multiscales_transformations.json @@ -35,5 +35,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } \ No newline at end of file diff --git a/0.4/examples/invalid/invalid_path.json b/0.4/examples/image/invalid_path.json similarity index 96% rename from 0.4/examples/invalid/invalid_path.json rename to 0.4/examples/image/invalid_path.json index ef82f0bb..87f57960 100644 --- a/0.4/examples/invalid/invalid_path.json +++ b/0.4/examples/image/invalid_path.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/invalid_transformation_type.json b/0.4/examples/image/invalid_transformation_type.json similarity index 96% rename from 0.4/examples/invalid/invalid_transformation_type.json rename to 0.4/examples/image/invalid_transformation_type.json index fbd8e497..d9aac281 100644 --- a/0.4/examples/invalid/invalid_transformation_type.json +++ b/0.4/examples/image/invalid_transformation_type.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/invalid_version.json b/0.4/examples/image/invalid_version.json similarity index 96% rename from 0.4/examples/invalid/invalid_version.json rename to 0.4/examples/image/invalid_version.json index cab8991b..3e10b3f6 100644 --- a/0.4/examples/invalid/invalid_version.json +++ b/0.4/examples/image/invalid_version.json @@ -29,5 +29,6 @@ ], "version": "0.3" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid/mismatch_axes_units.json b/0.4/examples/image/mismatch_axes_units.json similarity index 96% rename from 0.4/examples/valid/mismatch_axes_units.json rename to 0.4/examples/image/mismatch_axes_units.json index 3c10c4ff..93234ff5 100644 --- a/0.4/examples/valid/mismatch_axes_units.json +++ b/0.4/examples/image/mismatch_axes_units.json @@ -34,5 +34,6 @@ ], "version": "0.4" } - ] + ], + "recommended": false } diff --git a/0.4/examples/invalid/missing_axes.json b/0.4/examples/image/missing_axes.json similarity index 94% rename from 0.4/examples/invalid/missing_axes.json rename to 0.4/examples/image/missing_axes.json index e3c2da19..63897cfe 100644 --- a/0.4/examples/invalid/missing_axes.json +++ b/0.4/examples/image/missing_axes.json @@ -17,5 +17,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/missing_axes_name.json b/0.4/examples/image/missing_axes_name.json similarity index 96% rename from 0.4/examples/invalid/missing_axes_name.json rename to 0.4/examples/image/missing_axes_name.json index 99ce120f..1407eb5b 100644 --- a/0.4/examples/invalid/missing_axes_name.json +++ b/0.4/examples/image/missing_axes_name.json @@ -27,5 +27,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/missing_datasets.json b/0.4/examples/image/missing_datasets.json similarity index 94% rename from 0.4/examples/invalid/missing_datasets.json rename to 0.4/examples/image/missing_datasets.json index 21b81ba9..fc7c502e 100644 --- a/0.4/examples/invalid/missing_datasets.json +++ b/0.4/examples/image/missing_datasets.json @@ -15,6 +15,7 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid/missing_name.json b/0.4/examples/image/missing_name.json similarity index 97% rename from 0.4/examples/valid/missing_name.json rename to 0.4/examples/image/missing_name.json index f333aaa9..c7234479 100644 --- a/0.4/examples/valid/missing_name.json +++ b/0.4/examples/image/missing_name.json @@ -39,5 +39,6 @@ } ] } - ] + ], + "recommended": false } diff --git a/0.4/examples/invalid/missing_path.json b/0.4/examples/image/missing_path.json similarity index 96% rename from 0.4/examples/invalid/missing_path.json rename to 0.4/examples/image/missing_path.json index 587390fe..206953af 100644 --- a/0.4/examples/invalid/missing_path.json +++ b/0.4/examples/image/missing_path.json @@ -28,5 +28,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/missing_scale.json b/0.4/examples/image/missing_scale.json similarity index 96% rename from 0.4/examples/invalid/missing_scale.json rename to 0.4/examples/image/missing_scale.json index ed863677..73ba02da 100644 --- a/0.4/examples/invalid/missing_scale.json +++ b/0.4/examples/image/missing_scale.json @@ -26,5 +26,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } \ No newline at end of file diff --git a/0.4/examples/invalid/missing_space_axes.json b/0.4/examples/image/missing_space_axes.json similarity index 96% rename from 0.4/examples/invalid/missing_space_axes.json rename to 0.4/examples/image/missing_space_axes.json index 75a84711..9787aff3 100644 --- a/0.4/examples/invalid/missing_space_axes.json +++ b/0.4/examples/image/missing_space_axes.json @@ -27,5 +27,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/missing_transformations.json b/0.4/examples/image/missing_transformations.json similarity index 95% rename from 0.4/examples/invalid/missing_transformations.json rename to 0.4/examples/image/missing_transformations.json index 85fbdc1c..2d42cd24 100644 --- a/0.4/examples/invalid/missing_transformations.json +++ b/0.4/examples/image/missing_transformations.json @@ -20,5 +20,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid/missing_version.json b/0.4/examples/image/missing_version.json similarity index 96% rename from 0.4/examples/valid/missing_version.json rename to 0.4/examples/image/missing_version.json index 0e1e6b7f..5242c8b9 100644 --- a/0.4/examples/valid/missing_version.json +++ b/0.4/examples/image/missing_version.json @@ -27,5 +27,6 @@ } ] } - ] + ], + "recommended": false } diff --git a/0.4/examples/valid_strict/multiscales_example.json b/0.4/examples/image/multiscales_example.json similarity index 100% rename from 0.4/examples/valid_strict/multiscales_example.json rename to 0.4/examples/image/multiscales_example.json diff --git a/0.4/examples/valid_strict/multiscales_transformations.json b/0.4/examples/image/multiscales_transformations.json similarity index 100% rename from 0.4/examples/valid_strict/multiscales_transformations.json rename to 0.4/examples/image/multiscales_transformations.json diff --git a/0.4/examples/invalid/no_axes.json b/0.4/examples/image/no_axes.json similarity index 95% rename from 0.4/examples/invalid/no_axes.json rename to 0.4/examples/image/no_axes.json index 94570af2..eb116f90 100644 --- a/0.4/examples/invalid/no_axes.json +++ b/0.4/examples/image/no_axes.json @@ -18,6 +18,7 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/no_datasets.json b/0.4/examples/image/no_datasets.json similarity index 94% rename from 0.4/examples/invalid/no_datasets.json rename to 0.4/examples/image/no_datasets.json index add3f0eb..853f0729 100644 --- a/0.4/examples/invalid/no_datasets.json +++ b/0.4/examples/image/no_datasets.json @@ -16,5 +16,6 @@ "datasets": [], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/image/no_multiscales.json b/0.4/examples/image/no_multiscales.json new file mode 100644 index 00000000..53f92d76 --- /dev/null +++ b/0.4/examples/image/no_multiscales.json @@ -0,0 +1,5 @@ +{ + "@type": "ngff:Image", + "multiscales": [], + "valid": false +} diff --git a/0.4/examples/invalid/one_space_axes.json b/0.4/examples/image/one_space_axes.json similarity index 97% rename from 0.4/examples/invalid/one_space_axes.json rename to 0.4/examples/image/one_space_axes.json index 9fd96a1f..3f69ac1a 100644 --- a/0.4/examples/invalid/one_space_axes.json +++ b/0.4/examples/image/one_space_axes.json @@ -32,5 +32,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/too_many_axes.json b/0.4/examples/image/too_many_axes.json similarity index 98% rename from 0.4/examples/invalid/too_many_axes.json rename to 0.4/examples/image/too_many_axes.json index 3eba4cfc..7d87ae5d 100644 --- a/0.4/examples/invalid/too_many_axes.json +++ b/0.4/examples/image/too_many_axes.json @@ -47,5 +47,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/invalid/too_many_space_axes.json b/0.4/examples/image/too_many_space_axes.json similarity index 97% rename from 0.4/examples/invalid/too_many_space_axes.json rename to 0.4/examples/image/too_many_space_axes.json index 5d185260..b44746bb 100644 --- a/0.4/examples/invalid/too_many_space_axes.json +++ b/0.4/examples/image/too_many_space_axes.json @@ -37,5 +37,6 @@ ], "version": "0.4" } - ] + ], + "valid": false } diff --git a/0.4/examples/valid/untyped_axes.json b/0.4/examples/image/untyped_axes.json similarity index 96% rename from 0.4/examples/valid/untyped_axes.json rename to 0.4/examples/image/untyped_axes.json index af65e409..dfd02a3f 100644 --- a/0.4/examples/valid/untyped_axes.json +++ b/0.4/examples/image/untyped_axes.json @@ -29,5 +29,6 @@ ], "version": "0.4" } - ] + ], + "recommended": false } \ No newline at end of file diff --git a/0.4/examples/invalid/no_multiscales.json b/0.4/examples/invalid/no_multiscales.json deleted file mode 100644 index d6dbfb33..00000000 --- a/0.4/examples/invalid/no_multiscales.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "@type": "ngff:Image", - "multiscales": [] -} diff --git a/0.4/index.bs b/0.4/index.bs index e531ff07..fb588cc2 100644 --- a/0.4/index.bs +++ b/0.4/index.bs @@ -296,7 +296,7 @@ Each "multiscales" dictionary SHOULD contain the field "type", which gives the t It SHOULD contain the field "metadata", which contains a dictionary with additional information about the downscaling method.
-path: examples/valid_strict/multiscales_example.json
+path: examples/image/multiscales_example.json
 highlight: json
 
diff --git a/0.4/tests/test_validation.py b/0.4/tests/test_validation.py index 3a6a5761..8d0aef7d 100644 --- a/0.4/tests/test_validation.py +++ b/0.4/tests/test_validation.py @@ -17,57 +17,44 @@ } resolver = RefResolver.from_schema(image_schema, store=schema_store) -validator = Draft202012Validator(image_schema, resolver=resolver) -strict_validator = Draft202012Validator(strict_image_schema, resolver=resolver) -valid_strict_files = list(glob.glob("examples/valid_strict/*.json")) -valid_files = list(glob.glob("examples/valid/*.json")) -invalid_files = list(glob.glob("examples/invalid/*.json")) -invalid_but_dont_fail_files = list( - glob.glob("examples/invalid_but_dont_fail/*.json")) +# Dictionary of validators +validators = {} +strict_validators = {} +validators["multiscales"] = Draft202012Validator( + image_schema, resolver=resolver) +strict_validators["multiscales"] = Draft202012Validator( + strict_image_schema, resolver=resolver) + + +json_files = list(glob.glob("examples/**/*.json")) def ids(files): return [str(x).split("/")[-1][0:-5] for x in files] +def get_spec(jsondata): + for s in ["multiscales"]: + if s in jsondata.keys(): + return s + raise Exception("No specification found %s" % jsondata.keys()) + -@pytest.mark.parametrize( - "testfile", valid_strict_files, ids=ids(valid_strict_files)) -def test_valid_strict(testfile): - with open(testfile) as f: +@pytest.mark.parametrize("json_file", json_files, ids=ids(json_files)) +def test_compliance(json_file): + with open(json_file) as f: data = ''.join(line for line in f if not line.lstrip().startswith('//')) jsondata = json.loads(data) - validator.validate(jsondata) - strict_validator.validate(jsondata) - - -@pytest.mark.parametrize("testfile", valid_files, ids=ids(valid_files)) -def test_valid_files(testfile): - with open(testfile) as f: - json_file = json.load(f) - validator.validate(json_file) - with pytest.raises(ValidationError): - strict_validator.validate(json_file) - -@pytest.mark.parametrize("testfile", invalid_files, ids=ids(invalid_files)) -def test_invalid(testfile): - with open(testfile) as f: - json_file = json.load(f) - with pytest.raises(ValidationError): - validator.validate(json_file) + spec = get_spec(jsondata) + if jsondata.get("valid", True): + validators[spec].validate(jsondata) + else: with pytest.raises(ValidationError): - strict_validator.validate(json_file) + validators[spec].validate(jsondata) - -@pytest.mark.xfail -@pytest.mark.parametrize( - "testfile", invalid_but_dont_fail_files, - ids=ids(invalid_but_dont_fail_files)) -def test_invalid_but_dontfail(testfile): - with open(testfile) as f: - json_file = json.load(f) - with pytest.raises(ValidationError): - validator.validate(json_file) + if jsondata.get("recommended", True) and jsondata.get("valid", True): + strict_validators[spec].validate(jsondata) + else: with pytest.raises(ValidationError): - strict_validator.validate(json_file) + strict_validators[spec].validate(jsondata)