OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "testing/platform_test.h" | 10 #include "testing/platform_test.h" |
11 | 11 |
12 // This macro helps avoid wrapped lines in the test structs. | 12 // This macro helps avoid wrapped lines in the test structs. |
13 #define FPL(x) FILE_PATH_LITERAL(x) | 13 #define FPL(x) FILE_PATH_LITERAL(x) |
14 | 14 |
15 struct UnaryTestData { | 15 struct UnaryTestData { |
16 const FilePath::CharType* input; | 16 const FilePath::CharType* input; |
17 const FilePath::CharType* expected; | 17 const FilePath::CharType* expected; |
18 }; | 18 }; |
19 | 19 |
20 struct UnaryBooleanTestData { | 20 struct UnaryBooleanTestData { |
21 const FilePath::CharType* input; | 21 const FilePath::CharType* input; |
22 bool expected; | 22 bool expected; |
23 }; | 23 }; |
24 | 24 |
25 struct BinaryTestData { | 25 struct BinaryTestData { |
26 const FilePath::CharType* inputs[2]; | 26 const FilePath::CharType* inputs[2]; |
27 const FilePath::CharType* expected; | 27 const FilePath::CharType* expected; |
28 }; | 28 }; |
29 | 29 |
| 30 struct BinaryBooleanTestData { |
| 31 const FilePath::CharType* inputs[2]; |
| 32 bool expected; |
| 33 }; |
| 34 |
30 // file_util winds up using autoreleased objects on the Mac, so this needs | 35 // file_util winds up using autoreleased objects on the Mac, so this needs |
31 // to be a PlatformTest | 36 // to be a PlatformTest |
32 class FilePathTest : public PlatformTest { | 37 class FilePathTest : public PlatformTest { |
33 protected: | 38 protected: |
34 virtual void SetUp() { | 39 virtual void SetUp() { |
35 PlatformTest::SetUp(); | 40 PlatformTest::SetUp(); |
36 } | 41 } |
37 virtual void TearDown() { | 42 virtual void TearDown() { |
38 PlatformTest::TearDown(); | 43 PlatformTest::TearDown(); |
39 } | 44 } |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 }; | 373 }; |
369 | 374 |
370 for (size_t i = 0; i < arraysize(cases); ++i) { | 375 for (size_t i = 0; i < arraysize(cases); ++i) { |
371 FilePath input(cases[i].input); | 376 FilePath input(cases[i].input); |
372 bool observed = input.IsAbsolute(); | 377 bool observed = input.IsAbsolute(); |
373 EXPECT_EQ(cases[i].expected, observed) << | 378 EXPECT_EQ(cases[i].expected, observed) << |
374 "i: " << i << ", input: " << input.value(); | 379 "i: " << i << ", input: " << input.value(); |
375 } | 380 } |
376 } | 381 } |
377 | 382 |
| 383 TEST_F(FilePathTest, PathComponentsTest) { |
| 384 const struct UnaryTestData cases[] = { |
| 385 { FPL("//foo/bar/baz/"), FPL("|//|foo|bar|baz")}, |
| 386 { FPL("///"), FPL("|/")}, |
| 387 { FPL("/foo//bar//baz/"), FPL("|/|foo|bar|baz")}, |
| 388 { FPL("/foo/bar/baz/"), FPL("|/|foo|bar|baz")}, |
| 389 { FPL("/foo/bar/baz//"), FPL("|/|foo|bar|baz")}, |
| 390 { FPL("/foo/bar/baz///"), FPL("|/|foo|bar|baz")}, |
| 391 { FPL("/foo/bar/baz"), FPL("|/|foo|bar|baz")}, |
| 392 { FPL("/foo/bar.bot/baz.txt"), FPL("|/|foo|bar.bot|baz.txt")}, |
| 393 { FPL("//foo//bar/baz"), FPL("|//|foo|bar|baz")}, |
| 394 { FPL("/"), FPL("|/")}, |
| 395 { FPL("foo"), FPL("|foo")}, |
| 396 { FPL(""), FPL("")}, |
| 397 #if defined(FILE_PATH_USES_DRIVE_LETTERS) |
| 398 { FPL("e:/foo"), FPL("|e:|/|foo")}, |
| 399 { FPL("e:/"), FPL("|e:|/")}, |
| 400 { FPL("e:"), FPL("|e:")}, |
| 401 #endif // FILE_PATH_USES_DRIVE_LETTERS |
| 402 #if defined(FILE_PATH_USES_WIN_SEPARATORS) |
| 403 { FPL("../foo"), FPL("|..|foo")}, |
| 404 { FPL("./foo"), FPL("|foo")}, |
| 405 { FPL("../foo/bar/"), FPL("|..|foo|bar") }, |
| 406 { FPL("\\\\foo\\bar\\baz\\"), FPL("|\\\\|foo|bar|baz")}, |
| 407 { FPL("\\\\\\"), FPL("|\\")}, |
| 408 { FPL("\\foo\\\\bar\\\\baz\\"), FPL("|\\|foo|bar|baz")}, |
| 409 { FPL("\\foo\\bar\\baz\\"), FPL("|\\|foo|bar|baz")}, |
| 410 { FPL("\\foo\\bar\\baz\\\\"), FPL("|\\|foo|bar|baz")}, |
| 411 { FPL("\\foo\\bar\\baz\\\\\\"), FPL("|\\|foo|bar|baz")}, |
| 412 { FPL("\\foo\\bar\\baz"), FPL("|\\|foo|bar|baz")}, |
| 413 { FPL("\\foo\\bar/baz\\\\\\"), FPL("|\\|foo|bar|baz")}, |
| 414 { FPL("/foo\\bar\\baz"), FPL("|/|foo|bar|baz")}, |
| 415 { FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")}, |
| 416 { FPL("\\\\foo\\\\bar\\baz"), FPL("|\\\\|foo|bar|baz")}, |
| 417 { FPL("\\"), FPL("|\\")}, |
| 418 #endif // FILE_PATH_USES_WIN_SEPARATORS |
| 419 }; |
| 420 |
| 421 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 422 FilePath input(cases[i].input); |
| 423 std::vector<FilePath::StringType> comps; |
| 424 input.GetComponents(&comps); |
| 425 |
| 426 FilePath::StringType observed; |
| 427 for (size_t j = 0; j < comps.size(); ++j) { |
| 428 observed.append(FILE_PATH_LITERAL("|"), 1); |
| 429 observed.append(comps[j]); |
| 430 } |
| 431 EXPECT_EQ(FilePath::StringType(cases[i].expected), observed) << |
| 432 "i: " << i << ", input: " << input.value(); |
| 433 } |
| 434 } |
| 435 |
| 436 TEST_F(FilePathTest, IsParentTest) { |
| 437 const struct BinaryBooleanTestData cases[] = { |
| 438 { { FPL("/"), FPL("/foo/bar/baz") }, true}, |
| 439 { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, true}, |
| 440 { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, true}, |
| 441 { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, true}, |
| 442 { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, false}, |
| 443 { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, false}, |
| 444 { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, false}, |
| 445 { { FPL("/foo/bar"), FPL("/foo/bar") }, false}, |
| 446 { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, |
| 447 { { FPL("foo/bar"), FPL("foo/bar/baz") }, true}, |
| 448 { { FPL("foo/bar"), FPL("foo2/bar/baz") }, false}, |
| 449 { { FPL("foo/bar"), FPL("foo/bar2/baz") }, false}, |
| 450 { { FPL(""), FPL("foo") }, false}, |
| 451 #if defined(FILE_PATH_USES_DRIVE_LETTERS) |
| 452 { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, true}, |
| 453 { { FPL("c:/"), FPL("c:/foo/bar/baz") }, true}, |
| 454 { { FPL("c:"), FPL("c:/foo/bar/baz") }, true}, |
| 455 { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, |
| 456 { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, false}, |
| 457 { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, false}, |
| 458 #endif // FILE_PATH_USES_DRIVE_LETTERS |
| 459 #if defined(FILE_PATH_USES_WIN_SEPARATORS) |
| 460 { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, true}, |
| 461 { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, true}, |
| 462 { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, true}, |
| 463 { { FPL("\\"), FPL("\\foo\\bar\\baz") }, true}, |
| 464 { { FPL(""), FPL("\\foo\\bar\\baz") }, false}, |
| 465 { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, false}, |
| 466 { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, false}, |
| 467 #endif // FILE_PATH_USES_DRIVE_LETTERS |
| 468 }; |
| 469 |
| 470 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 471 FilePath parent(cases[i].inputs[0]); |
| 472 FilePath child(cases[i].inputs[1]); |
| 473 |
| 474 EXPECT_EQ(parent.IsParent(child), cases[i].expected) << |
| 475 "i: " << i << ", parent: " << parent.value() << ", child: " << |
| 476 child.value(); |
| 477 } |
| 478 } |
| 479 |
378 TEST_F(FilePathTest, Extension) { | 480 TEST_F(FilePathTest, Extension) { |
379 FilePath base_dir(FILE_PATH_LITERAL("base_dir")); | 481 FilePath base_dir(FILE_PATH_LITERAL("base_dir")); |
380 | 482 |
381 FilePath jpg = base_dir.Append(FILE_PATH_LITERAL("foo.jpg")); | 483 FilePath jpg = base_dir.Append(FILE_PATH_LITERAL("foo.jpg")); |
382 EXPECT_EQ(jpg.Extension(), FILE_PATH_LITERAL(".jpg")); | 484 EXPECT_EQ(jpg.Extension(), FILE_PATH_LITERAL(".jpg")); |
383 | 485 |
384 FilePath base = jpg.BaseName().RemoveExtension(); | 486 FilePath base = jpg.BaseName().RemoveExtension(); |
385 EXPECT_EQ(base.value(), FILE_PATH_LITERAL("foo")); | 487 EXPECT_EQ(base.value(), FILE_PATH_LITERAL("foo")); |
386 | 488 |
387 FilePath path_no_ext = base_dir.Append(base); | 489 FilePath path_no_ext = base_dir.Append(base); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, | 627 { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, |
526 { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, | 628 { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, |
527 }; | 629 }; |
528 for (unsigned int i = 0; i < arraysize(cases); ++i) { | 630 for (unsigned int i = 0; i < arraysize(cases); ++i) { |
529 FilePath path(cases[i].inputs[0]); | 631 FilePath path(cases[i].inputs[0]); |
530 FilePath replaced = path.ReplaceExtension(cases[i].inputs[1]); | 632 FilePath replaced = path.ReplaceExtension(cases[i].inputs[1]); |
531 EXPECT_EQ(cases[i].expected, replaced.value()) << "i: " << i << | 633 EXPECT_EQ(cases[i].expected, replaced.value()) << "i: " << i << |
532 ", path: " << path.value() << ", replace: " << cases[i].inputs[1]; | 634 ", path: " << path.value() << ", replace: " << cases[i].inputs[1]; |
533 } | 635 } |
534 } | 636 } |
OLD | NEW |