diff options
Diffstat (limited to 'tests/OSPathTest.cpp')
-rw-r--r-- | tests/OSPathTest.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/OSPathTest.cpp b/tests/OSPathTest.cpp new file mode 100644 index 0000000000..96ff8a712d --- /dev/null +++ b/tests/OSPathTest.cpp @@ -0,0 +1,77 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkString.h" +#include "SkOSFile.h" +#include "Test.h" + +/** + * Test SkPathJoin and SkBasename. + * Will use SkPathJoin to append filename to dir, test that it works correctly, + * and tests using SkBasename on the result. + * @param reporter Reporter for test conditions. + * @param dir String representing the path to a folder. May or may not + * end with SkPATH_SEPARATOR. + * @param filename String representing the basename of a file. Must NOT + * contain SkPATH_SEPARATOR. + */ +static void test_dir_with_file(skiatest::Reporter* reporter, SkString dir, + SkString filename) { + // If filename contains SkPATH_SEPARATOR, the tests will fail. + SkASSERT(!filename.contains(SkPATH_SEPARATOR)); + + // Tests for SkOSPath::SkPathJoin and SkOSPath::SkBasename + + // fullName should be "dir<SkPATH_SEPARATOR>file" + SkString fullName = SkOSPath::SkPathJoin(dir.c_str(), filename.c_str()); + + // fullName should be the combined size of dir and file, plus one if + // dir did not include the final path separator. + size_t expectedSize = dir.size() + filename.size(); + if (!dir.endsWith(SkPATH_SEPARATOR)) { + expectedSize++; + } + REPORTER_ASSERT(reporter, fullName.size() == expectedSize); + + SkString basename = SkOSPath::SkBasename(fullName.c_str()); + + // basename should be the same as filename + REPORTER_ASSERT(reporter, basename.equals(filename)); + + // basename will not contain a path separator + REPORTER_ASSERT(reporter, !basename.contains(SkPATH_SEPARATOR)); + + // Now take the basename of filename, which should be the same as filename. + basename = SkOSPath::SkBasename(filename.c_str()); + REPORTER_ASSERT(reporter, basename.equals(filename)); +} + +static void test_os_path_utils_tests(skiatest::Reporter* reporter) { + SkString dir("dir"); + SkString filename("file"); + test_dir_with_file(reporter, dir, filename); + + // Now make sure this works with a path separator at the end of dir. + dir.appendUnichar(SkPATH_SEPARATOR); + test_dir_with_file(reporter, dir, filename); + + // Test with a sub directory. + dir.append("subDir"); + test_dir_with_file(reporter, dir, filename); + + // Basename of a directory with a path separator at the end is empty. + dir.appendUnichar(SkPATH_SEPARATOR); + SkString baseOfDir = SkOSPath::SkBasename(dir.c_str()); + REPORTER_ASSERT(reporter, baseOfDir.size() == 0); + + // Basename of NULL is an empty string. + SkString empty = SkOSPath::SkBasename(NULL); + REPORTER_ASSERT(reporter, empty.size() == 0); +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("OSPath", OSPathTestClass, test_os_path_utils_tests) |