| import pathlib |
| |
| from cpp17_std_filesystem import * |
| |
| |
| def check_flag(flag): |
| if not flag: |
| raise RuntimeError("Check failed") |
| |
| |
| def format_msg(p, p2): |
| return "'{p}' != '{p2}', repr(p)={r}, repr(p2)={r2}".format(p=p, p2=p2, r=repr(p), r2=repr(p2)) |
| |
| |
| def check(p, p2): |
| assert p == p2, format_msg(p, p2) |
| |
| |
| # Test the output typemap. The wrapped C++ functions |
| # makePath is expected to return a std::filesystem::path object |
| # (see li_std_filesystem.i). The output typemap should be in place to |
| # convert this std::filesystem::path object into a pathlib.Path object. |
| path = makePath("foo") |
| check_flag(isinstance(path, pathlib.Path)) |
| check(str(path), "foo") |
| |
| pathConstRef = makePathConstRef("foo") |
| check_flag(isinstance(pathConstRef, pathlib.Path)) |
| check(str(pathConstRef), "foo") |
| |
| # Each of these should return a reference to a wrapped |
| # std::filesystem::path object. |
| pathPtr = makePathPtr("foo") |
| check_flag(not isinstance(pathPtr, pathlib.Path)) |
| |
| pathRef = makePathRef("foo") |
| check_flag(not isinstance(pathRef, pathlib.Path)) |
| |
| # Now test various input typemaps. Each of the wrapped C++ functions |
| # (pathToStr, pathConstRefToStr) is expecting an argument of a |
| # different type (see li_std_filesystem.i). Typemaps should be in place to |
| # convert this pathlib.Path into the expected argument type. |
| check(pathToStr(path), "foo") |
| check(pathConstRefToStr(path), "foo") |
| |
| # Similarly, each of the input typemaps should know what to do with a string. |
| check(pathToStr("foo"), "foo") |
| check(pathConstRefToStr("foo"), "foo") |
| |
| # Similarly, each of the input typemaps should know what to do with a std::filesystem::path instance. |
| check(pathToStr(pathPtr), "foo") |
| check(pathConstRefToStr(pathPtr), "foo") |
| |
| specialPath = pathlib.Path("/家/屋") |
| roundTripped = roundTrip(specialPath) |
| roundTrippedSquared = roundTrip(roundTripped) |
| lines = [] |
| if specialPath != roundTripped: |
| lines.append("specialPath, roundTripped: " + format_msg(specialPath, roundTripped)) |
| if roundTripped != roundTrippedSquared: |
| lines.append("roundTripped, roundTrippedSquared: " + format_msg(roundTripped, roundTrippedSquared)) |
| if specialPath != roundTrippedSquared: |
| lines.append("specialPath, roundTrippedSquared: " + format_msg(specialPath, roundTrippedSquared)) |
| assert not lines, "\n".join(lines) |