From b23f6e5b59c83b9a5d88234ee0e9ca2eda9938a3 Mon Sep 17 00:00:00 2001 From: gilch Date: Wed, 6 Sep 2017 17:28:41 -0600 Subject: [PATCH] test hy model reprs --- tests/test_models.py | 119 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 1 deletion(-) diff --git a/tests/test_models.py b/tests/test_models.py index 291caa7..927b8f4 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -3,9 +3,12 @@ # license. See the LICENSE. import copy +import hy +from clint.textui.colored import clean from hy._compat import long_type, str_type from hy.models import (wrap_value, replace_hy_obj, HyString, HyInteger, HyList, - HyDict, HySet, HyExpression, HyCons, HyComplex, HyFloat) + HyDict, HySet, HyExpression, HyCons, HyComplex, HyFloat, + pretty) def test_wrap_long_type(): @@ -140,3 +143,117 @@ def test_number_model_copy(): c = HyComplex(42j) assert (c == copy.copy(c)) assert (c == copy.deepcopy(c)) + + +PRETTY_STRINGS = { + k % ('[1.0] {1.0} (1.0) #{1.0} (0.0 1.0 . 2.0)',): + v.format(""" + HyList([ + HyFloat(1.0)]), + HyDict([ + HyFloat(1.0) # odd + ]), + HyExpression([ + HyFloat(1.0)]), + HySet([ + HyFloat(1.0)]), + """) + for k, v in {'[%s]': 'HyList([{}])', + '#{%s}': 'HySet([{}])'}.items()} + +PRETTY_STRINGS.update({ + '{[1.0] {1.0} (1.0) #{1.0} (0.0 1.0 . 2.0)}': + """HyDict([ + HyList([ + HyFloat(1.0)]), + HyDict([ + HyFloat(1.0) # odd + ]) + , + HyExpression([ + HyFloat(1.0)]), + HySet([ + HyFloat(1.0)]) + , + # odd +])""" + , + '([1.0] {1.0} (1.0) #{1.0} (0.0 1.0 . 2.0) . 3.0)': + """ +. HyFloat(3.0))>""" + , + '[1.0 1j [] {} () #{}]': + """HyList([ + HyFloat(1.0), + HyComplex(1j), + HyList(), + HyDict(), + HyExpression(), + HySet()])""" + , + '{{1j 2j} {1j 2j [][1j]} {[1j][] 1j 2j} {[1j][1j]}}': + """HyDict([ + HyDict([ + HyComplex(1j), HyComplex(2j),]), + HyDict([ + HyComplex(1j), HyComplex(2j), + HyList(), + HyList([ + HyComplex(1j)]) + ,]) + , + HyDict([ + HyList([ + HyComplex(1j)]), + HyList() + , + HyComplex(1j), HyComplex(2j),]), + HyDict([ + HyList([ + HyComplex(1j)]), + HyList([ + HyComplex(1j)]) + ,]) + ,])"""}) + + +def test_compound_model_repr(): + HY_LIST_MODELS = (HyExpression, HyDict, HySet, HyList) + with pretty(False): + assert eval(repr(HyCons(1, 2))).__class__ is HyCons + assert eval(repr(HyCons(1, 2))) == HyCons(1, 2) + for model in HY_LIST_MODELS: + assert eval(repr(model())).__class__ is model + assert eval(repr(model([1, 2]))) == model([1, 2]) + assert eval(repr(model([1, 2, 3]))) == model([1, 2, 3]) + for k, v in PRETTY_STRINGS.items(): + # `str` should be pretty, even under `pretty(False)`. + assert clean(str(hy.read_str(k))) == v + for k in PRETTY_STRINGS.keys(): + assert eval(repr(hy.read_str(k))) == hy.read_str(k) + with pretty(True): + for model in HY_LIST_MODELS: + assert eval(clean(repr(model()))).__class__ is model + assert eval(clean(repr(model([1, 2])))) == model([1, 2]) + assert eval(clean(repr(model([1, 2, 3])))) == model([1, 2, 3]) + for k, v in PRETTY_STRINGS.items(): + assert clean(repr(hy.read_str(k))) == v