def test_scenario_2(self):
     # CALL count on the line is larger than 1
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE z(a):                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL z(a): 'CALL z(a):  CALL z(a):                                                        "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL z(a): CALL z(b):                                                                     "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [50])
         self.assertEqual({'z': {
             'line': 3,
             'parameters': ['a']
         }}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_1(self):
     # file is empty, file has empty lines, file has lines with only spaces, file has no procedures being called
     file_handler = open(glb_input_filename, "w")
     file_handler.write("")
     file_handler.write(glb_new_line_symbol)
     file_handler.write(
         "                                                                                          "
         + glb_new_line_symbol)
     file_handler.write(
         "some code: some code: some code: some code                                                "
         + glb_new_line_symbol)
     file_handler.write(
         "some code: 'some code: some code: some code                                               "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [0])
         self.assertEqual({}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_9(self):
     # expected numeric but parameter is string
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE x ( b ):                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (\"A\")                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x ( a$ )                                                                              "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x ( 123 )                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x ( a )                                                                               "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [56, 56])
         self.assertEqual({'x': {
             'line': 3,
             'parameters': ['b']
         }}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_7(self):
     # parameters missing
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE x(a,b):                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (v1, )                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (,v2)                                                                              "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [57, 57])
         self.assertEqual({'x': {
             'line': 3,
             'parameters': ['a', 'b']
         }}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_5(self):
     # maximum number of parameters exceeded
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE x(a,b):                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)                                      "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)                                     "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (v1, , v3, v4, v5, v6, v7, v8, v9, v10, v11)                                       "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [52, 52, 52])
         self.assertEqual({'x': {
             'line': 3,
             'parameters': ['a', 'b']
         }}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_10(self):
     # valid calls
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE x ( b ):                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "DECLARE y ( b$ ):                                                                          "
         + glb_new_line_symbol)
     file_handler.write(
         "DECLARE z (p1, p2$, p3):                                                                   "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x ( 123 )                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x ( a )                                                                               "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL y (\"A\")                                                                             "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL y ( a$ )                                                                              "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL z ( a, b$, c )                                                                        "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL z ( 123, \"HELLO\", 456 )                                                             "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(an_error_list, [0])
         self.assertEqual(
             {
                 'x': {
                     'line': 3,
                     'parameters': ['b']
                 },
                 'y': {
                     'line': 6,
                     'parameters': ['b$']
                 },
                 'z': {
                     'line': 9,
                     'parameters': ['p1', 'p2$', 'p3']
                 }
             }, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")
 def test_scenario_3(self):
     # Syntax errors
     file_handler = open(glb_input_filename, "w")
     file_handler.write(
         "DECLARE x(a,b):                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "      CALL x(1,2                                                                          "
         + glb_new_line_symbol)
     file_handler.write(
         "    CALL x 1,2)                                                                           "
         + glb_new_line_symbol)
     file_handler.write(
         "    CALL (x 1,2)                                                                          "
         + glb_new_line_symbol)
     file_handler.write(
         "some code: CALL x(x, ' CALL z ( x )                                                       "
         + glb_new_line_symbol)
     file_handler.write(
         "some code: CALL x x,y): ' CALL z ( x )                                                    "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL                                                                                      "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x                                                                                    "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x(                                                                                   "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x)                                                                                   "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x )                                                                                  "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x (                                                                                  "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x )x(                                                                                "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x(10, 'A', t, my variable_1):                                                        "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x y z (10, 'A', t, my_variable_1):                                                   "
         + glb_new_line_symbol)
     file_handler.write(
         "CALL x.y.z (10, 'A', t, my_variable_1):                                                   "
         + glb_new_line_symbol)
     file_handler.close()
     a_dictionary = initialise_a_reference_dictionary()
     an_error_list = process_procedure_declaration(
         glb_input_filename, glb_intermediate_filename, a_dictionary)
     if an_error_list[0] == glb_no_error_code:
         an_error_list = process_procedure_calling(
             glb_intermediate_filename, glb_output_filename, a_dictionary)
         self.assertEqual(
             an_error_list,
             [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55])
         self.assertEqual({'x': {
             'line': 3,
             'parameters': ['a', 'b']
         }}, a_dictionary["declares"])
     else:
         self.fail("error on pre-condition method.")