Imported Upstream version 17.22.1
[platform/upstream/libzypp.git] / tests / zypp / Pathname_test.cc
1 #include <iostream>
2 #include <string>
3
4 #include <boost/test/unit_test.hpp>
5
6 #include "zypp/base/LogTools.h"
7 #include "zypp/Pathname.h"
8
9 using boost::unit_test::test_suite;
10 using boost::unit_test::test_case;
11
12 using namespace std;
13 using namespace zypp;
14
15 BOOST_AUTO_TEST_CASE(pathname_default_ctor)
16 {
17   Pathname p;
18
19   BOOST_CHECK_EQUAL(p.empty(),          true );
20   BOOST_CHECK_EQUAL(p.absolute(),       false );
21   BOOST_CHECK_EQUAL(p.relative(),       false );
22   BOOST_CHECK_EQUAL(p.dirname(),        "" );
23   BOOST_CHECK_EQUAL(p.basename(),       "" );
24   BOOST_CHECK_EQUAL(p.extension(),      "" );
25   BOOST_CHECK_EQUAL(p.absolutename(),   "" );
26   BOOST_CHECK_EQUAL(p.relativename(),   "" );
27 }
28
29 BOOST_AUTO_TEST_CASE(pathname_root)
30 {
31   Pathname p("/");
32
33   BOOST_CHECK_EQUAL(p.empty(),          false );
34   BOOST_CHECK_EQUAL(p.absolute(),       true );
35   BOOST_CHECK_EQUAL(p.relative(),       false );
36   BOOST_CHECK_EQUAL(p.dirname(),        "/" );
37   BOOST_CHECK_EQUAL(p.basename(),       "/" );
38   BOOST_CHECK_EQUAL(p.extension(),      "" );
39   BOOST_CHECK_EQUAL(p.absolutename(),   "/" );
40   BOOST_CHECK_EQUAL(p.relativename(),   "./" );
41 }
42
43 BOOST_AUTO_TEST_CASE(pathname_this)
44 {
45   Pathname p(".");
46
47   BOOST_CHECK_EQUAL(p.empty(),          false );
48   BOOST_CHECK_EQUAL(p.absolute(),       false );
49   BOOST_CHECK_EQUAL(p.relative(),       true );
50   BOOST_CHECK_EQUAL(p.dirname(),        "." );
51   BOOST_CHECK_EQUAL(p.basename(),       "." );
52   BOOST_CHECK_EQUAL(p.extension(),      "" );
53   BOOST_CHECK_EQUAL(p.absolutename(),   "/" );
54   BOOST_CHECK_EQUAL(p.relativename(),   "." );
55 }
56
57 BOOST_AUTO_TEST_CASE(pathname_up)
58 {
59   Pathname p("..");
60
61   BOOST_CHECK_EQUAL(p.empty(),          false );
62   BOOST_CHECK_EQUAL(p.absolute(),       false );
63   BOOST_CHECK_EQUAL(p.relative(),       true );
64   BOOST_CHECK_EQUAL(p.dirname(),        "." );
65   BOOST_CHECK_EQUAL(p.basename(),       ".." );
66   BOOST_CHECK_EQUAL(p.extension(),      "" );
67   BOOST_CHECK_EQUAL(p.absolutename(),   "/" );
68   BOOST_CHECK_EQUAL(p.relativename(),   ".." );
69 }
70
71 BOOST_AUTO_TEST_CASE(pathname_abs)
72 {
73   Pathname p("/foo/baa.ka");
74
75   BOOST_CHECK_EQUAL(p.empty(),          false );
76   BOOST_CHECK_EQUAL(p.absolute(),       true );
77   BOOST_CHECK_EQUAL(p.relative(),       false );
78   BOOST_CHECK_EQUAL(p.dirname(),        "/foo" );
79   BOOST_CHECK_EQUAL(p.basename(),       "baa.ka" );
80   BOOST_CHECK_EQUAL(p.extension(),      ".ka" );
81   BOOST_CHECK_EQUAL(p.absolutename(),   "/foo/baa.ka" );
82   BOOST_CHECK_EQUAL(p.relativename(),   "./foo/baa.ka" );
83 }
84
85 BOOST_AUTO_TEST_CASE(pathname_rel)
86 {
87   Pathname p("./foo/./../baa.ka");
88
89   BOOST_CHECK_EQUAL(p.empty(),          false );
90   BOOST_CHECK_EQUAL(p.absolute(),       false );
91   BOOST_CHECK_EQUAL(p.relative(),       true );
92   BOOST_CHECK_EQUAL(p.dirname(),        "." );
93   BOOST_CHECK_EQUAL(p.basename(),       "baa.ka" );
94   BOOST_CHECK_EQUAL(p.extension(),      ".ka" );
95   BOOST_CHECK_EQUAL(p.absolutename(),   "/baa.ka" );
96   BOOST_CHECK_EQUAL(p.relativename(),   "./baa.ka" );
97 }
98
99 BOOST_AUTO_TEST_CASE(pathname_relup)
100 {
101   Pathname p("./../foo/./../baa");
102
103   BOOST_CHECK_EQUAL(p.empty(),          false );
104   BOOST_CHECK_EQUAL(p.absolute(),       false );
105   BOOST_CHECK_EQUAL(p.relative(),       true );
106   BOOST_CHECK_EQUAL(p.dirname(),        ".." );
107   BOOST_CHECK_EQUAL(p.basename(),       "baa" );
108   BOOST_CHECK_EQUAL(p.extension(),      "" );
109   BOOST_CHECK_EQUAL(p.absolutename(),   "/baa" );
110   BOOST_CHECK_EQUAL(p.relativename(),   "../baa" );
111 }
112
113 BOOST_AUTO_TEST_CASE(pathname_strval)
114 {
115   BOOST_CHECK_EQUAL(Pathname("").asString(),            "" );
116   BOOST_CHECK_EQUAL(Pathname("/////./").asString(),     "/" );
117   BOOST_CHECK_EQUAL(Pathname("./").asString(),          "." );
118   BOOST_CHECK_EQUAL(Pathname("/.").asString(),          "/" );
119   BOOST_CHECK_EQUAL(Pathname("./..").asString(),        "./.." );       // ? ..
120   BOOST_CHECK_EQUAL(Pathname("../").asString(),         "./.." );       // ? ..
121   BOOST_CHECK_EQUAL(Pathname(".././..").asString(),     "./../.." );    // ? ../..
122
123
124   BOOST_CHECK_EQUAL(Pathname("//baa").asString(),       "/baa" );
125   BOOST_CHECK_EQUAL(Pathname("/./baa").asString(),      "/baa" );
126   BOOST_CHECK_EQUAL(Pathname("/baa/..").asString(),     "/" );
127   BOOST_CHECK_EQUAL(Pathname("/baa/../baa").asString(), "/baa" );
128   BOOST_CHECK_EQUAL(Pathname("/./../foo/./../baa").asString(),  "/baa" );
129
130   BOOST_CHECK_EQUAL(Pathname("/").asString(),           "/" );
131   BOOST_CHECK_EQUAL(Pathname(".").asString(),           "." );
132   BOOST_CHECK_EQUAL(Pathname("..").asString(),          "./.." );
133   BOOST_CHECK_EQUAL(Pathname("/.").asString(),          "/" );
134   BOOST_CHECK_EQUAL(Pathname("/..").asString(),         "/" );
135   BOOST_CHECK_EQUAL(Pathname("/./.").asString(),        "/" );
136   BOOST_CHECK_EQUAL(Pathname("/./..").asString(),       "/" );
137   BOOST_CHECK_EQUAL(Pathname("/../.").asString(),       "/" );
138   BOOST_CHECK_EQUAL(Pathname("/../..").asString(),      "/" );
139   BOOST_CHECK_EQUAL(Pathname("/././").asString(),       "/" );
140   BOOST_CHECK_EQUAL(Pathname("/./../").asString(),      "/" );
141   BOOST_CHECK_EQUAL(Pathname("/.././").asString(),      "/" );
142   BOOST_CHECK_EQUAL(Pathname("/../../").asString(),     "/" );
143
144   BOOST_CHECK_EQUAL(Pathname("a\\b").asString(),        "./a\\b" );
145   BOOST_CHECK_EQUAL(Pathname("a/b").asString(),         "./a/b" );
146   BOOST_CHECK_EQUAL(Pathname("c:a\\b").asString(),      "./c:a\\b" );
147   BOOST_CHECK_EQUAL(Pathname("c:a/b").asString(),       "./c:a/b" );
148   BOOST_CHECK_EQUAL(Pathname("cc:a\\b").asString(),     "./cc:a\\b" );
149   BOOST_CHECK_EQUAL(Pathname("cc:a/b").asString(),      "./cc:a/b" );
150 }
151
152 BOOST_AUTO_TEST_CASE(pathname_stripprefix)
153 {
154   BOOST_CHECK_EQUAL( Pathname::stripprefix( "",         "" ),           "" );
155   BOOST_CHECK_EQUAL( Pathname::stripprefix( "",         "/" ),          "/" );
156   BOOST_CHECK_EQUAL( Pathname::stripprefix( "",         "/foo" ),       "/foo" );
157   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/",                "" ),           "" );
158   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/",                "/" ),          "/" );
159   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/",                "/foo" ),       "/foo" );
160   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/f",       "" ),           "" );
161   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/f",       "/" ),          "/" );
162   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/f",       "/foo" ),       "/foo" );
163   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/foo",     "" ),           "" );
164   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/foo",     "/" ),          "/" );
165   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/foo",     "/foo" ),       "/" );
166   BOOST_CHECK_EQUAL( Pathname::stripprefix( "/foo",     "/foo/baa" ),   "/baa" );
167 }