| #!/usr/bin/env python3 | |
| import sys | |
| import setup_test | |
| import libxml2 | |
| # Memory debug specific | |
| libxml2.debugMemory(1) | |
| def check_regex(regex, inside, outside): | |
| re = libxml2.regexpCompile(regex) | |
| for c in inside: | |
| if re.regexpExec(c) != 1: | |
| print("error checking inside", repr(regex), repr(c)) | |
| sys.exit(1) | |
| for c in outside: | |
| if re.regexpExec(c) != 0: | |
| print("error checking outside", repr(regex), repr(c)) | |
| sys.exit(1) | |
| if re.regexpIsDeterminist() != 1: | |
| print("error checking determinism") | |
| sys.exit(1) | |
| del re | |
| check_regex("a|b", "ab", ["ab", ""]) | |
| # https://gitlab.gnome.org/GNOME/libxml2/-/issues/1086 | |
| check_regex(r"[\t-\r]", "\t\n\r", ["a", "(", ""]) | |
| check_regex("[\\t-\\r]", "\t\n\r", ["a", "(", ""]) | |
| check_regex(r"[\[-\]]", "[]\\", "Z^") | |
| check_regex(r"[\*-/]", "*+,-./", "()0") | |
| # Non-standard escape sequences | |
| check_regex(r"[\u0041-\u005A]", "ABCMYZ", ["a", "0", "[", ""]) | |
| check_regex(r"[\u0009\u0061-\u007A]", "\tabcmyz", ["A", "0", "{", "", "\n"]) | |
| check_regex(r"[\!-\%]", '!"#$%', ["&", " ", "a", ""]) | |
| check_regex(r"[\:-\>]", ':;<=>', ["?", "9", "@", ""]) | |
| # Memory debug specific | |
| libxml2.cleanupParser() | |
| if libxml2.debugMemory(1) == 0: | |
| print("OK") | |
| else: | |
| print("Memory leak %d bytes" % (libxml2.debugMemory(1))) |