initial import
[vuplus_webkit] / Tools / TestWebKitAPI / Tests / WTF / StringOperators.cpp
1 /*
2  * Copyright (C) 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27
28 #define WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING() (++wtfStringCopyCount)
29
30 static int wtfStringCopyCount;
31
32 #include <wtf/text/WTFString.h>
33
34 namespace TestWebKitAPI {
35
36 #define EXPECT_N_WTF_STRING_COPIES(count, expr) \
37     do { \
38         wtfStringCopyCount = 0; \
39         String __testString = expr; \
40         (void)__testString; \
41         EXPECT_EQ(count, wtfStringCopyCount) << #expr; \
42     } while (false)
43
44 TEST(WTF, StringOperators)
45 {
46     String string("String");
47     AtomicString atomicString("AtomicString");
48
49     EXPECT_EQ(0, wtfStringCopyCount);
50
51     EXPECT_N_WTF_STRING_COPIES(2, string + string);
52     EXPECT_N_WTF_STRING_COPIES(2, string + atomicString);
53     EXPECT_N_WTF_STRING_COPIES(2, atomicString + string);
54     EXPECT_N_WTF_STRING_COPIES(2, atomicString + atomicString);
55
56     EXPECT_N_WTF_STRING_COPIES(1, "C string" + string);
57     EXPECT_N_WTF_STRING_COPIES(1, string + "C string");
58     EXPECT_N_WTF_STRING_COPIES(1, "C string" + atomicString);
59     EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
60
61     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
62     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string));
63     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + string));
64     EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + string + "C string");
65     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + string + "C string"));
66     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (string + "C string"));
67
68     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
69     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + atomicString));
70     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + atomicString));
71     EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + atomicString + "C string");
72     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + atomicString + "C string"));
73     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (atomicString + "C string"));
74
75     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
76     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
77     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString));
78     EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string");
79     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string"));
80     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
81
82     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
83     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
84     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string));
85     EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string");
86     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
87     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
88
89 #if COMPILER(MSVC)
90     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + string);
91     EXPECT_N_WTF_STRING_COPIES(1, string + L"wide string");
92     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + atomicString);
93     EXPECT_N_WTF_STRING_COPIES(1, atomicString + L"wide string");
94
95     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + string);
96     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + string));
97     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + string));
98     EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + string + L"wide string");
99     EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + string + L"wide string"));
100     EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (string + L"wide string"));
101
102     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + atomicString);
103     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + atomicString));
104     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + atomicString));
105     EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + atomicString + L"wide string");
106     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + atomicString + L"wide string"));
107     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (atomicString + L"wide string"));
108
109     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString);
110     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString));
111     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString));
112     EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string");
113     EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string"));
114     EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string"));
115
116     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string);
117     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string));
118     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string));
119     EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string");
120     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string"));
121     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string"));
122 #endif
123 }
124
125 } // namespace TestWebKitAPI