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_1(self): # file is empty, file has empty lines, file has lines with only spaces, file has no variables being used 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_available_numeric_references = initialise_available_numeric_references_list( ) an_available_string_references = initialise_available_string_references_list( ) an_error_list = prepare_variables_references( glb_input_filename, glb_intermediate_filename, a_dictionary, an_available_numeric_references, an_available_string_references) if an_error_list[0] == glb_no_error_code: an_error_list = resolve_variables_references( glb_intermediate_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list[0], glb_no_error_code) self.assertEqual(an_error_list[1], 0) self.assertEqual({}, a_dictionary["variables"]) else: self.fail("error on pre-condition method.")
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_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_4(self): # know errors in the code file_handler = open(glb_input_filename, "w") file_handler.write( "LET x: " + glb_new_line_symbol) file_handler.write( 'PRINT "x" ' + glb_new_line_symbol) file_handler.write( 'PRINT "maximiliam had an x-man in his x-pocket full of x rays" ' + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_available_numeric_references = initialise_available_numeric_references_list( ) an_available_string_references = initialise_available_string_references_list( ) an_error_list = prepare_variables_references( glb_input_filename, glb_intermediate_filename, a_dictionary, an_available_numeric_references, an_available_string_references) if an_error_list[0] == glb_no_error_code: an_error_list = resolve_variables_references( glb_intermediate_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list[0], glb_no_error_code) self.assertEqual(an_error_list[1], 5) self.assertEqual({'x': 'AA'}, a_dictionary["variables"]) 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_1(self): # file is empty, file has empty lines, file has lines with only spaces, file has no variables defined an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) 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 = 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, [0]) self.assertEqual({}, a_dictionary["variables"])
def test_scenario_2(self): # lines include comments and empty lines file_handler = open(glb_input_filename, "w") file_handler.write( "LET x: " + glb_new_line_symbol) file_handler.write( " LET y: LET z: ' LET w : " + glb_new_line_symbol) file_handler.write( "' LET x: LET y: LET z: LET w : " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( " LET x$ : LET y$: LET z$ : LET w$: " + glb_new_line_symbol) file_handler.write( " ' LET a_very_long_name_with_0123 : LET a_very_long_name_with_0123$: " + glb_new_line_symbol) file_handler.write( " ' some code : some code : some code : LET abc : " + glb_new_line_symbol) file_handler.write( " LET p: LET p$ " + glb_new_line_symbol) file_handler.write( "LET t : LET t$: " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_available_numeric_references = initialise_available_numeric_references_list( ) an_available_string_references = initialise_available_string_references_list( ) an_error_list = prepare_variables_references( glb_input_filename, glb_intermediate_filename, a_dictionary, an_available_numeric_references, an_available_string_references) if an_error_list[0] == glb_no_error_code: an_error_list = resolve_variables_references( glb_intermediate_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list[0], glb_no_error_code) self.assertEqual(an_error_list[1], 10) self.assertEqual( { 'x': 'AA', 'y': 'AB', 'z': 'AC', 'x$': 'AA$', 'y$': 'AB$', 'z$': 'AC$', 'w$': 'AD$', 'p': 'AD', 't': 'AE', 't$': 'AE$' }, a_dictionary["variables"]) else: self.fail("error on pre-condition method.")
def test_scenario_3(self): # easy examples file_handler = open(glb_input_filename, "w") file_handler.write( "LET x: " + glb_new_line_symbol) file_handler.write( "x = x + x - x * x / x + (x - x) " + glb_new_line_symbol) file_handler.write( "x = 1 + x " + glb_new_line_symbol) file_handler.write( "x=1+x " + glb_new_line_symbol) file_handler.write( "PRINT x " + glb_new_line_symbol) file_handler.write( "GOSUB x " + glb_new_line_symbol) file_handler.write( "GOTO x + 1 : GOSUB 1 + x: GOSUB x " + glb_new_line_symbol) file_handler.write( "GOTO 1 + x " + glb_new_line_symbol) file_handler.write( "DRAW(x, x, x, x) " + glb_new_line_symbol) file_handler.write( "PAINT(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,xy,yx,yxz,xyz,yzx, " + glb_new_line_symbol) file_handler.write( "ON x GOTO x " + glb_new_line_symbol) file_handler.write( "DRAW(x + x, x, xy, x, x, x, x, x,x,x x , x, x, x,xy,yx,yxz,xyz,yzx,xx,xxx,xxxx,x):x " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() an_available_numeric_references = initialise_available_numeric_references_list( ) an_available_string_references = initialise_available_string_references_list( ) an_error_list = prepare_variables_references( glb_input_filename, glb_intermediate_filename, a_dictionary, an_available_numeric_references, an_available_string_references) if an_error_list[0] == glb_no_error_code: an_error_list = resolve_variables_references( glb_intermediate_filename, glb_output_filename, a_dictionary) self.assertEqual(an_error_list[0], glb_no_error_code) self.assertEqual(an_error_list[1], 56) self.assertEqual({'x': 'AA'}, a_dictionary["variables"]) 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_2(self): # scenario - duplicated reference name - uniqueness file_handler = open(glb_input_filename, "w") file_handler.write("_correct1: " + glb_new_line_symbol) file_handler.write("some code " + glb_new_line_symbol) file_handler.write("_correct1: " + glb_new_line_symbol) file_handler.write("some code " + glb_new_line_symbol) file_handler.close() a_reference_dictionary = initialise_a_reference_dictionary() error_codes_list = prepare_goto_and_gosub_references(glb_input_filename, glb_output_filename, a_reference_dictionary) self.assertEqual(a_reference_dictionary["gotogosub"], {'_correct1': {'file_line': "1"}}) self.assertEqual(error_codes_list, [glb_error_gotogosub_duplicate_reference])
def test_scenario_6(self): # all valid an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) file_handler = open(glb_input_filename, "w") file_handler.write( "LET x: LET y: LET z: LET w : " + glb_new_line_symbol) file_handler.write( "LET x$ : LET y$: LET z$ : LET w$: " + glb_new_line_symbol) file_handler.write( "LET a_very_long_name_with_0123 : LET a_very_long_name_with_0123$: " + glb_new_line_symbol) file_handler.write( " some code : some code : some code : LET abc : " + glb_new_line_symbol) file_handler.write( "LET _a_valid_name: LET _a_valid_name$: " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() 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, [0]) self.assertEqual( { 'x': 'AA', 'y': 'AB', 'z': 'AC', 'w': 'AD', 'x$': 'AA$', 'y$': 'AB$', 'z$': 'AC$', 'w$': 'AD$', 'a_very_long_name_with_0123': 'AE', 'a_very_long_name_with_0123$': 'AE$', 'abc': 'AF', '_a_valid_name': 'AG', '_a_valid_name$': 'AF$' }, a_dictionary["variables"])
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_4(self): # uniqueness an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) file_handler = open(glb_input_filename, "w") file_handler.write( "LET x: LET x: " + glb_new_line_symbol) file_handler.write( "LET x$ : LET x$: " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() 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, [45, 45]) self.assertEqual({'x': 'AA', 'x$': 'AA$'}, a_dictionary["variables"])
def test_scenario_3(self): # invalid variables names an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) file_handler = open(glb_input_filename, "w") file_handler.write( "LET 0: LET 10: LET 200: LET 012345: " + glb_new_line_symbol) file_handler.write( "LET 0$ : LET 10$ : LET 200$ : LET 012345$: " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() 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, [46, 46, 46, 46, 46, 46, 46, 46]) self.assertEqual({}, a_dictionary["variables"])
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_1(self): # scenario 1 file_handler = open(glb_input_filename, "w") file_handler.write(glb_new_line_symbol) file_handler.write(" " + glb_new_line_symbol) file_handler.write("some code not related " + glb_new_line_symbol) file_handler.write("_invalid_reference : " + glb_new_line_symbol) file_handler.write("_invalid_reference : " + glb_new_line_symbol) file_handler.write("_invalid_reference " + glb_new_line_symbol) file_handler.write(" _invalid_reference : " + glb_new_line_symbol) file_handler.write("_ invalid_reference: " + glb_new_line_symbol) file_handler.write(" _ invalid_reference: " + glb_new_line_symbol) file_handler.write(" _ invalid_reference: " + glb_new_line_symbol) file_handler.write(" _ invalid_reference : " + glb_new_line_symbol) file_handler.write(" invalid_reference " + glb_new_line_symbol) file_handler.write("invalid_reference: " + glb_new_line_symbol) file_handler.write("invalid_reference : " + glb_new_line_symbol) file_handler.write("'_irrelevant: " + glb_new_line_symbol) file_handler.write("'_irrelevant: " + glb_new_line_symbol) file_handler.write("' _irrelevant " + glb_new_line_symbol) file_handler.write(" _correct: " + glb_new_line_symbol) file_handler.write("_correct1: " + glb_new_line_symbol) file_handler.write("_correct2:'some comment " + glb_new_line_symbol) file_handler.write("_correct3: 'some comment " + glb_new_line_symbol) file_handler.write("_correct4: some code " + glb_new_line_symbol) file_handler.write("_correct5: some code " + glb_new_line_symbol) file_handler.write("_correct5: some code 'duplicate " + glb_new_line_symbol) file_handler.write("some code: _invalid_reference: " + glb_new_line_symbol) file_handler.write("some code: _invalid_reference: " + glb_new_line_symbol) file_handler.close() a_reference_dictionary = initialise_a_reference_dictionary() error_codes_list = prepare_goto_and_gosub_references(glb_input_filename, glb_output_filename, a_reference_dictionary) print(a_reference_dictionary) self.assertEqual(a_reference_dictionary["gotogosub"], {'_correct': {'file_line': '18'}, '_correct1': {'file_line': '19'}, '_correct2': {'file_line': '20'}, '_correct3': {'file_line': '21'}, '_correct4': {'file_line': '22'}, '_correct5': {'file_line': '23'}}) self.assertEqual(error_codes_list, [10])
def test_scenario_5(self): # number of variables exceeded an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) an_available_numeric_references_list.clear() an_available_string_references_list.clear() file_handler = open(glb_input_filename, "w") file_handler.write( "LET y: " + glb_new_line_symbol) file_handler.write( "LET y$: " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() 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, [44, 43]) self.assertEqual({}, a_dictionary["variables"])
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_2(self): # not valid variables declarations an_available_numeric_references_list = initialise_available_numeric_references_list( ) an_available_string_references_list = initialise_available_string_references_list( ) file_handler = open(glb_input_filename, "w") file_handler.write( "LET " + glb_new_line_symbol) file_handler.write( "LET : LET : LET : LET : " + glb_new_line_symbol) file_handler.write( "LET : " + glb_new_line_symbol) file_handler.write( "LET x " + glb_new_line_symbol) file_handler.write( "LET 0 " + glb_new_line_symbol) file_handler.write( "LET ( " + glb_new_line_symbol) file_handler.write( "LET x " + glb_new_line_symbol) file_handler.write( "LET x$ " + glb_new_line_symbol) file_handler.write( "LET x + y " + glb_new_line_symbol) file_handler.write( "LET x, y, z: " + glb_new_line_symbol) file_handler.write( "LET x, y, z: LET x y z: LET z " + glb_new_line_symbol) file_handler.write( "LET x, y, z: LET x y z: LET z : " + glb_new_line_symbol) file_handler.write( "LET z " + glb_new_line_symbol) file_handler.write( "LET x, : " + glb_new_line_symbol) file_handler.write( "LET x, " + glb_new_line_symbol) file_handler.write( "LET x : LET y " + glb_new_line_symbol) file_handler.write( "LET z LET w : " + glb_new_line_symbol) file_handler.close() a_dictionary = initialise_a_reference_dictionary() 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, [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42]) self.assertEqual({ 'z': 'AA', 'x': 'AB', 'w': 'AC' }, a_dictionary["variables"])
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.")
def test_scenario_1(self): # scenario 1 file_handler = open(glb_input_filename, "w") file_handler.write(glb_new_line_symbol) file_handler.write( "PRINT:PRINT:PRINT: " + glb_new_line_symbol) file_handler.write( "_location_01: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "GOSUB_location_01: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "some code : GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "some code: GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "some code:GOSUB_location_01: " + glb_new_line_symbol) file_handler.write( "some code:GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "some code :GOSUB_location_01: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB location_01: " + glb_new_line_symbol) file_handler.write( "GOSUB location_01: " + glb_new_line_symbol) file_handler.write( "GOSUBlocation_01: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01 " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01 " + glb_new_line_symbol) file_handler.write( "GOSUB_location_01 " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB location_01 " + glb_new_line_symbol) file_handler.write( "GOSUB location_01 " + glb_new_line_symbol) file_handler.write( "GOSUBlocation_01 " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01: : GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( "GOSUB _location_01:: commands : GOSUB _location_01: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "_location_02: " + glb_new_line_symbol) file_handler.write( "_location_22: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB _location_23: " + glb_new_line_symbol) file_handler.write( "GOSUB " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "'GOSUB _location_22: " + glb_new_line_symbol) file_handler.write( "GOSUB _location_02: ' GOSUB _location_22: GOSUB _location_30:" + glb_new_line_symbol) file_handler.write( "GOSUB _location_02:GOSUB _location_22: ' GOSUB _location_30:" + glb_new_line_symbol) file_handler.write( "commands : GOSUB _location_02: commands ' GOSUB _location_22:" + glb_new_line_symbol) file_handler.write( "commands : GOSUB _location_02: commands :GOSUB _location_22: " + glb_new_line_symbol) file_handler.write( " " + glb_new_line_symbol) file_handler.write( "GOSUB_location_02::GOSUB_location_22::GOSUB _location_30: " + glb_new_line_symbol) file_handler.close() a_reference_dictionary = initialise_a_reference_dictionary() error_codes_list = prepare_goto_and_gosub_references( glb_input_filename, glb_output_filename, a_reference_dictionary) if error_codes_list[0] == glb_no_error_code: error_codes_list = resolve_gosub_references( glb_input_filename, glb_output_filename, a_reference_dictionary) self.assertEqual(error_codes_list, [31, 31]) else: self.fail("error on pre-condition method.")