File: cpp17_std_filesystem_runme.py

package info (click to toggle)
swig 4.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 45,980 kB
  • sloc: cpp: 54,284; ansic: 29,022; java: 17,595; python: 12,734; cs: 10,421; ruby: 7,263; yacc: 6,501; makefile: 5,860; javascript: 5,538; sh: 5,422; perl: 4,246; php: 3,733; ml: 2,198; tcl: 2,015; lisp: 1,448; xml: 115
file content (65 lines) | stat: -rw-r--r-- 2,319 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import pathlib

from cpp17_std_filesystem import *
from swig_test_utils import swig_assert, swig_check


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):
    swig_check(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))
swig_assert(not lines, "\n".join(lines))