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_2(self): # DECLARE count on the line is larger than 1 file_handler = open(glb_input_filename, "w") file_handler.write( "'DECLARE x(): " + glb_new_line_symbol) file_handler.write( "'DECLARE y(): DECLARE y(): DECLARE y(): " + glb_new_line_symbol) file_handler.write( "DECLARE z(a): DECLARE z(b): " + glb_new_line_symbol) file_handler.write( "DECLARE w(a): 'DECLARE w(): " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [1]) self.assertEqual({'w': { 'line': 6, 'parameters': ['a'] }}, a_dictionary["declares"])
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_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_4(self): # duplicated procedure declaration - uniqueness file_handler = open(glb_input_filename, "w") file_handler.write( "DECLARE z(a): " + glb_new_line_symbol) file_handler.write( "DECLARE z(): " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [6]) self.assertEqual({'z': { 'line': 3, 'parameters': ['a'] }}, a_dictionary["declares"])
def test_scenario_1(self): # DECLARE identifier is defined first file_handler = open(glb_input_filename, "w") file_handler.write( "DECLARE _x(): " + glb_new_line_symbol) file_handler.write( "LET _x: " + glb_new_line_symbol) file_handler.write( "_x: " + glb_new_line_symbol) file_handler.close() # a_dictionary = initialise_a_reference_dictionary() an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) # an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [glb_no_error_code]) self.assertEqual({'_x': { 'line': 2, 'parameters': [] }}, a_dictionary["declares"]) # an_error_list = prepare_variables_references( glb_input_filename, glb_output_filename, a_dictionary, an_available_numeric_references_list, an_available_string_references_list) self.assertEqual(an_error_list, [glb_error_declare_duplicate_identifier]) self.assertEqual({}, a_dictionary["variables"]) # an_error_list = prepare_goto_and_gosub_references( glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [glb_error_declare_duplicate_identifier]) self.assertEqual({}, a_dictionary["gotogosub"])
def test_scenario_1(self): # file is empty, file has empty lines, file has lines with only spaces, file has no procedures declared 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_output_filename, a_dictionary) self.assertEqual(an_error_list, [0]) self.assertEqual({}, a_dictionary["declares"])
def test_scenario_7(self): # missing parameters file_handler = open(glb_input_filename, "w") file_handler.write( "DECLARE x (v1, v1): " + glb_new_line_symbol) file_handler.write( "DECLARE y (v2$, v2$): " + glb_new_line_symbol) file_handler.write( "DECLARE z (v1, v2$): " + glb_new_line_symbol) file_handler.write( "DECLARE w (): " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [4, 4]) self.assertEqual( { 'x': { 'line': 3, 'parameters': ['v1'] }, 'y': { 'line': 6, 'parameters': ['v2$'] }, 'z': { 'line': 9, 'parameters': ['v1', 'v2$'] }, 'w': { 'line': 11, 'parameters': [] } }, a_dictionary["declares"])
def test_scenario_5(self): # maximum number of parameters exceeded file_handler = open(glb_input_filename, "w") file_handler.write( "DECLARE x (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11): " + glb_new_line_symbol) file_handler.write( "DECLARE y (v1, v2, v3, v4, v5, v6$, v7, v8, v9, v10): " + glb_new_line_symbol) file_handler.write( "DECLARE z (v1): " + glb_new_line_symbol) file_handler.write( "DECLARE w (): " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list, [5]) self.assertEqual( { 'y': { 'line': 4, 'parameters': [ 'v1', 'v2', 'v3', 'v4', 'v5', 'v6$', 'v7', 'v8', 'v9', 'v10' ] }, 'z': { 'line': 7, 'parameters': ['v1'] }, 'w': { 'line': 9, 'parameters': [] } }, a_dictionary["declares"])
def test_scenario_3(self): # Syntax errors file_handler = open(glb_input_filename, "w") file_handler.write( " DECLARE x(): " + glb_new_line_symbol) file_handler.write( " DECLARE x ( ) : " + glb_new_line_symbol) file_handler.write( "some code: DECLARE z(x) ' DECLARE z ( x ) " + glb_new_line_symbol) file_handler.write( "some code: DECLARE z(x): ' DECLARE z ( x ) " + glb_new_line_symbol) file_handler.write( "DECLARE " + glb_new_line_symbol) file_handler.write( "DECLARE a_name " + glb_new_line_symbol) file_handler.write( "DECLARE a_name( " + glb_new_line_symbol) file_handler.write( "DECLARE a_name ( " + glb_new_line_symbol) file_handler.write( "DECLARE a_name) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name ) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name_1(x) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name_1b )x( " + glb_new_line_symbol) file_handler.write( "DECLARE a_name_2 (x) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name_3 ( x ) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name 4(a) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name 5 (a) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name6(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name7(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) " + glb_new_line_symbol) file_handler.write( "DECLARE a_name7 4 (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) " + glb_new_line_symbol) file_handler.write( " DECLARE a_name8 (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_error_list = process_procedure_declaration(glb_input_filename, glb_output_filename, a_dictionary) self.assertEqual( an_error_list, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]) self.assertEqual({}, a_dictionary["declares"])
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.")