def test_multiple_memoizations(self): f = Foobar() m1 = f.memoize(f.one()) m2 = f.memoize(f.two()) self.assertNodeOutput("$put(v0,$one())", m1) self.assertNodeOutput("$put(v0,$two())", m2) self.assertNodeOutput("$put(v0,$one())", m1) self.assertNodeOutput("$put(v0,$two())", m2) self.assertNodeOutput("$foo($put(v0,$one()),$bar($get(v0),$put(v1,$two())),$get(v1))", f.foo(m1, f.bar(m1, m2), m2))
def test_mul(self): f = Foobar() self.assertNodeOutput("$mul($one(),3)", f.one() * 3)
def test_add(self): f = Foobar() self.assertNodeOutput("$add($one(),3)", f.one() + 3)
def test_memoization(self): f = Foobar() memoized = f.memoize(f.expensive()) self.assertNodeOutput("$put(v0,$expensive())", memoized) self.assertNodeOutput("$put(v0,$expensive())", memoized) self.assertNodeOutput("$moo($put(v0,$expensive()),$get(v0))", f.moo(memoized, memoized))
def test_nested(self): f = Foobar() self.assertNodeOutput("$foo(2,$bar('blah'),7)", f.foo(2, f.bar('blah'), 7))
def test_trailing_underscore(self): f = Foobar() self.assertNodeOutput("$if('a','b','c')", f.if_('a', 'b', 'c'))
def test_string_arg(self): f = Foobar() self.assertNodeOutput("$len('meep')", f.len("meep"))
def test_blank(self): f = Foobar() self.assertNodeOutput("$len()", f.len())
def test_chaining(self): f = Foobar() self.assertNodeOutput("$left(%path%,2)", f['path'].left(2))
def test_chaining2(self): f = Foobar() self.assertNodeOutput("$right($left(%path%,$len(%path%)),2)", f['path'].left(f['path'].len()).right(2))
def test_keyword_args(self): f = Foobar() with self.assertRaises(FoobarException): f.foo(bar=5)
def test_multi_arg(self): f = Foobar() self.assertNodeOutput("$moo('awesome',3,4)", f.moo('awesome', 3, 4))
def test_fn(self): self.assertEqualIncludingHash(Foobar().foo(), Foobar().foo()) self.assertNotEqualIncludingHash(Foobar().foo(), Foobar().bar())
def test_different_nodes(self): self.assertNotEqualIncludingHash(Foobar.val('a'), Foobar.var('a'))
def test_val_num(self): self.assertEqualIncludingHash(Foobar.val(1), Foobar.val(1)) self.assertNotEqualIncludingHash(Foobar.val(1), Foobar.val(2))
def test_val_float(self): self.assertEqualIncludingHash(Foobar.val(1.1), Foobar.val(1.1)) self.assertNotEqualIncludingHash(Foobar.val(1.1), Foobar.val(2.2))
def test_val_string(self): self.assertEqualIncludingHash(Foobar.val('hi'), Foobar.val('hi')) self.assertNotEqualIncludingHash(Foobar.val('hi'), Foobar.val('ho'))
def test_memoize(self): f = Foobar() self.assertEqualIncludingHash(f.memoize(f.foo()), f.memoize(f.foo())) self.assertNotEqualIncludingHash(f.memoize(f.foo()), f.memoize(f.bar()))
def test_nesting(self): f = Foobar() m1 = f.memoize(f.hmm()) m2 = f.memoize(m1.hmm(m1)) self.assertNodeOutput("$put(v0,$hmm($put(v1,$hmm()),$get(v1)))", m2)
def test_id(self): self.assertEqualIncludingHash(Foobar.id('hi'), Foobar.id('hi')) self.assertNotEqualIncludingHash(Foobar.id('hi'), Foobar.id('ho'))
from fbtf import output, Foobar f = Foobar() path = f['path'] start_with_http = path.left(7).stricmp('http://') strip_http = path.right(path.len() - 7) # get rid ef leading http://, then get rid of any port number domain = strip_http.left(strip_http.strchr('/') - 1) domain_no_port = domain.left(domain.strchr(':') - 1) # helpers domain_no_port_first_dot = domain_no_port.strchr('.') domain_no_port_last_dot = domain_no_port.strrchr('.') domain_right_part = domain_no_port.right(domain_no_port.len() - domain_no_port_last_dot) # TODO: the domain shortening logic is a huge hack, could be better # only shorten domain if the right most part isn't a TLD (at a guess) shortened_domain = f.ifequal(domain_right_part.len(), 2, domain_no_port, domain_no_port.right(domain_no_port.len() - domain_no_port_first_dot)) # try to shorten the domain to get rid of subdomains shortened_if_domain = f.ifequal(domain_no_port_last_dot, domain_no_port_first_dot, domain_no_port, shortened_domain) # main body script = f.if_(start_with_http, shortened_if_domain, path)
def test_not_node(self): with self.assertRaises(FoobarException): Foobar.val(1) == 2
def test_div(self): f = Foobar() self.assertNodeOutput("$div($one(),3)", f.one() / 3)
def test_same_node(self): v = Foobar.val('moo') self.assertEqualIncludingHash(v, v)
def test_subtract(self): f = Foobar() self.assertNodeOutput("$sub($one(),3)", f.one() - 3)