def testQuerySets(self): """Test that we can join queries together correctly.""" # construct via queries qs = query.HasClaim(99, 100).AND(query.HasClaim(99, 101)) self.assertEqual(str(qs), 'claim[99:100] AND claim[99:101]') self.assertEqual(repr(qs), 'QuerySet(claim[99:100] AND claim[99:101])') qs = query.HasClaim(99, 100).AND(query.HasClaim(99, 101)).AND( query.HasClaim(95)) self.assertEqual(str(qs), 'claim[99:100] AND claim[99:101] AND claim[95]') # construct via queries qs = query.HasClaim(99, 100).AND( [query.HasClaim(99, 101), query.HasClaim(95)]) self.assertEqual(str(qs), 'claim[99:100] AND claim[99:101] AND claim[95]') qs = query.HasClaim(99, 100).OR( [query.HasClaim(99, 101), query.HasClaim(95)]) self.assertEqual(str(qs), 'claim[99:100] OR claim[99:101] OR claim[95]') q1 = query.HasClaim(99, 100) q2 = query.HasClaim(99, 101) # different joiners get explicit grouping parens (the api also allows # implicit, but we don't do that) qs1 = q1.AND(q2) qs2 = q1.OR(qs1).AND(query.HasClaim(98)) self.assertEqual( str(qs2), '(claim[99:100] OR (claim[99:100] AND claim[99:101])) AND claim[98]' ) # if the joiners are the same, no need to group qs1 = q1.AND(q2) qs2 = q1.AND(qs1).AND(query.HasClaim(98)) self.assertEqual( str(qs2), 'claim[99:100] AND claim[99:100] AND claim[99:101] AND claim[98]') qs1 = query.HasClaim(100).AND(query.HasClaim(101)) qs2 = qs1.OR(query.HasClaim(102)) self.assertEqual(str(qs2), '(claim[100] AND claim[101]) OR claim[102]') qs = query.Link("enwiki").AND(query.NoLink("dewiki")) self.assertEqual(str(qs), 'link[enwiki] AND nolink[dewiki]')
def testQueries(self): """ Test Queries and check whether they're behaving correctly. Check that we produce the expected query strings and that invalid inputs are rejected correctly """ q = query.HasClaim(99) self.assertEqual(str(q), "claim[99]") q = query.HasClaim(99, 100) self.assertEqual(str(q), "claim[99:100]") q = query.HasClaim(99, [100]) self.assertEqual(str(q), "claim[99:100]") q = query.HasClaim(99, [100, 101]) self.assertEqual(str(q), "claim[99:100,101]") q = query.NoClaim(99, [100, 101]) self.assertEqual(str(q), "noclaim[99:100,101]") q = query.StringClaim(99, "Hello") self.assertEqual(str(q), 'string[99:"Hello"]') q = query.StringClaim(99, ["Hello"]) self.assertEqual(str(q), 'string[99:"Hello"]') q = query.StringClaim(99, ["Hello", "world"]) self.assertEqual(str(q), 'string[99:"Hello","world"]') self.assertRaises(TypeError, lambda: query.StringClaim(99, 2)) q = query.Tree(92, [1], 2) self.assertEqual(str(q), 'tree[92][1][2]') # missing third arg q = query.Tree(92, 1) self.assertEqual(str(q), 'tree[92][1][]') # missing second arg q = query.Tree(92, reverse=3) self.assertEqual(str(q), 'tree[92][][3]') q = query.Tree([92, 93], 1, [2, 7]) self.assertEqual(str(q), 'tree[92,93][1][2,7]') # bad tree arg types self.assertRaises(TypeError, lambda: query.Tree(99, "hello")) q = query.Link("enwiki") self.assertEqual(str(q), 'link[enwiki]') q = query.NoLink(["enwiki", "frwiki"]) self.assertEqual(str(q), 'nolink[enwiki,frwiki]') # bad link arg types self.assertRaises(TypeError, lambda: query.Link(99)) self.assertRaises(TypeError, lambda: query.Link([99])) # HasClaim with tree as arg q = query.HasClaim(99, query.Tree(1, 2, 3)) self.assertEqual(str(q), "claim[99:(tree[1][2][3])]") q = query.HasClaim(99, query.Tree(1, [2, 5], [3, 90])) self.assertEqual(str(q), "claim[99:(tree[1][2,5][3,90])]")