OpenCores
URL https://opencores.org/ocsvn/s80186/s80186/trunk

Subversion Repositories s80186

[/] [s80186/] [trunk/] [vendor/] [googletest/] [googletest/] [test/] [gtest-filepath_test.cc] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jamieiles
// Copyright 2008, Google Inc.
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are
6
// met:
7
//
8
//     * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
//     * Redistributions in binary form must reproduce the above
11
// copyright notice, this list of conditions and the following disclaimer
12
// in the documentation and/or other materials provided with the
13
// distribution.
14
//     * Neither the name of Google Inc. nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
17
//
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
//
30
// Authors: keith.ray@gmail.com (Keith Ray)
31
//
32
// Google Test filepath utilities
33
//
34
// This file tests classes and functions used internally by
35
// Google Test.  They are subject to change without notice.
36
//
37
// This file is #included from gtest_unittest.cc, to avoid changing
38
// build or make-files for some existing Google Test clients. Do not
39
// #include this file anywhere else!
40
 
41
#include "gtest/internal/gtest-filepath.h"
42
#include "gtest/gtest.h"
43
 
44
// Indicates that this translation unit is part of Google Test's
45
// implementation.  It must come before gtest-internal-inl.h is
46
// included, or there will be a compiler error.  This trick is to
47
// prevent a user from accidentally including gtest-internal-inl.h in
48
// his code.
49
#define GTEST_IMPLEMENTATION_ 1
50
#include "src/gtest-internal-inl.h"
51
#undef GTEST_IMPLEMENTATION_
52
 
53
#if GTEST_OS_WINDOWS_MOBILE
54
# include <windows.h>  // NOLINT
55
#elif GTEST_OS_WINDOWS
56
# include <direct.h>  // NOLINT
57
#endif  // GTEST_OS_WINDOWS_MOBILE
58
 
59
namespace testing {
60
namespace internal {
61
namespace {
62
 
63
#if GTEST_OS_WINDOWS_MOBILE
64
// TODO(wan@google.com): Move these to the POSIX adapter section in
65
// gtest-port.h.
66
 
67
// Windows CE doesn't have the remove C function.
68
int remove(const char* path) {
69
  LPCWSTR wpath = String::AnsiToUtf16(path);
70
  int ret = DeleteFile(wpath) ? 0 : -1;
71
  delete [] wpath;
72
  return ret;
73
}
74
// Windows CE doesn't have the _rmdir C function.
75
int _rmdir(const char* path) {
76
  FilePath filepath(path);
77
  LPCWSTR wpath = String::AnsiToUtf16(
78
      filepath.RemoveTrailingPathSeparator().c_str());
79
  int ret = RemoveDirectory(wpath) ? 0 : -1;
80
  delete [] wpath;
81
  return ret;
82
}
83
 
84
#else
85
 
86
TEST(GetCurrentDirTest, ReturnsCurrentDir) {
87
  const FilePath original_dir = FilePath::GetCurrentDir();
88
  EXPECT_FALSE(original_dir.IsEmpty());
89
 
90
  posix::ChDir(GTEST_PATH_SEP_);
91
  const FilePath cwd = FilePath::GetCurrentDir();
92
  posix::ChDir(original_dir.c_str());
93
 
94
# if GTEST_OS_WINDOWS
95
 
96
  // Skips the ":".
97
  const char* const cwd_without_drive = strchr(cwd.c_str(), ':');
98
  ASSERT_TRUE(cwd_without_drive != NULL);
99
  EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1);
100
 
101
# else
102
 
103
  EXPECT_EQ(GTEST_PATH_SEP_, cwd.string());
104
 
105
# endif
106
}
107
 
108
#endif  // GTEST_OS_WINDOWS_MOBILE
109
 
110
TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
111
  EXPECT_TRUE(FilePath("").IsEmpty());
112
}
113
 
114
TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
115
  EXPECT_FALSE(FilePath("a").IsEmpty());
116
  EXPECT_FALSE(FilePath(".").IsEmpty());
117
  EXPECT_FALSE(FilePath("a/b").IsEmpty());
118
  EXPECT_FALSE(FilePath("a\\b\\").IsEmpty());
119
}
120
 
