test_nbpy.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # -*- coding: utf8 -*-
  2. from unittest import TestCase
  3. from ipython_genutils.py3compat import string_types, iteritems
  4. from . import formattest
  5. from .. import nbpy
  6. from .nbexamples import nb0, nb0_py
  7. class TestPy(formattest.NBFormatTest, TestCase):
  8. nb0_ref = nb0_py
  9. ext = 'py'
  10. mod = nbpy
  11. ignored_keys = ['collapsed', 'outputs', 'prompt_number', 'metadata']
  12. def assertSubset(self, da, db):
  13. """assert that da is a subset of db, ignoring self.ignored_keys.
  14. Called recursively on containers, ultimately comparing individual
  15. elements.
  16. """
  17. if isinstance(da, dict):
  18. for k,v in iteritems(da):
  19. if k in self.ignored_keys:
  20. continue
  21. self.assertTrue(k in db)
  22. self.assertSubset(v, db[k])
  23. elif isinstance(da, list):
  24. for a,b in zip(da, db):
  25. self.assertSubset(a,b)
  26. else:
  27. if isinstance(da, string_types) and isinstance(db, string_types):
  28. # pyfile is not sensitive to preserving leading/trailing
  29. # newlines in blocks through roundtrip
  30. da = da.strip('\n')
  31. db = db.strip('\n')
  32. self.assertEqual(da, db)
  33. return True
  34. def assertNBEquals(self, nba, nbb):
  35. # since roundtrip is lossy, only compare keys that are preserved
  36. # assumes nba is read from my file format
  37. return self.assertSubset(nba, nbb)