def test_right_associate(self): result = parser.parse(resolve, 'alist_-_{blist_|_clist}') expected = ('AA-(BB|CC)', alist[1] - (blist[1] | clist[1])) self.assertEqual(result, expected)
def test_simple_difference(self): result = parser.parse(resolve, 'alist_-_blist') expected = ('AA-BB', alist[1] - blist[1]) self.assertEqual(result, expected)
def test_left_associate(self): result = parser.parse(resolve, '{alist_-_blist}_|_clist') expected = ('(AA-BB)|CC', (alist[1] - blist[1]) | clist[1]) self.assertEqual(result, expected)
def test_fail_bad_token(self): expected = 'Unrecognized syntax near character 6' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, 'alist_+_blist')
def test_simple_union(self): result = parser.parse(resolve, 'alist_|_blist') expected = ('AA|BB', alist[1] | blist[1]) self.assertEqual(result, expected)
def test_parens_left(self): result = parser.parse(resolve, '{alist_-_clist}_-_blist') expected = ('AA-CC-BB', (alist[1] - clist[1]) - blist[1]) self.assertEqual(result, expected)
def test_vanilla_empty(self): """Vanilla address is not a set expression, so empty is not an error.""" result = parser.parse(resolve, 'empty') expected = ('Empty', set()) self.assertEqual(result, expected)
def test_fail_misplaced_close_paren(self): expected = 'Misplaced closing parenthesis' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, 'alist_&_}')
def test_fail_unmatched_close_paren(self): expected = 'Unmatched closing parenthesis' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, '{alist_&_blist}}')
def test_fail_unmatched_open_paren(self): expected = 'Unmatched opening parenthesis' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, '{alist')
def test_fail_misplaced_open_paren(self): expected = 'Misplaced opening parenthesis' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, 'alist{blist}')
def test_fail_misplaced_difference(self): expected = 'Misplaced difference operator' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, '_-_alist')
def test_fail_misplaced_intersect(self): expected = 'Misplaced intersection operator' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, '_&_alist')
def test_fail_misplaced_leaf(self): expected = 'Misplaced list or person name' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, '{alist}blist')
def test_omitted_parens(self): result = parser.parse(resolve, 'alist_|_blist_|_clist') expected = ('AA|BB|CC', alist[1] | blist[1] | clist[1]) self.assertEqual(result, expected)
def test_single_list(self): result = parser.parse(resolve, 'alist') expected = ('Alist', alist[1]) self.assertEqual(result, expected)
def test_surplus_parens(self): result = parser.parse(resolve, 'alist_|_{blist_|_clist}') expected = ('AA|BB|CC', alist[1] | blist[1] | clist[1]) self.assertEqual(result, expected)
def test_single_in_parens(self): result = parser.parse(resolve, '{alist}') expected = ('AA', alist[1]) self.assertEqual(result, expected)
def test_parens_right(self): result = parser.parse(resolve, 'alist_-_{clist_-_blist}') expected = ('AA-(CC-BB)', alist[1] - (clist[1] - blist[1])) self.assertEqual(result, expected)
def test_simple_intersection(self): result = parser.parse(resolve, 'alist_&_blist') expected = ('AA&BB', alist[1] & blist[1]) self.assertEqual(result, expected)
def test_fail_empty_result(self): expected = 'No recipients match this set expression' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, 'alist_-_alist')
def test_fail_unparenthesized(self): expected = 'Parentheses required when mixing different operators' with helper.AssertFail(self, SyntaxError, expected): parser.parse(resolve, 'alist_&_blist_|_clist')