1 #include <msp/fs/path.h>
2 #include <msp/test/test.h>
7 class PathTests: public Test::RegisteredTest<PathTests>
12 static const char *get_name() { return "Path"; }
23 PathTests::PathTests()
25 add(&PathTests::empty, "Emptiness");
26 add(&PathTests::normalization, "Normalization");
27 add(&PathTests::concatenation, "Concatenation");
28 add(&PathTests::iterator_abs, "Iterator (absolute path)");
29 add(&PathTests::iterator_rel, "Iterator (relative path)");
30 add(&PathTests::indexing, "Indexing");
33 void PathTests::empty()
35 EXPECT(FS::Path().empty());
36 EXPECT(!FS::Path(".").empty());
39 void PathTests::normalization()
42 EXPECT_EQUAL(path.str(), "./foo");
44 EXPECT_EQUAL(path.str(), "./foo");
46 EXPECT_EQUAL(path.str(), "./foo");
48 EXPECT_EQUAL(path.str(), ".");
50 EXPECT_EQUAL(path.str(), "/foo");
52 EXPECT_EQUAL(path.str(), "/");
55 void PathTests::concatenation()
59 EXPECT_EQUAL(path.str(), "./foo");
61 EXPECT_EQUAL(path.str(), "./foo");
63 EXPECT_EQUAL(path.str(), "./foo/bar");
65 EXPECT_EQUAL(path.str(), "./quux");
67 EXPECT_EQUAL(path.str(), "/");
69 EXPECT_EQUAL(path.str(), "/");
72 void PathTests::iterator_abs()
74 FS::Path path("/foo/bar");
75 FS::Path::Iterator iter = path.begin();
76 EXPECT(iter==path.begin());
77 EXPECT_EQUAL(*iter, "/");
79 EXPECT_EQUAL(*iter, "foo");
81 EXPECT_EQUAL(*iter, "bar");
83 EXPECT(iter==path.end());
86 void PathTests::iterator_rel()
88 FS::Path path("./foo");
89 FS::Path::Iterator iter = path.begin();
90 EXPECT(iter==path.begin());
91 EXPECT_EQUAL(*iter, ".");
93 EXPECT_EQUAL(*iter, "foo");
95 EXPECT(iter==path.end());
98 void PathTests::indexing()
100 FS::Path path("/foo/bar");
101 EXPECT_EQUAL(path.size(), 3);
102 EXPECT_EQUAL(path[0], "/");
103 EXPECT_EQUAL(path[1], "foo");
104 EXPECT_EQUAL(path[-1], "bar");