def test_parse_nested_lua_table(self): lua_table_str = '{array = {65,23,5},dict = {mixed = {43,54.33,false,9,string = "value",},array = {3,6,4,},string = "value",},}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() # list1 list1 = dumped_dict['array'] self.assertTrue(type(list1) == list) self.assertEqual(list1[0], 65) self.assertEqual(list1[1], 23) self.assertEqual(list1[2], 5) # dict1 dict1 = dumped_dict['dict'] self.assertTrue(type(dict1) == dict) # dict2 in dict1 dict2 = dict1['mixed'] self.assertTrue(type(dict2) == dict) self.assertEqual(dict2[1], 43) self.assertEqual(dict2[2], 54.33) self.assertEqual(dict2[3], False) self.assertEqual(dict2['string'], 'value') # list2 in dict1 list2 = dict1['array'] self.assertTrue(type(list2) == list) self.assertEqual(list2[0], 3) self.assertEqual(list2[1], 6) self.assertEqual(list2[2], 4) self.assertEqual(dict1['string'], 'value')
def test_parse_num(self): lua_table_str = '{num = 100}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['num'], 100)
def test_parse_empty_lua_table(self): lua_table_str = '{}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertTrue(len(dumped_dict) == 0)
def test_parse_scientific_notation(self): lua_table_str = '{num = 12.34e5}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['num'], 12.34e5)
def test_parse_str_key_with_special_str3(self): lua_table_str = '{["ke\\"]y"] = 1}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['ke\"]y'], 1)
def test_parse_string_value(self): lua_table_str = '{empty = "", str = "a string."}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['empty'], '') self.assertEqual(dumped_dict['str'], 'a string.')
def test_parse_string_value_with_backslash(self): lua_table_str = '{backslash = "\\\\", controls = "\\b\\f\\n\\r\\t",}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['backslash'], '\\') self.assertEqual(dumped_dict['controls'], '\b\f\n\r\t')
def test_parse_float_number(self): lua_table_str = '{weight = 60.55, height = 170.}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['weight'], 60.55) self.assertEqual(dumped_dict['height'], 170.0)
def test_parse_str_key_with_any_charactors(self): lua_table_str = '{["\\"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"] = 1}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual( dumped_dict['"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?'], 1)
def test_parse_str_key_with_empty_str_key(self): lua_table_str = '{[""] = 1, [" "] = 2}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict[''], 1) self.assertEqual(dumped_dict[' '], 2)
def test_parse_string_value_with_escape_character(self): lua_table_str = '{empty = "\\"", str = "a string."}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['empty'], '\"') self.assertEqual(dumped_dict['str'], 'a string.')
def test_parse_list_with_nested_dict(self): lua_table_str = '{{}}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertTrue(type(dumped_dict) == list) self.assertTrue(type(dumped_dict[0]) == list) self.assertTrue(len(dumped_dict[0]) == 0)
def test_parse_num_key(self): lua_table_str = '{[-1] = "Python", [2] = "C++", [-99] = "PHP"}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict[-1], 'Python') self.assertEqual(dumped_dict[2], 'C++') self.assertEqual(dumped_dict[-99], 'PHP')
def test_parse_string_value_with_any_character(self): lua_table_str = '{empty = "\\\\\\"\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?", str = "a string."}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['empty'], '\\\"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?') self.assertEqual(dumped_dict['str'], 'a string.')
def test_parse_list_with_extra_blank_and_semicolon_fieldsep(self): lua_table_str = '{80, 90; 100}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertTrue(type(dumped_dict) == list) self.assertEqual(dumped_dict[0], 80) self.assertEqual(dumped_dict[1], 90) self.assertEqual(dumped_dict[2], 100)
def test_parse_list_end_with_comma(self): lua_table_str = '{80, 90, 100,}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertTrue(type(dumped_dict) == list) self.assertEqual(dumped_dict[0], 80) self.assertEqual(dumped_dict[1], 90) self.assertEqual(dumped_dict[2], 100)
def test_parse_signed_num(self): lua_table_str = '{positive_num = +100, negative_num = -100, positive_float_num = +100.55, negative_float_num = -100.0}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['positive_num'], 100) self.assertEqual(dumped_dict['negative_num'], -100) self.assertEqual(dumped_dict['positive_float_num'], 100.55) self.assertEqual(dumped_dict['negative_float_num'], -100.0)
def main(): while True: try: text = raw_input('lua>') except EOFError: break if not text: continue a1 = PyLuaTblParser() a1.load(text) print(a1.dump())
def test_parse_sstr_key_with_extra_blanks(self): lua_table_str = '{ _na_m4ef5 = 1, move_name = 2, myname50 = 3 , _temp = 4, a23b9 = 5}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertEqual(dumped_dict['_na_m4ef5'], 1) self.assertEqual(dumped_dict['move_name'], 2) self.assertEqual(dumped_dict['myname50'], 3) self.assertEqual(dumped_dict['_temp'], 4) self.assertEqual(dumped_dict['a23b9'], 5)
def test4(): print '.................... Test4' f = open('test4.txt', 'r') lines = f.readlines() p = PyLuaTblParser() count = 1 for line in lines: print '----------- line ' + str(count) + ' :' count += 1 if len(line) > 0 and line[0] == '#' or line.isspace(): print '... omitted' continue p.load(line) print p.dump() f.close()
def test_parse_nil_dict_and_remove_the_nil_item(self): lua_table_str = '{scores = {80, Math = 89.5, 72.5, nil, English = 99, 86.55, computer = nil}}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() scores = dumped_dict['scores'] self.assertTrue(type(scores) == dict) self.assertEqual(scores[1], 80) self.assertEqual(scores['Math'], 89.5) self.assertEqual(scores[2], 72.5) self.assertEqual(scores['English'], 99) self.assertEqual(scores[3], 86.55) self.assertFalse('computer' in scores.keys())
def test_parse_complicated_list(self): lua_table_str = '{80, 89.5, false, 72.5, "math", nil, nil, 99, true, 86.55, nil, "error", {}}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() self.assertTrue(type(dumped_dict) == list) self.assertEqual(dumped_dict[0], 80) self.assertEqual(dumped_dict[1], 89.5) self.assertEqual(dumped_dict[2], False) self.assertEqual(dumped_dict[3], 72.5) self.assertEqual(dumped_dict[4], "math") self.assertEqual(dumped_dict[5], None) self.assertEqual(dumped_dict[6], None) self.assertEqual(dumped_dict[7], 99) self.assertEqual(dumped_dict[8], True) self.assertEqual(dumped_dict[9], 86.55) self.assertEqual(dumped_dict[10], None) self.assertEqual(dumped_dict[11], "error") self.assertTrue(type(dumped_dict[12]) == list) # {} to []? self.assertTrue(len(dumped_dict[12]) == 0)
def test_parse_nested_list(self): lua_table_str = '{name = "Python", nested = {80, 89.5, false, 72.5, 99, true, 86.55}, weight = 60.55, height = 170., location = "sichuan"}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) dumped_dict = lua_table_parser.dumpDict() nested = dumped_dict['nested'] print nested self.assertTrue(type(nested) == list) self.assertEqual(nested[0], 80) self.assertEqual(nested[1], 89.5) self.assertEqual(nested[2], False) self.assertEqual(nested[3], 72.5) self.assertEqual(nested[4], 99) self.assertEqual(nested[5], True) self.assertEqual(nested[6], 86.55) self.assertEqual(dumped_dict['name'], 'Python') self.assertEqual(dumped_dict['weight'], 60.55) self.assertEqual(dumped_dict['height'], 170.0) self.assertEqual(dumped_dict['location'], 'sichuan')
, 3.1415926535897932384626433832795028841971693993751058209749445923 , 1066 ,"rosebud" }} ''' parser = PyLuaTblParser() #s1 = '{[97] = {{},{}},}' parser.load(testStr) print parser.dumpDict() # print parser.dumpLuaTable("table_test.lua") # # print PythonStrToStruct('''{ # # "array": [65, 23, 5], # # "dict": { # # "mixed": { # # 1: 43, # # 2: 54.33, # # 3: False, # # 4: 9, # # "string": "value" # # }, # # "null" : None, # # "array": [3, 6,4], # # "string": "value"
3, [45] = 11 --[[fdsaf--]], [''] = '', '' } } } ,,,}''' test_str = '''{\r\nroot = {\r\n\t"Test Pattern String",\r\n\t-- {"object with 1 member" = {"array with 1 element",},},\r\n\t{["object with 1 member"] = {"array with 1 element",},},\r\n\t{},\r\n\t[99] = -42,\r\n\t[98] = {{}},\r\n\t[97] = {{},{}},\r\n\t[96] = {{}, 1, 2, nil},\r\n\t[95] = {1, 2, {["1"] = 1}},\r\n\t[94] = { {["1"]=1, ["2"]=2}, {1, ["2"]=2}, ["3"] = 3 },\r\n\ttrue,\r\n\tfalse,\r\n\tnil,\r\n\t{\r\n\t\t["integer"]= 1234567890,\r\n\t\treal=-9876.543210,\r\n\t\te= 0.123456789e-12,\r\n\t\tE= 1.234567890E+34,\r\n\t\tzero = 0,\r\n\t\tone = 1,\r\n\t\tspace = " ",\r\n\t\tquote = "\\"",\r\n\t\tbackslash = "\\\\",\r\n\t\tcontrols = "\\b\\f\\n\\r\\t",\r\n\t\tslash = "/ & \\\\",\r\n\t\talpha= "abcdefghijklmnopqrstuvwyz",\r\n\t\tALPHA = "ABCDEFGHIJKLMNOPQRSTUVWYZ",\r\n\t\tdigit = "0123456789",\r\n\t\tspecial = "`1~!@#$%^&*()_+-={\':[,]}|;.</>?",\r\n\t\thex = "0x01230x45670x89AB0xCDEF0xabcd0xef4A",\r\n\t\t["true"] = true,\r\n\t\t["false"] = false,\r\n\t\t["nil"] = nil,\r\n\t\tarray = {nil, nil,},\r\n\t\tobject = { },\r\n\t\taddress = "50 St. James Street",\r\n\t\turl = "http://www.JSON.org/",\r\n\t\tcomment = "// /* <!-- --",\r\n\t\t["# -- --> */"] = " ",\r\n\t\t[" s p a c e d " ] = {1,2 , 3\r\n\r\n\t\t\t,\r\n\r\n\t\t\t4 , 5 , 6 ,7 },\r\n\t\t--[[[][][] Test multi-line comments\r\n\t\t\tcompact = {1,2,3,4,5,6,7},\r\n\t- -[luatext = "{\\"object with 1 member\\" = {\\"array with 1 element\\"}}",\r\n\t\tquotes = "" (0x0022) %22 0x22 034 "",\r\n\t\t["\\\\\\"\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"]\r\n\t\t= "A key can be any string"]]\r\n\t-- ]]\r\n\t\tcompact = {1,2,3,4,5,6,7},\r\n\t\tluatext = "{\\"object with 1 member\\" = {\\"array with 1 element\\"}}",\r\n\t\tquotes = "" (0x0022) %22 0x22 034 "",\r\n\t\t["\\\\\\"\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"]\r\n\t\t= "A key can be any string"\r\n\t},\r\n\t0.5 ,31415926535897932384626433832795028841971693993751058209749445923.\r\n\t,\r\n\t3.1415926535897932384626433832795028841971693993751058209749445923\r\n\t,\r\n\r\n\t1066\r\n\r\n\r\n\t,"rosebud"\r\n\r\n}} ''' a1 = PyLuaTblParser() a2 = PyLuaTblParser() a3 = PyLuaTblParser() a1.load(test_str) print a1.dump() d1 = a1.dumpDict() a2.loadDict(d1) a2.dumpLuaTable('output.txt') a3.loadLuaTable('output.txt') d3 = a3.dumpDict() print d1 == d3 print '\n' print d1 print '\n' print d3
parser.load(r''' {root = { "Test Pattern String", -- {"object with 1 member" = {"array with 1 element",},}, {["object with 1 member"] = {"array with 1 element",},}, {}, [99] = -42, [98] = {{}}, [97] = {{},{}}, [96] = {{}, 1, 2, nil}, [95] = {1, 2, {["1"] = 1}}, [94] = { {["1"]=1, ["2"]=2}, {1, ["2"]=2}, ["3"] = 3 }, true, false, nil, { ["integer"]= 1234567890, real=-9876.543210, e= 0.123456789e-12, E= 1.234567890E+34, zero = 0, one = 1, space = " ", quote = "\"", backslash = "\\", controls = "\b\f\n\r\t", slash = "/ & \\", alpha= "abcdefghijklmnopqrstuvwyz", ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWYZ", digit = "0123456789", special = "`1~!@#$%^&*()_+-={':[,]}|;.</>?", hex = "0x01230x45670x89AB0xCDEF0xabcd0xef4A", ["true"] = true, ["false"] = false, ["nil"] = nil, array = {nil, nil,}, object = { }, address = "50 St. James Street", url = "http://www.JSON.org/", comment = "// /* <!-- --", ["# -- -- --> */"] = " ", [" s p a c e d " ] = {1,2 , 3 , 4 , 5 , 6 ,7 }, --[[[][][] Test multi-line comments compact = {1,2,3,4,5,6,7}, - -[luatext = "{\"object with 1 member\" = {\"array with 1 element\"}}", quotes = "" (0x0022) %22 0x22 034 "", ["\\\"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"] = "A key can be any string"]] -- ]] compact = {1,2,3,4,5,6,7}, luatext = "{\"object with 1 member\" = {\"array with 1 element\"}}", quotes = "" (0x0022) %22 0x22 034 "", ["\\\"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"] = "A key can be any string" }, 0.5 ,31415926535897932384626433832795028841971693993751058209749445923. , 3.1415926535897932384626433832795028841971693993751058209749445923 , 1066 ,"rosebud" }} ''')
test_str7 = '{ "x";[4] = "y"; x = 1;"sd", [30] = 23; 45 }' test_str9 = '{ [ \t"\\ abc" ] = 123,[123]=2,[abcd]="abcd", xx =1}' test_str = [ test_str1, test_str2, test_str3, test_str4, test_str5, test_str6, test_str0, ] s1 = "\\\"\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" s2 = '\\"' test_str10 = '{["\\"--asd"] = 1 --asd\n 123}' test_str = [test_str10] #bug1= '{special = "`1~!@#$%^&*()_+-={':[,]}|;.</>?",hex = "a",}' lua_table_str = '{scores = {80, Math = 89.5, 72.5, nil, English = 99, 86.55, computer = nil}}' lua_table_parser = PyLuaTblParser() lua_table_parser.load(lua_table_str) #lua_table_parser.loadLuaTable('lua2.lua') #lua_table_parser.loadLuaTable('rawluatable.lua') print lua_table_parser.dumpDict()
test_str22 = "{}" test_str23 = "{['1'] = nil, 'hello', 123, nil, [':['] = nil, 'world'}" test_str24 = r"""{[1]="i am \n ok"} """ test_str25 = "{true1=1}" test_str26 = r"""{["\"s\""]=2}""" test_str27 = r"""{[1]={[2]={a="3",b="4",c='\"s\"'}}}""" test_str28 = r"""{a={b="\uabcd\n\r\t'"}}""" test_str29 = r"""{a='\"c'}""" test_str30 = r"""{['/\\"\x08\x0c\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?'] = "test"}""" test_str31 = r"""{1,2 --df ,"dfdf"}""" test_str32 = "{nil,nil,nil}" test_str33 = "{a={a={'12\/3','1231'}}}" test_str34 = r"""{["1"]=nil,"hello",123,nil,"world"}""" test_str35 = "{'c',[1]=2}" test_str36 = r"""{["array with nil"] = {nil,nil,[3] = 3.14,nil,nil,key = 183}}""" test_str37 = "{1,2,nil,4}" test_str38 = "{[1]=1,nil,a=3}" pyt.load(test_str30) #pyt.loadDict(d) #pyt.loadDict(d2) #print d2 res = pyt.dumpDict() print res #pyt.loadLuaTable("luaTable.txt") #d = pyt.dumpDict() #print d pyt.dumpLuaTable("dumpLuaTable.txt")
from PyLuaTblParser import * lua_table_str = '{array = {65,23,5,},["dict"] = {mixed = {43,54.33,false,9,string = "value",},array = {3,6,4,};string = "value",},}' Parser1 = PyLuaTblParser() Parser1.load(lua_table_str) parsed_lua_table1 = Parser1.dumpDict() print parsed_lua_table1 Parser2 = PyLuaTblParser() Parser2.loadDict(parsed_lua_table1) parsed_lua_table2 = Parser2.dumpDict() print parsed_lua_table2 Parser1.dumpLuaTable("lua_table.lua") Parser2.dumpLuaTable("lua_table.lua") Parser1.loadLuaTable("lua_table.lua") parsed_lua_table3 = Parser1.dumpDict() print parsed_lua_table3 Parser3 = PyLuaTblParser() Parser3.loadLuaTable("rawluatable.lua") Parser3.dumpLuaTable('testcase.lua') Parser3.loadLuaTable('testcase.lua') Parser3.dumpLuaTable('testcase.lua')
def test1(): print '.................... Test1 load and dump :' p = PyLuaTblParser() s0 = '{[\'232\'] = {}}' print '... load s0' p.load(s0) print '... dump' print p.dump() s1 = '{[\'array\'] = {65, 23, 5,}}' print '... load s1' p.load(s1) print '... dump' print p.dump() s2 = '{"Sunday", "Monday", "Tuesday", \'Wednesday\', "Thursday", "Friday", "Saturday"}' print '... load s2' p.load(s2) print '... dump' print p.dump() print p[1] # print p[0] s3 = '{x=0,y=1,[3]=2}' print '... load s3' p.load(s3) print '... dump' print p.dump() print p[3] s4 = '{array = {65,23,5,},dict = {mixed = {43,54.33,false,9,string = "value",},array = {3,6,4,},string = "value",},}' print '... load s4' p.load(s4) print '... dump' print p.dump() s5 = '{color="blue", thickness=2, npoints=4,\ {x=0, y=0},\ {x=-10, y=0},\ {x=-10, y=1},\ {x=0, y=1}\ }' print '... load s5' p.load(s5) print '... dump' print p.dump() p = PyLuaTblParser() s6 = '{["x"]=0, ["y"]=0}' print '... load s6' p.load(s6) print '... dump' print p.dump() s7 = '{x=10, y=45; "one", "two", "three"}' print '... load s7' p.load(s7) print '... dump' print p.dump() # Test tables with 'nil' s8 = '{x=nil, y = 0, z=nil, nil}' print '... load s8' p.load(s8) print '... dump' print p.dump() # Test tables with 'nil' s8 = '{nil, 0, nil, 1}' print '... load s8' p.load(s8) print '... dump' print p.dump() print p[1], p[2], p[3], p[4] s9 = '{["x"]="{", ["y"]="}"}' print '... load s9' p.load(s9) print '... dump' print p.dump()