示例#1
0
    def test_multiple_for(self):
        line = "530 NEXTI"
        results = tokenize_line(line)
        self.assertTrue(isinstance(results, ProgramLine))
        self.assertEqual(530, results.line)
        self.assertEqual(1, len(results.stmts))

        result = results.stmts[0]
        self.assertEqual(Keywords.NEXT, result.keyword)
        self.assertEqual('I', result.loop_var)

        line = "530 FORI=1TO9:C(I,1)=0:C(I,2)=37:NEXTI"
        results = tokenize_line(line)
        self.assertTrue(isinstance(results, ProgramLine))
        self.assertEqual(530, results.line)
        self.assertEqual(4, len(results.stmts))

        result = results.stmts[1]
        self.assertEqual(Keywords.LET, result.keyword)
        self.assertEqual([lexer_token(0, "num")], result._tokens)
        self.assertEqual("C(I,1)", result._variable)

        result = results.stmts[2]
        self.assertEqual(Keywords.LET, result.keyword)
        self.assertEqual([lexer_token(37, "num")], result._tokens)
        self.assertEqual("C(I,2)", result._variable)

        result = results.stmts[3]
        self.assertEqual(Keywords.NEXT, result.keyword)
        self.assertEqual('I', result.loop_var)
示例#2
0
 def test_tokenize_if(self):
     clause = "IF3<>2THENX=3"
     line = f"370 {clause}"
     results = tokenize_line(line)
     self.assertTrue(isinstance(results, ProgramLine))
     self.assertEqual(370, results.line)
     self.assertEqual(2, len(results.stmts))
示例#3
0
 def test_token_rem(self):
     line = "10 REM SUPER STARTREK - MAY 16,1978 - REQUIRES 24K MEMORY"
     results = tokenize_line(line)
     self.assertTrue(isinstance(results, ProgramLine))
     self.assertEqual(10, results.line)
     self.assertEqual(1, len(results.stmts))
     self.assertEqual(Keywords.REM, results.stmts[0].keyword)
     self.assertEqual("SUPER STARTREK - MAY 16,1978 - REQUIRES 24K MEMORY",
                      results.stmts[0].args)
示例#4
0
 def test_token_for(self):
     line = "820 FORI=1TO8"
     results = tokenize_line(line)
     self.assertTrue(isinstance(results, ProgramLine))
     self.assertEqual(820, results.line)
     self.assertEqual(1, len(results.stmts))
     self.assertEqual(Keywords.FOR, results.stmts[0].keyword)
     p = results.stmts[0]
     self.assertEqual("I", p._index_clause)
     self.assertEqual("1", p._start_clause)
     self.assertEqual("8", p._to_clause)
     self.assertEqual("1", p._step_clause)
示例#5
0
    def test_token_exp(self):
        multi_exp = "T=INT(RND(1)*20+20)*100:T0=T:T9=25+INT(RND(1)*10):D0=0:E=3000:E0=E"
        line = f"370 {multi_exp}"
        results = tokenize_line(line)
        self.assertTrue(isinstance(results, ProgramLine))
        self.assertEqual(370, results.line)
        self.assertEqual(6, len(results.stmts))
        expect = multi_exp.split(":")
        self.assertEqual(6, len(expect))
        for i in range(len(expect)):
            self.assertEqual(Keywords.LET, results.stmts[i].keyword)
            #self.assertEqual(expect[i], results.stmts[i].args)

        self.assertEqual([lexer_token(3000, "num")], results.stmts[4]._tokens)
示例#6
0
    def test_multiple(self):
        """
        Test multiple, colon separated statements on one line.
        :return:
        """
        line = '1460 PRINT"YOUR MISSION: BEGINS":PRINT"AND ENDS"'
        results = tokenize_line(line)
        self.assertTrue(isinstance(results, ProgramLine))
        self.assertEqual(1460, results.line)
        self.assertEqual(2, len(results.stmts))

        result = results.stmts[0]
        self.assertEqual(Keywords.PRINT, result.keyword)
        self.assertEqual('"YOUR MISSION: BEGINS"', result._outputs[0])

        result = results.stmts[1]
        self.assertEqual(Keywords.PRINT, result.keyword)
        self.assertEqual('"AND ENDS"', result._outputs[0])
示例#7
0
 def test_ne(self):
     line = '8675 IF LEN(A$)<>3THEN PRINT"ERROR":STOP'
     statements = tokenize_line(line)
     self.assertEqual(3, len(statements.stmts))
     self.assertEqual(ParsedStatementIf, type(statements.stmts[0]))