import py from stemp import stemplate class TestSTemplate(object): def test_no_interpolation(self): s = str(stemplate('foo', {})) assert s == 'foo' def test_basic_interpolation(self): s = str(stemplate('foo %(bar)s baz', {'bar': 'qux'})) assert s == 'foo qux baz' def test_block(self): s = str(stemplate('foo %(bar)b quux', {'bar': {'baz': 'spam', 'qux': 'eggs'}})) assert s == 'foo spam eggs quux' def test_conditional(self): t = 'foo %(bar)?bbar %(bar)>bbaz' s = str(stemplate(t, {'bar': False})) assert s == 'foo baz' s = str(stemplate(t, {'bar': True})) assert s == 'foo bar baz' def test_negated_conditional(self): t = 'foo %(bar)~bbar %(bar)>bbaz' s = str(stemplate(t, {'bar': False})) assert s == 'foo bar baz' s = str(stemplate(t, {'bar': True})) assert s == 'foo baz' def test_loop(self): t = 'foo%(bar)*b %(i)s%(bar)>b baz' s = str(stemplate(t, {'bar': [{'i': 1}, {'i': 2}, {'i': 3}]})) assert s == 'foo 1 2 3 baz' def test_conditional_interpolation(self): t = 'foo %(cond)?b%(bar)s %(cond)>bbaz' s = stemplate(t) r1 = s.process({'bar': 'qux', 'cond': True}) assert r1 == 'foo qux baz' r2 = s.process({'bar': 'qux', 'cond': False}) assert r2 == 'foo baz' def test_conditional_loop(self): t = 'foo%(cond)?b%(bar)*b %(i)s%(bar)>b%(cond)>b baz' s = str(stemplate(t, {'cond': True, 'bar': [{'i': 1}, {'i': 2}]})) assert s == 'foo 1 2 baz' s = str(stemplate(t, {'cond': False, 'bar': [{'i': 1}, {'i': 2}]})) assert s == 'foo baz' def test_bad_nesting(self): t = 'foo%(bar)?b%(baz)*b %(qux)s%(bar)>b%(baz)>b quux' py.test.raises( SyntaxError, "str(stemplate(t, {'bar': 'bar', 'baz': [{'qux': 'baz'}]}))") def test_bad_loop_args(self): t = stemplate('foo%(bar)*b %(baz)s%(bar)>b qux') s = t.process({'bar': [{'baz': 'quux'}, {'baz': 'quuux'}]}) assert s == 'foo quux quuux qux' py.test.raises(TypeError, "t.process({'bar': 'baz'})") py.test.raises(TypeError, "t.process({'bar': {'baz': 'qux'}})") py.test.raises(TypeError, "t.process({'bar': ['baz']})")