from whileinterpreter import interpret
from test_loop_interpreter import LOOPInterpreterTest
import unittest


class WHILEInterpreterTest(LOOPInterpreterTest):
    def test_while_forbidden_identifier(self):
        with self.assertRaises(SyntaxError):
            interpret("LOOP x1 DO WHILE x1 != 0 DO x0:=x0+1 END END ")

    def test_while(self):
        self.assertEqual(interpret('x1:=1; WHILE x1 != 0 DO x0:=2; x1:=x1-1 END'), 2)
        self.assertEqual(interpret('WHILE x1 /= 0 DO x0:=1 END'), 0)
        self.assertEqual(interpret('WHILE x1 /= 0 DO WHILE x1 /= 0 DO x0:=2 END END'), 0)

    def test_while_non_zero(self):
        with self.assertRaises(SyntaxError):
            interpret("x1:= 1; WHILE x1 /= 1 DO x0:=2 END")
        with self.assertRaises(SyntaxError):
            interpret("x1:= 2; WHILE x1 /= 1 DO x0:=2 END")
        with self.assertRaises(SyntaxError):
            interpret("x1:= 1; WHILE x1 /= 0 DO WHILE x1 /= 1 DO x0:=2 END END")