def test_extension(self): self.failUnless(Query.is_valid("@(name)")) self.failUnless(Query.is_valid("@(name: extension body)")) self.failUnless(Query.is_valid("@(name: body (with (nested) parens))")) self.failUnless(Query.is_valid(r"@(name: body \\ with \) escapes)")) self.failIf(Query.is_valid("@()")) self.failIf(Query.is_valid(r"@(invalid %name!\\)")) self.failIf(Query.is_valid("@(name: mismatched ( parenthesis)")) self.failIf(Query.is_valid(r"@(\()")) self.failIf(Query.is_valid("@(name:unclosed body")) self.failIf(Query.is_valid("@ )"))
def test_extension(self): self.failUnless(Query.is_valid("@(name)")) self.failUnless(Query.is_valid("@(name: extension body)")) self.failUnless(Query.is_valid("@(name: body (with (nested) parens))")) self.failUnless(Query.is_valid(r"@(name: body \\ with \) escapes)")) self.failIf(Query.is_valid("@()")) self.failIf(Query.is_valid(r"@(invalid %name!\\)")) self.failIf(Query.is_valid("@(name: mismatched ( parenthesis)")) self.failIf(Query.is_valid(r"@(\()")) self.failIf(Query.is_valid("@(name:unclosed body")) self.failIf(Query.is_valid("@ )"))
def test_numcmp(self): self.failUnless(Query.is_valid("#(t < 3)")) self.failUnless(Query.is_valid("#(t <= 3)")) self.failUnless(Query.is_valid("#(t > 3)")) self.failUnless(Query.is_valid("#(t >= 3)")) self.failUnless(Query.is_valid("#(t = 3)")) self.failUnless(Query.is_valid("#(t != 3)")) self.failIf(Query.is_valid("#(t !> 3)")) self.failIf(Query.is_valid("#(t >> 3)"))
def test_numcmp(self): self.failUnless(Query.is_valid("#(t < 3)")) self.failUnless(Query.is_valid("#(t <= 3)")) self.failUnless(Query.is_valid("#(t > 3)")) self.failUnless(Query.is_valid("#(t >= 3)")) self.failUnless(Query.is_valid("#(t = 3)")) self.failUnless(Query.is_valid("#(t != 3)")) self.failIf(Query.is_valid("#(t !> 3)")) self.failIf(Query.is_valid("#(t >> 3)"))
def test_not(self): self.failUnless(Query.is_valid('t = !/a/')) self.failUnless(Query.is_valid('t = !!/a/')) self.failUnless(Query.is_valid('!t = "a"')) self.failUnless(Query.is_valid('!!t = "a"')) self.failUnless(Query.is_valid('t = !|(/a/, !"b")')) self.failUnless(Query.is_valid('t = !!|(/a/, !"b")')) self.failUnless(Query.is_valid('!|(t = /a/)'))
def test_not(self): self.failUnless(Query.is_valid('t = !/a/')) self.failUnless(Query.is_valid('t = !!/a/')) self.failUnless(Query.is_valid('!t = "a"')) self.failUnless(Query.is_valid('!!t = "a"')) self.failUnless(Query.is_valid('t = !|(/a/, !"b")')) self.failUnless(Query.is_valid('t = !!|(/a/, !"b")')) self.failUnless(Query.is_valid('!|(t = /a/)'))
def test_tag(self): self.failUnless(Query.is_valid('t = tag')) self.failUnless(Query.is_valid('t = !tag')) self.failUnless(Query.is_valid('t = |(tag, bar)')) self.failUnless(Query.is_valid('t = a"tag"')) self.failIf(Query.is_valid('t = a, tag')) self.failUnless(Query.is_valid('tag with spaces = tag'))
def test_tag(self): self.failUnless(Query.is_valid('t = tag')) self.failUnless(Query.is_valid('t = !tag')) self.failUnless(Query.is_valid('t = |(tag, bar)')) self.failUnless(Query.is_valid('t = a"tag"')) self.failIf(Query.is_valid('t = a, tag')) self.failUnless(Query.is_valid('tag with spaces = tag'))
def test_re(self): self.failUnless(Query.is_valid('t = /an re/')) self.failUnless(Query.is_valid('t = /an re/c')) self.failUnless(Query.is_valid('t = /an\\/re/')) self.failIf(Query.is_valid('t = /an/re/')) self.failUnless(Query.is_valid('t = /aaa/lsic')) self.failIf(Query.is_valid('t = /aaa/icslx'))
def test_re(self): self.failUnless(Query.is_valid('t = /an re/')) self.failUnless(Query.is_valid('t = /an re/c')) self.failUnless(Query.is_valid('t = /an\\/re/')) self.failIf(Query.is_valid('t = /an/re/')) self.failUnless(Query.is_valid('t = /aaa/lsic')) self.failIf(Query.is_valid('t = /aaa/icslx'))
def test_andor(self): self.failUnless(Query.is_valid('a = |(/a/, /b/)')) self.failUnless(Query.is_valid('a = |(/b/)')) self.failUnless(Query.is_valid('|(a = /b/, c = /d/)')) self.failUnless(Query.is_valid('a = &(/a/, /b/)')) self.failUnless(Query.is_valid('a = &(/b/)')) self.failUnless(Query.is_valid('&(a = /b/, c = /d/)'))
def test_andor(self): self.failUnless(Query.is_valid('a = |(/a/, /b/)')) self.failUnless(Query.is_valid('a = |(/b/)')) self.failUnless(Query.is_valid('|(a = /b/, c = /d/)')) self.failUnless(Query.is_valid('a = &(/a/, /b/)')) self.failUnless(Query.is_valid('a = &(/b/)')) self.failUnless(Query.is_valid('&(a = /b/, c = /d/)'))
def test_str(self): self.failUnless(Query.is_valid('t = "a str"')) self.failUnless(Query.is_valid('t = "a str"c')) self.failUnless(Query.is_valid('t = "a\\"str"'))
def test_numexpr(self): self.failUnless(Query.is_valid("#(t < 3*4)")) self.failUnless(Query.is_valid("#(t * (1+r) < 7)")) self.failUnless(Query.is_valid("#(0 = t)")) self.failUnless(Query.is_valid("#(t < r < 9)")) self.failUnless(Query.is_valid("#((t-9)*r < -(6*2) = g*g-1)")) self.failUnless(Query.is_valid("#(t + 1 + 2 + -4 * 9 > g*(r/4 + 6))")) self.failUnless(Query.is_valid("#(date < 2010-4)")) self.failUnless(Query.is_valid("#(date < 2010 - 4)")) self.failUnless(Query.is_valid("#(date > 0000)")) self.failUnless(Query.is_valid("#(date > 00004)")) self.failUnless(Query.is_valid("#(t > 3 minutes)")) self.failUnless(Query.is_valid("#(added > today)")) self.failUnless(Query.is_valid("#(length < 5:00)")) self.failUnless(Query.is_valid("#(filesize > 5M)")) self.failUnless(Query.is_valid("#(added < 7 days ago)")) self.failIf(Query.is_valid("#(3*4)")) self.failIf(Query.is_valid("#(t = 3 + )")) self.failIf(Query.is_valid("#(t = -)")) self.failIf(Query.is_valid("#(-4 <)")) self.failIf(Query.is_valid("#(t < ()")) self.failIf(Query.is_valid("#((t +) - 1 > 8)")) self.failIf(Query.is_valid("#(t += 8)"))
def test_nesting(self): self.failUnless(Query.is_valid("|(s, t = &(/a/, /b/),!#(2 > q > 3))"))
def test_nesting(self): self.failUnless(Query.is_valid("|(s, t = &(/a/, /b/),!#(2 > q > 3))"))
def test_str(self): self.failUnless(Query.is_valid('t = "a str"')) self.failUnless(Query.is_valid('t = "a str"c')) self.failUnless(Query.is_valid('t = "a\\"str"'))
def test_nonsense(self): self.failIf(Query.is_valid('a string')) self.failIf(Query.is_valid('t = #(a > b)')) self.failIf(Query.is_valid("=a= = /b/")) self.failIf(Query.is_valid("a = &(/b//")) self.failIf(Query.is_valid("(a = &(/b//)"))
def test_empty(self): self.failUnless(Query.is_valid('')) self.failUnless(Query.is_parsable('')) self.failUnless(Query(''))
def test_taglist(self): self.failUnless(Query.is_valid('a, b = /a/')) self.failUnless(Query.is_valid('a, b, c = |(/a/)')) self.failUnless(Query.is_valid('|(a, b = /a/, c, d = /q/)')) self.failIf(Query.is_valid('a = /a/, b'))
def test_empty(self): self.failUnless(Query.is_valid('')) self.failUnless(Query.is_parsable('')) self.failUnless(Query(''))
def test_trailing(self): self.failIf(Query.is_valid('t = /an re/)')) self.failIf(Query.is_valid('|(a, b = /a/, c, d = /q/) woo'))
def test_nonsense(self): self.failIf(Query.is_valid('a string')) self.failIf(Query.is_valid('t = #(a > b)')) self.failIf(Query.is_valid("=a= = /b/")) self.failIf(Query.is_valid("a = &(/b//")) self.failIf(Query.is_valid("(a = &(/b//)"))
def test_emptylist(self): self.failIf(Query.is_valid("a = &()")) self.failIf(Query.is_valid("a = |()")) self.failIf(Query.is_valid("|()")) self.failIf(Query.is_valid("&()"))
def test_emptylist(self): self.failIf(Query.is_valid("a = &()")) self.failIf(Query.is_valid("a = |()")) self.failIf(Query.is_valid("|()")) self.failIf(Query.is_valid("&()"))
def test_numcmp_func(self): self.assertTrue(Query.is_valid("#(t:min < 3)")) self.assertTrue( Query.is_valid("&(#(playcount:min = 0), #(added < 1 month ago))"))
def test_trailing(self): self.failIf(Query.is_valid('t = /an re/)')) self.failIf(Query.is_valid('|(a, b = /a/, c, d = /q/) woo'))
def test_numexpr(self): self.failUnless(Query.is_valid("#(t < 3*4)")) self.failUnless(Query.is_valid("#(t * (1+r) < 7)")) self.failUnless(Query.is_valid("#(0 = t)")) self.failUnless(Query.is_valid("#(t < r < 9)")) self.failUnless(Query.is_valid("#((t-9)*r < -(6*2) = g*g-1)")) self.failUnless(Query.is_valid("#(t + 1 + 2 + -4 * 9 > g*(r/4 + 6))")) self.failUnless(Query.is_valid("#(date < 2010-4)")) self.failUnless(Query.is_valid("#(date < 2010 - 4)")) self.failUnless(Query.is_valid("#(date > 0000)")) self.failUnless(Query.is_valid("#(date > 00004)")) self.failUnless(Query.is_valid("#(t > 3 minutes)")) self.failUnless(Query.is_valid("#(added > today)")) self.failUnless(Query.is_valid("#(length < 5:00)")) self.failUnless(Query.is_valid("#(filesize > 5M)")) self.failUnless(Query.is_valid("#(added < 7 days ago)")) self.failIf(Query.is_valid("#(3*4)")) self.failIf(Query.is_valid("#(t = 3 + )")) self.failIf(Query.is_valid("#(t = -)")) self.failIf(Query.is_valid("#(-4 <)")) self.failIf(Query.is_valid("#(t < ()")) self.failIf(Query.is_valid("#((t +) - 1 > 8)")) self.failIf(Query.is_valid("#(t += 8)"))
def test_taglist(self): self.failUnless(Query.is_valid('a, b = /a/')) self.failUnless(Query.is_valid('a, b, c = |(/a/)')) self.failUnless(Query.is_valid('|(a, b = /a/, c, d = /q/)')) self.failIf(Query.is_valid('a = /a/, b'))
def test_trinary(self): self.failUnless(Query.is_valid("#(2 < t < 3)")) self.failUnless(Query.is_valid("#(2 >= t > 3)")) # useless, but valid self.failUnless(Query.is_valid("#(5 > t = 2)"))
def test_list(self): self.failUnless(Query.is_valid("#(t < 3, t > 9)")) self.failUnless(Query.is_valid("t = &(/a/, /b/)")) self.failUnless(Query.is_valid("s, t = |(/a/, /b/)")) self.failUnless(Query.is_valid("|(t = /a/, s = /b/)"))
def test_list(self): self.failUnless(Query.is_valid("#(t < 3, t > 9)")) self.failUnless(Query.is_valid("t = &(/a/, /b/)")) self.failUnless(Query.is_valid("s, t = |(/a/, /b/)")) self.failUnless(Query.is_valid("|(t = /a/, s = /b/)"))
def test_trinary(self): self.failUnless(Query.is_valid("#(2 < t < 3)")) self.failUnless(Query.is_valid("#(2 >= t > 3)")) # useless, but valid self.failUnless(Query.is_valid("#(5 > t = 2)"))
def test_numcmp_func(self): self.assertTrue(Query.is_valid("#(t:min < 3)")) self.assertTrue( Query.is_valid("&(#(playcount:min = 0), #(added < 1 month ago))"))