def test_literal(self): self.assertEqual(build('1'), node.ProgramNode(subs=[ node.ValueNode(Token('1', TokenType.INTEGER)) ])) self.assertEqual(build('3.1415'), node.ProgramNode(subs=[ node.ValueNode(Token('3.1415', TokenType.REAL)) ]))
def test_real(self): self.assertEqual(parse('1.1'), [Token('1.1', TokenType.REAL)]) self.assertEqual(parse('03.1415'), [Token('03.1415', TokenType.REAL)]) self.assertEqual(parse('1.1 2.2 3.3'), [ Token('1.1', TokenType.REAL), Token('2.2', TokenType.REAL), Token('3.3', TokenType.REAL), ])
def test_integer(self): self.assertEqual(parse('1'), [Token('1', TokenType.INTEGER)]) self.assertEqual(parse('234'), [Token('234', TokenType.INTEGER)]) self.assertEqual(parse('1 23 456'), [ Token('1', TokenType.INTEGER), Token('23', TokenType.INTEGER), Token('456', TokenType.INTEGER), ])
def test_operator(self): self.assertEqual(parse('+'), [Token('+', TokenType.OPERATOR)]) self.assertEqual(parse('-'), [Token('-', TokenType.OPERATOR)]) self.assertEqual(parse('+ - + -'), [ Token('+', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('+', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), ])
def process(path, slug): token = Token(request, path, slug, g.user) to_skip = None for name in PROCESSORS: if to_skip != None: if name == to_skip: to_skip = None else: continue P = Processor.get_processor(name) processor = P(token) processor.process() if processor.stop(): to_skip = processor.skip() return token.response, token.content_type, token.headers
def test_no_spaces(self): s = list(self.t.tokenize_gen_alpha_digit('мамамылараму')) self.assertEqual(s, [Token('мамамылараму', 'alpha', 0, 12)])
def test_first_nonalpha(self): s = list(self.t.tokenize_gen('!!!!я иду в кино cinema')) self.assertEqual(len(s), 10) self.assertEqual(s[0], Token('!!!!', 'punct', 0, 4))
def test_middle_nonapha(self): s = list(self.t.tokenize_gen('я иду в кино00000 111 00000cinema')) self.assertEqual(len(s), 13) self.assertEqual(s[7], Token('00000', 'digit', 12, 17)) self.assertEqual(s[9], Token('111', 'digit', 18, 21))
def test_no_spaces(self): s = list(self.t.tokenize_gen('яидувкиноcinema')) self.assertEqual(s, [Token('яидувкиноcinema', 'alpha', 0, 15)]) self.assertEqual(len(s), 1)
def test_digital_string(self): s = list(self.t.tokenize_gen('012345')) self.assertEqual(len(s), 1) self.assertEqual(s, [Token('012345', 'digit', 0, 6)])
def test_last_nonalpha(self): s = list(self.t.tokenize_gen('мамамылараму2')) self.assertEqual(len(s), 12) self.assertEqual(s[11], Token('мамамылараму', 'alpha', 0, 13))
def test_first_alpha(self): s = list(self.t.tokenize_gen('я иду в кино')) self.assertEqual(s[0], Token("я", "alpha", 0, 1)) self.assertEqual(len(s), 7)
def test_first_alpha(self): s = list(self.t.tokenize_gen_alpha_digit('мама мыла')) self.assertEqual(s[0], Token("мама", "alpha", 0, 4)) self.assertEqual(len(s), 4)
def test_factor(self): self.assertEqual(build('-1'), node.ProgramNode(subs=[ node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)) ]) ]))
def test_numeric_expression(self): self.assertEqual(build('1+2'), node.ProgramNode(subs=[ node.OpNode(Token('+', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)), node.ValueNode(Token('2', TokenType.INTEGER)) ]) ])) self.assertEqual(build('-1+2'), node.ProgramNode(subs=[ node.OpNode(Token('+', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)) ]), node.ValueNode(Token('2', TokenType.INTEGER)) ]) ])) self.assertEqual(build('+-3.14 + 1'), node.ProgramNode(subs=[ node.OpNode(Token('+', TokenType.OPERATOR), [ node.TermNode(Token('+', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('3.14', TokenType.REAL)) ]) ]), node.ValueNode(Token('1', TokenType.INTEGER)) ]) ])) self.assertEqual(build('1+++--2.2---+1'), node.ProgramNode(subs=[ node.OpNode(Token('+', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)), node.OpNode(Token('-', TokenType.OPERATOR), [ node.TermNode(Token('+', TokenType.OPERATOR), [ node.TermNode(Token('+', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('2.2', TokenType.REAL)) ]) ]) ]) ]), node.TermNode(Token('-', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.TermNode(Token('+', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)) ]) ]) ]) ]) ]) ])) self.assertEqual(build('-1*-2'), node.ProgramNode(subs=[ node.OpNode(Token('*', TokenType.OPERATOR), [ node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)) ]), node.TermNode(Token('-', TokenType.OPERATOR), [ node.ValueNode(Token('2', TokenType.INTEGER)) ]), ]) ])) self.assertEqual(build('4+2/2+1'), node.ProgramNode(subs=[ node.OpNode(Token('+', TokenType.OPERATOR), [ node.ValueNode(Token('4', TokenType.INTEGER)), node.OpNode(Token('+', TokenType.OPERATOR), [ node.OpNode(Token('/', TokenType.OPERATOR), [ node.ValueNode(Token('2', TokenType.INTEGER)), node.ValueNode(Token('2', TokenType.INTEGER)) ]), node.ValueNode(Token('1', TokenType.INTEGER)) ]) ]) ])) self.assertEqual(build('2*((1+3)/2+1)'), node.ProgramNode(subs=[ node.OpNode(Token('*', TokenType.OPERATOR), [ node.ValueNode(Token('2', TokenType.INTEGER)), node.OpNode(Token('+', TokenType.OPERATOR), [ node.OpNode(Token('/', TokenType.OPERATOR), [ node.OpNode(Token('+', TokenType.OPERATOR), [ node.ValueNode(Token('1', TokenType.INTEGER)), node.ValueNode(Token('3', TokenType.INTEGER)) ]), node.ValueNode(Token('2', TokenType.INTEGER)) ]), node.ValueNode(Token('1', TokenType.INTEGER)) ]) ]) ])) self.assertEqual(build('2*10**2*2'), node.ProgramNode(subs=[ node.OpNode(Token('*', TokenType.OPERATOR), [ node.ValueNode(Token('2', TokenType.INTEGER)), node.OpNode(Token('*', TokenType.OPERATOR), [ node.OpNode(Token('**', TokenType.OPERATOR), [ node.ValueNode(Token('10', TokenType.INTEGER)), node.ValueNode(Token('2', TokenType.INTEGER)) ]), node.ValueNode(Token('2', TokenType.INTEGER)) ]) ]) ]))
def test_paren(self): self.assertEqual(parse('2*((1+3)/2+1)'), [ Token('2', TokenType.INTEGER), Token('*', TokenType.OPERATOR), Token('(', TokenType.PAREN), Token('(', TokenType.PAREN), Token('1', TokenType.INTEGER), Token('+', TokenType.OPERATOR), Token('3', TokenType.INTEGER), Token(')', TokenType.PAREN), Token('/', TokenType.OPERATOR), Token('2', TokenType.INTEGER), Token('+', TokenType.OPERATOR), Token('1', TokenType.INTEGER), Token(')', TokenType.PAREN), ])
def test_numeric_expression(self): self.assertEqual(parse('1+1'), [ Token('1', TokenType.INTEGER), Token('+', TokenType.OPERATOR), Token('1', TokenType.INTEGER), ]) self.assertEqual(parse('+-3.14 + 1'), [ Token('+', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('3.14', TokenType.REAL), Token('+', TokenType.OPERATOR), Token('1', TokenType.INTEGER), ]) self.assertEqual(parse('1+++--2.2---+1'), [ Token('1', TokenType.INTEGER), Token('+', TokenType.OPERATOR), Token('+', TokenType.OPERATOR), Token('+', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('2.2', TokenType.REAL), Token('-', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('-', TokenType.OPERATOR), Token('+', TokenType.OPERATOR), Token('1', TokenType.INTEGER), ]) self.assertEqual(parse('10**2'), [ Token('10', TokenType.INTEGER), Token('**', TokenType.OPERATOR), Token('2', TokenType.INTEGER) ]) self.assertEqual(parse('2*10**2*2'), [ Token('2', TokenType.INTEGER), Token('*', TokenType.OPERATOR), Token('10', TokenType.INTEGER), Token('**', TokenType.OPERATOR), Token('2', TokenType.INTEGER), Token('*', TokenType.OPERATOR), Token('2', TokenType.INTEGER) ])