1 /* 2 Copyright (C) 2005-2007 Feeling Software Inc. 3 Portions of the code are: 4 Copyright (C) 2005-2007 Sony Computer Entertainment America 5 6 MIT License: http://www.opensource.org/licenses/mit-license.php 7 */ 8 9 #include "StdAfx.h" 10 #include "FUTestBed.h" 11 #include "FUString.h" 12 13 TESTSUITE_START(FUString) 14 15 TESTSUITE_TEST(0, Equivalency) 16 // Just verify some of the string<->const char* equivalency 17 // in both Unicode and UTF-8 versions 18 PassIf(IsEquivalent("Tetrahedron", fm::string("Tetrahedron"))); 19 PassIf(IsEquivalent(fm::string("Tetrahedron"), "Tetrahedron")); 20 PassIf(IsEquivalent("My alter-ego", "My alter-ego")); 21 22 FailIf(IsEquivalent("MY ALTER-EGO", "My alter-ego")); // should not be case-sensitive. 23 FailIf(IsEquivalent("Utopia", "Utopian")); 24 FailIf(IsEquivalent(fm::string("Greatness"), "Great")); 25 FailIf(IsEquivalent("Il est", "Il est")); 26 PassIf(IsEquivalent("Prometheian", "Prometheian\0\0\0")); // This is the only difference allowed between two strings. 27 28 fm::string sz1 = "Test1"; 29 fm::string sz2("Test1"); 30 PassIf(IsEquivalent(sz1, sz2)); // Extra verification in case the compiler optimizes out the string differences above. 31 32 TESTSUITE_TEST(1, StringTemplate) 33 // Not looking to verify all the combinations, 34 // but I do want to exercise all the basic functionality. 35 fm::string a("TEST1"), b(a), c("TEST2"), d("VIRUSES", 5), e(3, 'C'), f("abc", 10); 36 37 PassIf(d.length() == 5); 38 PassIf(f.length() == 10); 39 PassIf(IsEquivalent(a, "TEST1")); 40 PassIf(a == b); 41 PassIf(IsEquivalent(a, b)); 42 PassIf(a[0] == 'T'); 43 PassIf(IsEquivalent(d, "VIRUS")); 44 PassIf(IsEquivalent(e, "CCC")); 45 PassIf(a.length() == 5); 46 PassIf(a.substr(0, 4) == c.substr(0, 4)); 47 FailIf(a == c); 48 PassIf(a < c); 49 50 e.append("4"); 51 b.append(a); 52 PassIf(IsEquivalent(e, "CCC4")); 53 PassIf(IsEquivalent(b, "TEST1TEST1")); 54 PassIf(b.find("TEST1", 0) == 0); 55 PassIf(b.find("TEST1", 2) == 5); 56 PassIf(b.find("TEST1", 5) == 5); 57 PassIf(b.find("TEST1", 7) == fm::string::npos); 58 FailIf(c.find("TEST1") != fm::string::npos); 59 PassIf(IsEquivalent(a.c_str(), "TEST1")); 60 PassIf(d.find_first_of("RST") == 2); 61 PassIf(c.find_last_of("T") == 3); 62 63 e.erase(3, 4); 64 a.erase(0, fm::string::npos); 65 b.clear(); 66 PassIf(IsEquivalent(e, "CCC")); 67 PassIf(e.find_first_of("TEST1ORANYTHINGELSETHATDOESNOTHAVE_?_") == fm::string::npos); 68 PassIf(a.length() == 0); 69 PassIf(IsEquivalent(a, "")); 70 PassIf(a.empty()); 71 PassIf(a == b); 72 PassIf(a.empty()); 73 PassIf(IsEquivalent(a.c_str(), b)); // c_str() will ensure that the vector<char> is NULL-terminated. 74 PassIf(a.empty()); 75 PassIf(a == b); 76 77 a.append('C'); 78 PassIf(IsEquivalent(a, "C")); 79 a.append('D'); 80 PassIf(IsEquivalent(a, "CD")); 81 a.insert(1, "S"); 82 PassIf(IsEquivalent(a, "CSD")); 83 84 TESTSUITE_TEST(2, SubTestSuites) 85 RUN_TESTSUITE(FUStringBuilder); 86 RUN_TESTSUITE(FUStringConversion); 87 RUN_TESTSUITE(FUUniqueStringMap); 88 #ifndef WIN32 89 PassIf(true); 90 #endif // WIN32 91 92 TESTSUITE_END 93