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