121
// RemoveDirectoryName "" -> ""
122
TEST(RemoveDirectoryNameTest, WhenEmptyName) {
123
  EXPECT_EQ("", FilePath("").RemoveDirectoryName().string());
124
}
125
 
126
// RemoveDirectoryName "afile" -> "afile"
127
TEST(RemoveDirectoryNameTest, ButNoDirectory) {
128
  EXPECT_EQ("afile",
129
      FilePath("afile").RemoveDirectoryName().string());
130
}
131
 
132
// RemoveDirectoryName "/afile" -> "afile"
133
TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
134
  EXPECT_EQ("afile",
135
      FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string());
136
}
137
 
138
// RemoveDirectoryName "adir/" -> ""
139
TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
140
  EXPECT_EQ("",
141
      FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().string());
142
}
143
 
144
// RemoveDirectoryName "adir/afile" -> "afile"
145
TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
146
  EXPECT_EQ("afile",
147
      FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string());
148
}
149
 
150
// RemoveDirectoryName "adir/subdir/afile" -> "afile"
151
TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
152
  EXPECT_EQ("afile",
153
      FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile")
154
      .RemoveDirectoryName().string());
155
}
156
 
157
#if GTEST_HAS_ALT_PATH_SEP_
158
 
159
// Tests that RemoveDirectoryName() works with the alternate separator
160
// on Windows.
161
 
162
// RemoveDirectoryName("/afile") -> "afile"
163
TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
164
  EXPECT_EQ("afile", FilePath("/afile").RemoveDirectoryName().string());
165
}
166
 
167
// RemoveDirectoryName("adir/") -> ""
168
TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
169
  EXPECT_EQ("", FilePath("adir/").RemoveDirectoryName().string());
170
}
171
 
172
// RemoveDirectoryName("adir/afile") -> "afile"
173
TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
174
  EXPECT_EQ("afile", FilePath("adir/afile").RemoveDirectoryName().string());
175
}
176
 
177
// RemoveDirectoryName("adir/subdir/afile") -> "afile"
178
TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
179
  EXPECT_EQ("afile",
180
            FilePath("adir/subdir/afile").RemoveDirectoryName().string());
181
}
182
 
183
#endif
184
 
185
// RemoveFileName "" -> "./"
186
TEST(RemoveFileNameTest, EmptyName) {
187
#if GTEST_OS_WINDOWS_MOBILE
188
  // On Windows CE, we use the root as the current directory.
189
  EXPECT_EQ(GTEST_PATH_SEP_, FilePath("").RemoveFileName().string());
190
#else
191
  EXPECT_EQ("." GTEST_PATH_SEP_, FilePath("").RemoveFileName().string());
192
#endif
193
}
194
 
195
// RemoveFileName "adir/" -> "adir/"
196
TEST(RemoveFileNameTest, ButNoFile) {
197
  EXPECT_EQ("adir" GTEST_PATH_SEP_,
198
      FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().string());
199
}
200
 
201
// RemoveFileName "adir/afile" -> "adir/"
202
TEST(RemoveFileNameTest, GivesDirName) {
203
  EXPECT_EQ("adir" GTEST_PATH_SEP_,
204
            FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveFileName().string());
205
}
206
 
207
// RemoveFileName "adir/subdir/afile" -> "adir/subdir/"
208
TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
209
  EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_,
210
      FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile")
211
      .RemoveFileName().string());
212
}
213
 
214
// RemoveFileName "/afile" -> "/"
215
TEST(RemoveFileNameTest, GivesRootDir) {
216
  EXPECT_EQ(GTEST_PATH_SEP_,
217
      FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().string());
218
}
219
 
220
#if GTEST_HAS_ALT_PATH_SEP_
221
 
222
// Tests that RemoveFileName() works with the alternate separator on
223
// Windows.
224
 
225
// RemoveFileName("adir/") -> "adir/"
226
TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
227
  EXPECT_EQ("adir" GTEST_PATH_SEP_,
228
            FilePath("adir/").RemoveFileName().string());
