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