OSPathTest.cpp revision e4fafb146e85cdfcf9d5418597b6818aa0754ada
1ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com/*
2ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com * Copyright 2013 Google Inc.
3ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *
4ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com * Use of this source code is governed by a BSD-style license that can be
5ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com * found in the LICENSE file.
6ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com */
7ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
8e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org#include "Test.h"
9e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org#include "TestClassDef.h"
10ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com#include "SkString.h"
11ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com#include "SkOSFile.h"
12ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
13ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com/**
14ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  Test SkPathJoin and SkBasename.
15ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  Will use SkPathJoin to append filename to dir, test that it works correctly,
16ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  and tests using SkBasename on the result.
17ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  @param reporter Reporter for test conditions.
18ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  @param dir String representing the path to a folder. May or may not
19ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *      end with SkPATH_SEPARATOR.
20ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *  @param filename String representing the basename of a file. Must NOT
21ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com *      contain SkPATH_SEPARATOR.
22ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com */
23ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.comstatic void test_dir_with_file(skiatest::Reporter* reporter, SkString dir,
24ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com                               SkString filename) {
25ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // If filename contains SkPATH_SEPARATOR, the tests will fail.
26ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkASSERT(!filename.contains(SkPATH_SEPARATOR));
27ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
28ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Tests for SkOSPath::SkPathJoin and SkOSPath::SkBasename
29ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
30ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // fullName should be "dir<SkPATH_SEPARATOR>file"
31ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString fullName = SkOSPath::SkPathJoin(dir.c_str(), filename.c_str());
32ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
33ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // fullName should be the combined size of dir and file, plus one if
34ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // dir did not include the final path separator.
35ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    size_t expectedSize = dir.size() + filename.size();
36ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    if (!dir.endsWith(SkPATH_SEPARATOR)) {
37ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com        expectedSize++;
38ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    }
39ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, fullName.size() == expectedSize);
40ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
41ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString basename = SkOSPath::SkBasename(fullName.c_str());
42ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
43ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // basename should be the same as filename
44ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, basename.equals(filename));
45ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
46ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // basename will not contain a path separator
47ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, !basename.contains(SkPATH_SEPARATOR));
48ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
49ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Now take the basename of filename, which should be the same as filename.
50ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    basename = SkOSPath::SkBasename(filename.c_str());
51ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, basename.equals(filename));
52ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com}
53ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
54e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(OSPath, reporter) {
55ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString dir("dir");
56ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString filename("file");
57ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    test_dir_with_file(reporter, dir, filename);
58ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
59ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Now make sure this works with a path separator at the end of dir.
60ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    dir.appendUnichar(SkPATH_SEPARATOR);
61ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    test_dir_with_file(reporter, dir, filename);
62ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
63c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    // Test using no filename.
64c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    test_dir_with_file(reporter, dir, SkString());
65c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com
66c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    // Testing using no directory.
67c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    test_dir_with_file(reporter, SkString(), filename);
68c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com
69ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Test with a sub directory.
70ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    dir.append("subDir");
71ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    test_dir_with_file(reporter, dir, filename);
72ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
73ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Basename of a directory with a path separator at the end is empty.
74ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    dir.appendUnichar(SkPATH_SEPARATOR);
75ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString baseOfDir = SkOSPath::SkBasename(dir.c_str());
76ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, baseOfDir.size() == 0);
77ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com
78ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    // Basename of NULL is an empty string.
79ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    SkString empty = SkOSPath::SkBasename(NULL);
80ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com    REPORTER_ASSERT(reporter, empty.size() == 0);
81c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com
82c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    // Test that NULL can be used for the directory and filename.
83c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    SkString emptyPath = SkOSPath::SkPathJoin(NULL, NULL);
84c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    REPORTER_ASSERT(reporter, emptyPath.size() == 1);
85c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com    REPORTER_ASSERT(reporter, emptyPath.contains(SkPATH_SEPARATOR));
86ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com}
87