def test_list(self): lists = [("()", ()), ("(1)", (1,)), ("(\"foo\" 1 foo :bar)", ("foo", 1, Symbol("foo"), Keyword("bar"))), ("(((foo) bar)\n\t baz)", (((Symbol("foo"),), Symbol("bar")), Symbol("baz")))] for edn_str, expected in lists: self.assertEqual(edn(edn_str).list(), expected)
def test_vector(self): vectors = [("[]", Vector()), ("[1]", Vector((1,))), ("[foo]", Vector((Symbol("foo"),))), ("[[foo] [bar]]", Vector((Vector((Symbol("foo"),)), Vector((Symbol("bar"),)))))] for edn_str, expected in vectors: self.assertEqual(edn(edn_str).vector(), expected)
def test_tagged_value(self): self.assertEqual( '#foo bar', dumps(TaggedValue(Symbol('foo'), Symbol('bar'))))
def test_symbol(self): self.assertEqual(edn("foo").symbol(), Symbol("foo")) self.assertEqual(edn(".foo").symbol(), Symbol(".foo")) self.assertEqual(edn("/").symbol(), Symbol("/")) self.assertEqual(edn("foo/bar").symbol(), Symbol("bar", "foo"))
def test_tuple(self): self.assertEqual("()", dumps(())) self.assertEqual("(() ())", dumps(((), ()))) self.assertEqual("(a)", dumps((Symbol('a'),)))
def test_list(self): self.assertEqual("()", dumps([])) self.assertEqual("(() ())", dumps([[], []])) self.assertEqual("(a)", dumps([Symbol('a')]))
def test_custom_tag_doesnt_mutate(self): foo = Symbol('foo') text = '#foo [1 2]' loads(text, {foo: lambda x: list(reversed(x))}) parsed = loads(text) self.assertEqual(TaggedValue(foo, Vector([1, 2])), parsed)
def test_symbol(self): self.assertEqual("foo", dumps(Symbol("foo"))) self.assertEqual(".foo", dumps(Symbol(".foo"))) self.assertEqual("/", dumps(Symbol("/"))) self.assertEqual("foo/bar", dumps(Symbol("bar", "foo")))
def test_custom_tag(self): text = '#foo [1 2]' parsed = loads(text, {Symbol('foo'): lambda x: list(reversed(x))}) self.assertEqual([2, 1], parsed)
def test_custom(self): result = make_tagged_value( {Symbol('foo'): lambda x: list(reversed(x))}, Symbol('foo'), 'bar') self.assertEqual(['r', 'a', 'b'], result)
def test_default(self): result = make_tagged_value({}, Symbol('foo'), 'bar') self.assertEqual(TaggedValue(Symbol('foo'), 'bar'), result)
def test_comment(self): self.assertEqual(edn('; foo bar baz bax\nbar ; this is bar\n').edn(), Symbol('bar'))
def test_tag(self): self.assertEqual(edn('#foo/bar baz').tag(), TaggedValue(Symbol('bar', 'foo'), Symbol('baz')))