-
-
Notifications
You must be signed in to change notification settings - Fork 35.4k
Expand file tree
/
Copy pathtest_path.cc
More file actions
128 lines (120 loc) Β· 4.9 KB
/
test_path.cc
File metadata and controls
128 lines (120 loc) Β· 4.9 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "debug_utils-inl.h"
#include "env-inl.h"
#include "gtest/gtest.h"
#include "node_options.h"
#include "node_test_fixture.h"
#include "path.h"
#include "util.h"
#include "v8.h"
using node::BufferValue;
using node::FromNamespacedPath;
using node::PathResolve;
using node::ToNamespacedPath;
class PathTest : public EnvironmentTestFixture {};
TEST_F(PathTest, PathResolve) {
const v8::HandleScope handle_scope(isolate_);
Argv argv;
Env env{handle_scope, argv, node::EnvironmentFlags::kNoBrowserGlobals};
auto cwd = (*env)->GetCwd((*env)->exec_path());
#ifdef _WIN32
EXPECT_EQ(PathResolve(*env, {"c:/blah\\blah", "d:/games", "c:../a"}),
"c:\\blah\\a");
EXPECT_EQ(PathResolve(*env, {"c:/ignore", "d:\\a/b\\c/d", "\\e.exe"}),
"d:\\e.exe");
EXPECT_EQ(PathResolve(*env, {"c:/ignore", "c:/some/file"}), "c:\\some\\file");
EXPECT_EQ(PathResolve(*env, {"d:/ignore", "d:some/dir//"}),
"d:\\ignore\\some\\dir");
EXPECT_EQ(PathResolve(*env, {"."}), cwd);
EXPECT_EQ(PathResolve(*env, {"//server/share", "..", "relative\\"}),
"\\\\server\\share\\relative");
EXPECT_EQ(PathResolve(*env, {"c:/", "//"}), "c:\\");
EXPECT_EQ(PathResolve(*env, {"c:/", "//dir"}), "c:\\dir");
EXPECT_EQ(PathResolve(*env, {"c:/", "//server/share"}),
"\\\\server\\share\\");
EXPECT_EQ(PathResolve(*env, {"c:/", "//server//share"}),
"\\\\server\\share\\");
EXPECT_EQ(PathResolve(*env, {"c:/", "///some//dir"}), "c:\\some\\dir");
EXPECT_EQ(
PathResolve(*env, {"C:\\foo\\tmp.3\\", "..\\tmp.3\\cycles\\root.js"}),
"C:\\foo\\tmp.3\\cycles\\root.js");
EXPECT_EQ(PathResolve(*env, {"\\\\.\\PHYSICALDRIVE0"}),
"\\\\.\\PHYSICALDRIVE0");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\PHYSICALDRIVE0"}),
"\\\\?\\PHYSICALDRIVE0");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\C:\\foo"}), "C:\\foo");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\C:\\"}), "C:\\");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\UNC\\server\\share"}),
"\\\\server\\share\\");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\UNC\\server\\share\\dir"}),
"\\\\server\\share\\dir");
EXPECT_EQ(PathResolve(*env, {"\\\\?\\C:foo"}), "\\\\?\\C:foo");
#else
EXPECT_EQ(PathResolve(*env, {"/var/lib", "../", "file/"}), "/var/file");
EXPECT_EQ(PathResolve(*env, {"/var/lib", "/../", "file/"}), "/file");
EXPECT_EQ(PathResolve(*env, {"a/b/c/", "../../.."}), cwd);
EXPECT_EQ(PathResolve(*env, {"."}), cwd);
EXPECT_EQ(PathResolve(*env, {"/some/dir", ".", "/absolute/"}), "/absolute");
EXPECT_EQ(PathResolve(*env, {"/foo/tmp.3/", "../tmp.3/cycles/root.js"}),
"/foo/tmp.3/cycles/root.js");
#endif
}
TEST_F(PathTest, ToNamespacedPath) {
const v8::HandleScope handle_scope(isolate_);
Argv argv;
Env env{handle_scope, argv, node::EnvironmentFlags::kNoBrowserGlobals};
#ifdef _WIN32
BufferValue data(isolate_,
v8::String::NewFromUtf8(isolate_, "").ToLocalChecked());
ToNamespacedPath(*env, &data);
EXPECT_EQ(data.ToStringView(), ""); // Empty string should not be mutated
BufferValue data_2(
isolate_, v8::String::NewFromUtf8(isolate_, "C://").ToLocalChecked());
ToNamespacedPath(*env, &data_2);
EXPECT_EQ(data_2.ToStringView(), "\\\\?\\C:\\");
BufferValue data_3(
isolate_,
v8::String::NewFromUtf8(
isolate_,
"C:\\workspace\\node-test-binary-windows-js-"
"suites\\node\\test\\fixtures\\permission\\deny\\protected-file.md")
.ToLocalChecked());
ToNamespacedPath(*env, &data_3);
EXPECT_EQ(
data_3.ToStringView(),
"\\\\?\\C:\\workspace\\node-test-binary-windows-js-"
"suites\\node\\test\\fixtures\\permission\\deny\\protected-file.md");
BufferValue data_4(
isolate_,
v8::String::NewFromUtf8(isolate_, "\\\\?\\c:\\Windows/System")
.ToLocalChecked());
ToNamespacedPath(*env, &data_4);
EXPECT_EQ(data_4.ToStringView(), "\\\\?\\c:\\Windows\\System");
BufferValue data_5(
isolate_,
v8::String::NewFromUtf8(isolate_, "\\\\?\\C:\\").ToLocalChecked());
ToNamespacedPath(*env, &data_5);
EXPECT_EQ(data_5.ToStringView(), "\\\\?\\C:\\");
#else
BufferValue data(
isolate_,
v8::String::NewFromUtf8(isolate_, "hello world").ToLocalChecked());
ToNamespacedPath(*env, &data);
EXPECT_EQ(data.ToStringView(), "hello world"); // Input should not be mutated
#endif
}
TEST_F(PathTest, FromNamespacedPath) {
#ifdef _WIN32
std::string drive_absolute = "\\\\?\\C:\\foo";
FromNamespacedPath(&drive_absolute);
EXPECT_EQ(drive_absolute, "C:\\foo");
std::string unc_absolute = "\\\\?\\UNC\\server\\share\\dir";
FromNamespacedPath(&unc_absolute);
EXPECT_EQ(unc_absolute, "\\\\server\\share\\dir");
std::string device_path = "\\\\?\\PHYSICALDRIVE0";
FromNamespacedPath(&device_path);
EXPECT_EQ(device_path, "\\\\?\\PHYSICALDRIVE0");
std::string drive_relative = "\\\\?\\C:foo";
FromNamespacedPath(&drive_relative);
EXPECT_EQ(drive_relative, "\\\\?\\C:foo");
#endif
}