229
}
230
 
231
// RemoveFileName("adir/afile") -> "adir/"
232
TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
233
  EXPECT_EQ("adir" GTEST_PATH_SEP_,
234
            FilePath("adir/afile").RemoveFileName().string());
235
}
236
 
237
// RemoveFileName("adir/subdir/afile") -> "adir/subdir/"
238
TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
239
  EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_,
240
            FilePath("adir/subdir/afile").RemoveFileName().string());
241
}
242
 
243
// RemoveFileName("/afile") -> "\"
244
TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
245
  EXPECT_EQ(GTEST_PATH_SEP_, FilePath("/afile").RemoveFileName().string());
246
}
247
 
248
#endif
249
 
250
TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
251
  FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"),
252
      0, "xml");
253
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string());
254
}
255
 
256
TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
257
  FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"),
258
      12, "xml");
259
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string());
260
}
261
 
262
TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
263
  FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_),
264
      FilePath("bar"), 0, "xml");
265
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string());
266
}
267
 
268
TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
269
  FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_),
270
      FilePath("bar"), 12, "xml");
271
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string());
272
}
273
 
274
TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
275
  FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"),
276
      0, "xml");
277
  EXPECT_EQ("bar.xml", actual.string());
278
}
279
 
280
TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
281
  FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"),
282
      14, "xml");
283
  EXPECT_EQ("bar_14.xml", actual.string());
284
}
285
 
286
TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
287
  FilePath actual = FilePath::ConcatPaths(FilePath("foo"),
288
                                          FilePath("bar.xml"));
289
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string());
290
}
291
 
292
TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
293
  FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_),
294
                                          FilePath("bar.xml"));
295
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string());
296
}
297
 
298
TEST(ConcatPathsTest, Path1BeingEmpty) {
299
  FilePath actual = FilePath::ConcatPaths(FilePath(""),
300
                                          FilePath("bar.xml"));
301
  EXPECT_EQ("bar.xml", actual.string());
302
}
303
 
304
TEST(ConcatPathsTest, Path2BeingEmpty) {
305
  FilePath actual = FilePath::ConcatPaths(FilePath("foo"), FilePath(""));
306
  EXPECT_EQ("foo" GTEST_PATH_SEP_, actual.string());
307
}
308
 
309
TEST(ConcatPathsTest, BothPathBeingEmpty) {
310
  FilePath actual = FilePath::ConcatPaths(FilePath(""),
311
                                          FilePath(""));
312
  EXPECT_EQ("", actual.string());
313
}
314
 
315
TEST(ConcatPathsTest, Path1ContainsPathSep) {
316
  FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"),
317
                                          FilePath("foobar.xml"));
318
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml",
319
            actual.string());
320
}
321
 
322
TEST(ConcatPathsTest, Path2ContainsPathSep) {
323
  FilePath actual = FilePath::ConcatPaths(
324
      FilePath("foo" GTEST_PATH_SEP_),
325
      FilePath("bar" GTEST_PATH_SEP_ "bar.xml"));
326
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml",
327
            actual.string());
328
}
329
 
330
TEST(ConcatPathsTest, Path2EndsWithPathSep) {
331
  FilePath actual = FilePath::ConcatPaths(FilePath("foo"),
332
                                          FilePath("bar" GTEST_PATH_SEP_));
333
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.string());
334
}
335
 
336
// RemoveTrailingPathSeparator "" -> ""
337
TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
338
  EXPECT_EQ("", FilePath("").RemoveTrailingPathSeparator().string());
339
}
340
 
341
// RemoveTrailingPathSeparator "foo" -> "foo"
342
TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
343
  EXPECT_EQ("foo", FilePath("foo").RemoveTrailingPathSeparator().string());
344
}
345
 
346
// RemoveTrailingPathSeparator "foo/" -> "foo"
347
TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {
348
  EXPECT_EQ("foo",
349
      FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().string());
350
#if GTEST_HAS_ALT_PATH_SEP_
351
  EXPECT_EQ("foo", FilePath("foo/").RemoveTrailingPathSeparator().string());
352
#endif
353
}
354
 
