updates to libsuvstkeyword. added test cases at the bottom.
svn: r16255
This commit is contained in:
		| @@ -31,7 +31,7 @@ pkgdata_PYTHON = \ | ||||
| 	libpersonview.py\ | ||||
| 	libplaceview.py\ | ||||
| 	libplugins.gpr.py\ | ||||
| 	libsubstkeyword\ | ||||
| 	libsubstkeyword.py\ | ||||
| 	libtranslate.py | ||||
|  | ||||
| pkgpyexecdir = @pkgpyexecdir@/plugins/lib | ||||
|   | ||||
| @@ -167,7 +167,7 @@ class NameFormat(GenericFormat): | ||||
|                     name.get_nick_name,       #n | ||||
|                     common,                   #x | ||||
|                     name.get_suffix,          #s | ||||
|                     name. get_surname,        #l | ||||
|                     name.get_surname,         #l | ||||
|                     name.get_family_nick_name #g | ||||
|                     ] | ||||
|          | ||||
| @@ -1134,3 +1134,274 @@ class SubstKeywords(object): | ||||
| #In everything I did, I showed you that by this kind of hard work | ||||
| #we must help the weak, remembering the words the Lord Jesus himself | ||||
| #said: 'It is more blessed to give than to receive.' | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| # For Testing everything except VariableParse, SubstKeywords and EventFormat | ||||
| # apply it as a script: | ||||
| # | ||||
| #     ==> in command line do "PYTHONPATH=??? python libsubstkeyword.py" | ||||
| # | ||||
| # You will need to put in your own path to the src directory | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
|  | ||||
|     def combinations(c, r): | ||||
|         # combinations('ABCD', 2) --> AB AC AD BC BD CD | ||||
|         # combinations(range(4), 3) --> 012 013 023 123 | ||||
|         pool = tuple(range(c)) | ||||
|         n = len(pool) | ||||
|         if r > n: | ||||
|             return | ||||
|         indices = range(r) | ||||
|         yield tuple(pool[i] for i in indices) | ||||
|         while True: | ||||
|             for i in reversed(range(r)): | ||||
|                 if indices[i] != i + n - r: | ||||
|                     break | ||||
|             else: | ||||
|                 return | ||||
|             indices[i] += 1 | ||||
|             for j in range(i+1, r): | ||||
|                 indices[j] = indices[j-1] + 1 | ||||
|             yield tuple(pool[i] for i in indices) | ||||
|  | ||||
|     def main_level_test(_in, testing_class, testing_what): | ||||
|         """This is a mini def __main_level(self): | ||||
|         """ | ||||
|         main = LevelParse(_in) | ||||
|         sepa = SeparatorParse(_in) | ||||
|         test = testing_class(_in) | ||||
|          | ||||
|         while _in.this: | ||||
|             if main.is_a(): | ||||
|                 main.parse_format(_in) | ||||
|             elif sepa.is_a(): | ||||
|                 sepa.parse_format(main) | ||||
|             elif _in.this == "$": | ||||
|                 _in.step() | ||||
|                 main.add_variable( | ||||
|                     test.parse_format(testing_what)) | ||||
|             else: | ||||
|                 _in.parse_format(main) | ||||
|  | ||||
|         main.combine_all() | ||||
|  | ||||
|         state, line = main.get_string() | ||||
|         if state is TXT.remove: | ||||
|             return None | ||||
|         else: | ||||
|             return line | ||||
|  | ||||
|  | ||||
|     from gen.lib.date import Date | ||||
|     y_or_n = () | ||||
|     date_to_test = Date() | ||||
|     def date_set(): | ||||
|         date_to_test.set_yr_mon_day( | ||||
|             1970 if 0 in y_or_n else 0, | ||||
|             9 if 1 in y_or_n else 0, | ||||
|             3 if 2 in y_or_n else 0 | ||||
|             ) | ||||
|         #print date_to_test | ||||
|      | ||||
|     line_in = "<Z>$ <a>$(<Z>yyy)<b>$(mm){<c>$(d)}{<d>$(yyyy)<e>}<f>$(yy)" | ||||
|     consume_str = ConsumableString(line_in) | ||||
|      | ||||
|     print line_in | ||||
|     print "#None are known" | ||||
|     tmp = main_level_test(consume_str, DateFormat, date_to_test) | ||||
|     print tmp | ||||
|     print "Good" if tmp == " " else "!! bad !!" | ||||
|  | ||||
|      | ||||
|     print | ||||
|     print | ||||
|     print "#One is known" | ||||
|     answer = [] | ||||
|     for y_or_n in combinations(3, 1): | ||||
|         date_set() | ||||
|         consume_str = ConsumableString(line_in) | ||||
|         tmp = main_level_test(consume_str, DateFormat, date_to_test) | ||||
|         print tmp | ||||
|         answer.append(tmp) | ||||
|     print "Good" if answer == [ | ||||
|         "1970 a1970d1970f70", | ||||
|         "0-09-00 b09", | ||||
|         "0-00-03 c3" | ||||
|         ] else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "#Two are known" | ||||
|     answer = [] | ||||
|     for y_or_n in combinations(3, 2): | ||||
|         date_set() | ||||
|         consume_str = ConsumableString(line_in) | ||||
|         tmp = main_level_test(consume_str, DateFormat, date_to_test) | ||||
|         print tmp | ||||
|         answer.append(tmp) | ||||
|     print "Good" if answer == [ | ||||
|         "1970-09-00 a1970b09d1970f70", | ||||
|         "1970-00-03 a1970c3d1970f70", | ||||
|         "0-09-03 b09c3" | ||||
|         ] else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "#All are known" | ||||
|     answer = [] | ||||
|     y_or_n = (0,1,2) | ||||
|     date_set() | ||||
|     consume_str = ConsumableString(line_in) | ||||
|     tmp = main_level_test(consume_str, DateFormat, date_to_test) | ||||
|     print tmp | ||||
|     answer.append(tmp) | ||||
|     print "Good" if answer == ["1970-09-03 a1970b09c3d1970f70" | ||||
|         ] else "!! bad !!" | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "=============" | ||||
|     print "=============" | ||||
|  | ||||
|     from gen.lib.name import Name | ||||
|     y_or_n = () | ||||
|     name_to_test = Name() | ||||
|     def name_set(): | ||||
|         #code  = "tfcnxslg" | ||||
|         name_to_test.set_call_name("Bob" if 0 in y_or_n else "") | ||||
|         name_to_test.set_title("Dr." if 1 in y_or_n else "") | ||||
|         name_to_test.set_first_name("Billy" if 2 in y_or_n else "") | ||||
|         name_to_test.set_nick_name("Buck" if 3 in y_or_n else "") | ||||
|         name_to_test.set_suffix("IV" if 4 in y_or_n else "") | ||||
|         #now can we put something in for the last name? | ||||
|         name_to_test.set_family_nick_name("The Clubs" if 5 in y_or_n else "") | ||||
|      | ||||
|     line_in = "{$(c)$(t)<1>{<2>$(f)}{<3>$(n){<0> <0>}<4>$(x)}$(s)<5>$(l)<6>$(g)<0>" | ||||
|     consume_str = ConsumableString(line_in) | ||||
|      | ||||
|     print | ||||
|     print | ||||
|     print line_in | ||||
|     print "#None are known" | ||||
|     tmp = main_level_test(consume_str, NameFormat, name_to_test) | ||||
|     print tmp | ||||
|     print "Good" if tmp == None else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "#Two are known" | ||||
|     answer = [] | ||||
|     for y_or_n in combinations(6, 2): | ||||
|         name_set() | ||||
|         consume_str = ConsumableString(line_in) | ||||
|         tmp = main_level_test(consume_str, NameFormat, name_to_test) | ||||
|         print tmp | ||||
|         answer.append(tmp) | ||||
|     print "Good" if answer == [ | ||||
|         "BobDr.4Bob", | ||||
|         "Bob2Billy4Bob", | ||||
|         "Bob3Buck4Bob", | ||||
|         "Bob4BobIV", | ||||
|         "Bob4BobThe Clubs", | ||||
|         "Dr.2Billy4Billy", | ||||
|         "Dr.3Buck", | ||||
|         "Dr.1IV", | ||||
|         "Dr.6The Clubs", | ||||
|         "Billy3Buck4Billy", | ||||
|         "Billy4BillyIV", | ||||
|         "Billy4BillyThe Clubs", | ||||
|         "BuckIV", | ||||
|         "BuckThe Clubs", | ||||
|         "IV6The Clubs" | ||||
|         ] else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "#All are known" | ||||
|     y_or_n = (0,1,2,3,4,5) | ||||
|     name_set() | ||||
|     consume_str = ConsumableString(line_in) | ||||
|     answer = main_level_test(consume_str, NameFormat, name_to_test) | ||||
|     print answer | ||||
|     print "Good" if answer == "BobDr.2Billy3Buck4BobIV6The Clubs" \ | ||||
|                             else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "=============" | ||||
|     print "=============" | ||||
|  | ||||
|     from gen.lib.place import Place | ||||
|     y_or_n = () | ||||
|     place_to_test = Place() | ||||
|     def place_set(): | ||||
|         #code = "elcuspnitxy" | ||||
|         main_loc = place_to_test.get_main_location() | ||||
|         main_loc.set_street( | ||||
|             "Lost River Ave." if 0 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_locality( | ||||
|             "Second district" if 1 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_city( | ||||
|             "Arco" if 2 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_county( | ||||
|             "Butte" if 3 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_state( | ||||
|             "Idaho" if 4 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_postal_code( | ||||
|             "83213" if 5 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_country( | ||||
|             "USA" if 6 in y_or_n else "" | ||||
|         ) | ||||
|         main_loc.set_parish( | ||||
|             "St Anns" if 7 in y_or_n else "" | ||||
|         ) | ||||
|         place_to_test.set_title( | ||||
|             "Atomic City" if 8 in y_or_n else "" | ||||
|         ) | ||||
|         place_to_test.set_longitude( | ||||
|             "N43H38'5\"N" if 9 in y_or_n else "" | ||||
|         ) | ||||
|         place_to_test.set_latitude( | ||||
|             "W113H18'5\"W" if 10 in y_or_n else "" | ||||
|         ) | ||||
|      | ||||
|     #code = "txy" | ||||
|     line_in = "$(e)<1>{<2>$(l) <3> $(c)<4><0><5>{$(s)<6>$(p)<7>" + \ | ||||
|               "{<1>$(n)<2>}<3>$(i<0>)<4>}<5>$(t)<6>$(x)<7>}<8>$(y)" | ||||
|     consume_str = ConsumableString(line_in) | ||||
|      | ||||
|     print | ||||
|     print | ||||
|     print line_in | ||||
|     print "#None are known" | ||||
|     tmp = main_level_test(consume_str, PlaceFormat, place_to_test) | ||||
|     print tmp | ||||
|     print "Good" if tmp == "" else "!! bad !!" | ||||
|  | ||||
|  | ||||
|     print | ||||
|     print | ||||
|     print "#Three are known" | ||||
|     answer = [] | ||||
|     for y_or_n in combinations(11, 4): | ||||
|         place_set() | ||||
|         consume_str = ConsumableString(line_in) | ||||
|         tmp = main_level_test(consume_str, PlaceFormat, place_to_test) | ||||
|         print tmp | ||||
|         answer.append(tmp) | ||||
|     print " Looks Good to me!"  | ||||
		Reference in New Issue
	
	Block a user