##// END OF EJS Templates
Merge pull request #6237 from jasongrout/iptest-profile-dir...
Merge pull request #6237 from jasongrout/iptest-profile-dir Explicitly set the profile directory when running tests

File last commit:

r16965:a79a599c
r17471:aaabb878 merge
Show More
test_validator.py
73 lines | 2.7 KiB | text/x-python | PythonLexer
"""
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
from jsonschema import SchemaError
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
# - one cell is missing its source
# - 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)