test_validator.py
73 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
Jessica B. Hamrick
|
r16431 | """ | ||
Contains tests class for validator.py | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2014 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
from .base import TestsBase | ||||
Jessica B. Hamrick
|
r16965 | from jsonschema import SchemaError | ||
Jessica B. Hamrick
|
r16431 | from ..current import read | ||
from ..validator import schema_path, isvalid, validate, resolve_ref | ||||
#----------------------------------------------------------------------------- | ||||
# Classes and functions | ||||
#----------------------------------------------------------------------------- | ||||
class TestValidator(TestsBase): | ||||
def test_schema_path(self): | ||||
"""Test that the schema path exists""" | ||||
self.assertEqual(os.path.exists(schema_path), True) | ||||
def test_nb2(self): | ||||
"""Test that a v2 notebook converted to v3 passes validation""" | ||||
with self.fopen(u'test2.ipynb', u'r') as f: | ||||
nb = read(f, u'json') | ||||
self.assertEqual(validate(nb), []) | ||||
self.assertEqual(isvalid(nb), True) | ||||
def test_nb3(self): | ||||
"""Test that a v3 notebook passes validation""" | ||||
with self.fopen(u'test3.ipynb', u'r') as f: | ||||
nb = read(f, u'json') | ||||
self.assertEqual(validate(nb), []) | ||||
self.assertEqual(isvalid(nb), True) | ||||
def test_invalid(self): | ||||
"""Test than an invalid notebook does not pass validation""" | ||||
# this notebook has a few different errors: | ||||
# - the name is an integer, rather than a string | ||||
Jessica B. Hamrick
|
r16434 | # - one cell is missing its source | ||
Jessica B. Hamrick
|
r16431 | # - one cell has an invalid level | ||
with self.fopen(u'invalid.ipynb', u'r') as f: | ||||
nb = read(f, u'json') | ||||
self.assertEqual(len(validate(nb)), 3) | ||||
self.assertEqual(isvalid(nb), False) | ||||
def test_resolve_ref(self): | ||||
"""Test that references are correctly resolved""" | ||||
# make sure it resolves the ref correctly | ||||
json = {"abc": "def", "ghi": {"$ref": "/abc"}} | ||||
resolved = resolve_ref(json) | ||||
self.assertEqual(resolved, {"abc": "def", "ghi": "def"}) | ||||
# make sure it throws an error if the ref is not by itself | ||||
json = {"abc": "def", "ghi": {"$ref": "/abc", "foo": "bar"}} | ||||
with self.assertRaises(SchemaError): | ||||
resolved = resolve_ref(json) | ||||
# make sure it can handle json with no reference | ||||
json = {"abc": "def"} | ||||
resolved = resolve_ref(json) | ||||
self.assertEqual(resolved, json) | ||||