355
// RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/"
356
TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
357
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar",
358
            FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_)
359
                .RemoveTrailingPathSeparator().string());
360
}
361
 
362
// RemoveTrailingPathSeparator "foo/bar" -> "foo/bar"
363
TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
364
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar",
365
            FilePath("foo" GTEST_PATH_SEP_ "bar")
366
                .RemoveTrailingPathSeparator().string());
367
}
368
 
369
TEST(DirectoryTest, RootDirectoryExists) {
370
#if GTEST_OS_WINDOWS  // We are on Windows.
371
  char current_drive[_MAX_PATH];  // NOLINT
372
  current_drive[0] = static_cast<char>(_getdrive() + 'A' - 1);
373
  current_drive[1] = ':';
374
  current_drive[2] = '\\';
375
  current_drive[3] = '\0';
376
  EXPECT_TRUE(FilePath(current_drive).DirectoryExists());
377
#else
378
  EXPECT_TRUE(FilePath("/").DirectoryExists());
379
#endif  // GTEST_OS_WINDOWS
380
}
381
 
382
#if GTEST_OS_WINDOWS
383
TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
384
  const int saved_drive_ = _getdrive();
385
  // Find a drive that doesn't exist. Start with 'Z' to avoid common ones.
386
  for (char drive = 'Z'; drive >= 'A'; drive--)
387
    if (_chdrive(drive - 'A' + 1) == -1) {
388
      char non_drive[_MAX_PATH];  // NOLINT
389
      non_drive[0] = drive;
390
      non_drive[1] = ':';
391
      non_drive[2] = '\\';
392
      non_drive[3] = '\0';
393
      EXPECT_FALSE(FilePath(non_drive).DirectoryExists());
394
      break;
395
    }
396
  _chdrive(saved_drive_);
397
}
398
#endif  // GTEST_OS_WINDOWS
399
 
400
#if !GTEST_OS_WINDOWS_MOBILE
401
// Windows CE _does_ consider an empty directory to exist.
402
TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
403
  EXPECT_FALSE(FilePath("").DirectoryExists());
404
}
405
#endif  // !GTEST_OS_WINDOWS_MOBILE
406
 
407
TEST(DirectoryTest, CurrentDirectoryExists) {
408
#if GTEST_OS_WINDOWS  // We are on Windows.
409
# ifndef _WIN32_CE  // Windows CE doesn't have a current directory.
410
 
411
  EXPECT_TRUE(FilePath(".").DirectoryExists());
412
  EXPECT_TRUE(FilePath(".\\").DirectoryExists());
413
 
414
# endif  // _WIN32_CE
415
#else
416
  EXPECT_TRUE(FilePath(".").DirectoryExists());
417
  EXPECT_TRUE(FilePath("./").DirectoryExists());
418
#endif  // GTEST_OS_WINDOWS
419
}
420
 
421
// "foo/bar" == foo//bar" == "foo///bar"
422
TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) {
423
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar",
424
            FilePath("foo" GTEST_PATH_SEP_ "bar").string());
425
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar",
426
            FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string());
427
  EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar",
428
            FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_
429
                     GTEST_PATH_SEP_ "bar").string());
430
}
431
 
432
// "/bar" == //bar" == "///bar"
433
TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) {
434
  EXPECT_EQ(GTEST_PATH_SEP_ "bar",
435
    FilePath(GTEST_PATH_SEP_ "bar").string());
436
  EXPECT_EQ(GTEST_PATH_SEP_ "bar",
437
    FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string());
438
  EXPECT_EQ(GTEST_PATH_SEP_ "bar",
439
    FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string());
440
}
441
 
442
// "foo/" == foo//" == "foo///"
443
TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) {
444
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
445
    FilePath("foo" GTEST_PATH_SEP_).string());
446
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
447
    FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).string());
448
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
449
    FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).string());
450
}
451
 
452
#if GTEST_HAS_ALT_PATH_SEP_
453
 
454
// Tests that separators at the end of the string are normalized
455
// regardless of their combination (e.g. "foo\" =="foo/\" ==
456
// "foo\\/").
457
TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
458
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
459
            FilePath("foo/").string());
