preserves/implementations/python/tests/test_schema.py

46 lines
1.3 KiB
Python

from utils import PreservesTestCase
from preserves import *
from preserves.schema import meta, Compiler
def literal_schema(modname, s):
c = Compiler()
c.load_schema((Symbol(modname),), preserve(s))
return c.root
class BasicSchemaTests(PreservesTestCase):
def test_dictionary_literal(self):
m = literal_schema(
's',
parse('''
<schema {
version: 1,
embeddedType: #f,
definitions: {
C: <dict {"core": <lit true>}>
}
}>
'''))
self.assertEqual(m.s.C.decode({'core': Symbol('true')}), m.s.C())
self.assertPreservesEqual(preserve(m.s.C()), {'core': Symbol('true')})
def test_alternation_of_dictionary_literal(self):
m = literal_schema(
's',
parse('''
<schema {
version: 1,
embeddedType: #f,
definitions: {
C: <or [
["notcore" <dict {"notcore": <lit true>}>]
["core" <dict {"core": <lit true>}>]
]>
}
}>
'''))
self.assertEqual(m.s.C.decode({'core': Symbol('true')}), m.s.C.core())
self.assertPreservesEqual(preserve(m.s.C.core()), {'core': Symbol('true')})
self.assertEqual(m.s.C.decode({'notcore': Symbol('true')}), m.s.C.notcore())
self.assertPreservesEqual(preserve(m.s.C.notcore()), {'notcore': Symbol('true')})