460
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
461
            FilePath("foo" GTEST_PATH_SEP_ "/").string());
462
  EXPECT_EQ("foo" GTEST_PATH_SEP_,
463
            FilePath("foo//" GTEST_PATH_SEP_).string());
464
}
465
 
466
#endif
467
 
468
TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
469
  FilePath default_path;
470
  FilePath non_default_path("path");
471
  non_default_path = default_path;
472
  EXPECT_EQ("", non_default_path.string());
473
  EXPECT_EQ("", default_path.string());  // RHS var is unchanged.
474
}
475
 
476
TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
477
  FilePath non_default_path("path");
478
  FilePath default_path;
479
  default_path = non_default_path;
480
  EXPECT_EQ("path", default_path.string());
481
  EXPECT_EQ("path", non_default_path.string());  // RHS var is unchanged.
482
}
483
 
484
TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
485
  const FilePath const_default_path("const_path");
486
  FilePath non_default_path("path");
487
  non_default_path = const_default_path;
488
  EXPECT_EQ("const_path", non_default_path.string());
489
}
490
 
491
class DirectoryCreationTest : public Test {
492
 protected:
493
  virtual void SetUp() {
494
    testdata_path_.Set(FilePath(
495
        TempDir() + GetCurrentExecutableName().string() +
496
        "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_));
497
    testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator());
498
 
499
    unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"),
500
        0, "txt"));
501
    unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"),
502
        1, "txt"));
503
 
504
    remove(testdata_file_.c_str());
505
    remove(unique_file0_.c_str());
506
    remove(unique_file1_.c_str());
507
    posix::RmDir(testdata_path_.c_str());
508
  }
509
 
510
  virtual void TearDown() {
511
    remove(testdata_file_.c_str());
512
    remove(unique_file0_.c_str());
513
    remove(unique_file1_.c_str());
514
    posix::RmDir(testdata_path_.c_str());
515
  }
516
 
517
  void CreateTextFile(const char* filename) {
518
    FILE* f = posix::FOpen(filename, "w");
519
    fprintf(f, "text\n");
520
    fclose(f);
521
  }
522
 
523
  // Strings representing a directory and a file, with identical paths
524
  // except for the trailing separator character that distinquishes
525
  // a directory named 'test' from a file named 'test'. Example names:
526
  FilePath testdata_path_;  // "/tmp/directory_creation/test/"
527
  FilePath testdata_file_;  // "/tmp/directory_creation/test"
528
  FilePath unique_file0_;  // "/tmp/directory_creation/test/unique.txt"
529
  FilePath unique_file1_;  // "/tmp/directory_creation/test/unique_1.txt"
530
};
531
 
532
TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
533
  EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
534
  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
535
  EXPECT_TRUE(testdata_path_.DirectoryExists());
536
}
537
 
538
TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
539
  EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
540
  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
541
  // Call 'create' again... should still succeed.
542
  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
543
}
544
 
545
TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
546
  FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_,
547
      FilePath("unique"), "txt"));
548
  EXPECT_EQ(unique_file0_.string(), file_path.string());
549
  EXPECT_FALSE(file_path.FileOrDirectoryExists());  // file not there
550
 
551
  testdata_path_.CreateDirectoriesRecursively();
552
  EXPECT_FALSE(file_path.FileOrDirectoryExists());  // file still not there
553
  CreateTextFile(file_path.c_str());
554
  EXPECT_TRUE(file_path.FileOrDirectoryExists());
555
 
556
  FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_,
557
      FilePath("unique"), "txt"));
558
  EXPECT_EQ(unique_file1_.string(), file_path2.string());
559
  EXPECT_FALSE(file_path2.FileOrDirectoryExists());  // file not there
560
  CreateTextFile(file_path2.c_str());
561
  EXPECT_TRUE(file_path2.FileOrDirectoryExists());
562
}
563
 
564
TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
565
  // force a failure by putting a file where we will try to create a directory.
566
  CreateTextFile(testdata_file_.c_str());
567
  EXPECT_TRUE(testdata_file_.FileOrDirectoryExists());
568
  EXPECT_FALSE(testdata_file_.DirectoryExists());
569
  EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively());
570
}
571
 
572
TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
573
  const FilePath test_detail_xml("test_detail.xml");
574
  EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
575
}
576
 
577
TEST(FilePathTest, DefaultConstructor) {
578
  FilePath fp;
579
  EXPECT_EQ("", fp.string());
580
}
581
 
582
TEST(FilePathTest, CharAndCopyConstructors) {
583
  const FilePath fp("spicy");
584
  EXPECT_EQ("spicy", fp.string());
585
 
586
  const FilePath fp_copy(fp);
587
  EXPECT_EQ("spicy", fp_copy.string());
588
}
589
 
590
TEST(FilePathTest, StringConstructor) {
591
  const FilePath fp(std::string("cider"));
592
  EXPECT_EQ("cider", fp.string());
593
}
594
 
595
TEST(FilePathTest, Set) {
596
  const FilePath apple("apple");
597
  FilePath mac("mac");
598
  mac.Set(apple);  // Implement Set() since overloading operator= is forbidden.
599
  EXPECT_EQ("apple", mac.string());
600
  EXPECT_EQ("apple", apple.string());
601
}
602
 
603
TEST(FilePathTest, ToString) {
604
  const FilePath file("drink");
605
  EXPECT_EQ("drink", file.string());
606
}
607
 
608
TEST(FilePathTest, RemoveExtension) {
609
  EXPECT_EQ("app", FilePath("app.cc").RemoveExtension("cc").string());
610
  EXPECT_EQ("app", FilePath("app.exe").RemoveExtension("exe").string());
611
  EXPECT_EQ("APP", FilePath("APP.EXE").RemoveExtension("exe").string());
612
}
613
 
614
TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
615
  EXPECT_EQ("app", FilePath("app").RemoveExtension("exe").string());
616
}
617
 
618
TEST(FilePathTest, IsDirectory) {
619
  EXPECT_FALSE(FilePath("cola").IsDirectory());
620
  EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory());
621
#if GTEST_HAS_ALT_PATH_SEP_
622
  EXPECT_TRUE(FilePath("koala/").IsDirectory());
623
#endif
624
}
625
 
626
TEST(FilePathTest, IsAbsolutePath) {
627
  EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath());
628
  EXPECT_FALSE(FilePath("").IsAbsolutePath());
629
#if GTEST_OS_WINDOWS
630
  EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not"
631
                       GTEST_PATH_SEP_ "relative").IsAbsolutePath());
632
  EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath());
633
  EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not"
634
                       GTEST_PATH_SEP_ "relative").IsAbsolutePath());
635
#else
636
  EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative")
637
              .IsAbsolutePath());
638
#endif  // GTEST_OS_WINDOWS
639
}
640
 
641
TEST(FilePathTest, IsRootDirectory) {
642
#if GTEST_OS_WINDOWS
643
  EXPECT_TRUE(FilePath("a:\\").IsRootDirectory());
644
  EXPECT_TRUE(FilePath("Z:/").IsRootDirectory());
645
  EXPECT_TRUE(FilePath("e://").IsRootDirectory());
646
  EXPECT_FALSE(FilePath("").IsRootDirectory());
647
  EXPECT_FALSE(FilePath("b:").IsRootDirectory());
648
  EXPECT_FALSE(FilePath("b:a").IsRootDirectory());
649
  EXPECT_FALSE(FilePath("8:/").IsRootDirectory());
650
  EXPECT_FALSE(FilePath("c|/").IsRootDirectory());
651
#else
652
  EXPECT_TRUE(FilePath("/").IsRootDirectory());
653
  EXPECT_TRUE(FilePath("//").IsRootDirectory());
654
  EXPECT_FALSE(FilePath("").IsRootDirectory());
655
  EXPECT_FALSE(FilePath("\\").IsRootDirectory());
656
  EXPECT_FALSE(FilePath("/x").IsRootDirectory());
657
#endif
658
}
659
 
660
}  // namespace
661
}  // namespace internal
662
}  // namespace testing

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.