• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <gtest/gtest.h>
34 
35 namespace {
36 
37 #define EXPECT_N_WTF_STRING_COPIES(count, expr) \
38     do { \
39         wtfStringCopyCount = 0; \
40         String __testString = expr; \
41         (void)__testString; \
42         EXPECT_EQ(count, wtfStringCopyCount) << #expr; \
43     } while (false)
44 
TEST(WTF,DISABLED_StringOperators)45 TEST(WTF, DISABLED_StringOperators)
46 {
47     String string("String");
48     AtomicString atomicString("AtomicString");
49     const char* literal = "ASCIILiteral";
50 
51     EXPECT_EQ(0, wtfStringCopyCount);
52 
53     EXPECT_N_WTF_STRING_COPIES(2, string + string);
54     EXPECT_N_WTF_STRING_COPIES(2, string + atomicString);
55     EXPECT_N_WTF_STRING_COPIES(2, atomicString + string);
56     EXPECT_N_WTF_STRING_COPIES(2, atomicString + atomicString);
57 
58     EXPECT_N_WTF_STRING_COPIES(1, "C string" + string);
59     EXPECT_N_WTF_STRING_COPIES(1, string + "C string");
60     EXPECT_N_WTF_STRING_COPIES(1, "C string" + atomicString);
61     EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
62 
63     EXPECT_N_WTF_STRING_COPIES(1, literal + string);
64     EXPECT_N_WTF_STRING_COPIES(1, string + literal);
65     EXPECT_N_WTF_STRING_COPIES(1, literal + atomicString);
66     EXPECT_N_WTF_STRING_COPIES(1, atomicString + literal);
67 
68     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
69     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string));
70     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + string));
71     EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + string + "C string");
72     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + string + "C string"));
73     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (string + "C string"));
74 
75     EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + string);
76     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + string));
77     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + string));
78     EXPECT_N_WTF_STRING_COPIES(2, string + literal + string + literal);
79     EXPECT_N_WTF_STRING_COPIES(2, string + (literal + string + literal));
80     EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (string + literal));
81 
82     EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + string);
83     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + string));
84     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + string));
85     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + string);
86     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + string));
87     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + string));
88 
89     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + atomicString);
90     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + atomicString));
91     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + atomicString));
92     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + atomicString);
93     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + atomicString));
94     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + atomicString));
95 
96     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string);
97     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string));
98     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string));
99     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string);
100     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string));
101     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string));
102 
103     EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString);
104     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString));
105     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString));
106     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString);
107     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString));
108     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString));
109 
110     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
111     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + atomicString));
112     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + atomicString));
113     EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + atomicString + "C string");
114     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + atomicString + "C string"));
115     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (atomicString + "C string"));
116 
117     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + atomicString);
118     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + atomicString));
119     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + atomicString));
120     EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + atomicString + literal);
121     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + atomicString + literal));
122     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (atomicString + literal));
123 
124     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
125     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
126     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString));
127     EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string");
128     EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string"));
129     EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
130 
131     EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString);
132     EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString));
133     EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString));
134     EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal);
135     EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal));
136     EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal));
137 
138     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
139     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
140     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string));
141     EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string");
142     EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
143     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
144 
145     EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string);
146     EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string));
147     EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string));
148     EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal);
149     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal));
150     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal));
151 
152 #if COMPILER(MSVC)
153     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + string);
154     EXPECT_N_WTF_STRING_COPIES(1, string + L"wide string");
155     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + atomicString);
156     EXPECT_N_WTF_STRING_COPIES(1, atomicString + L"wide string");
157 
158     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + string);
159     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + string));
160     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + string));
161     EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + string + L"wide string");
162     EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + string + L"wide string"));
163     EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (string + L"wide string"));
164 
165     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + atomicString);
166     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + atomicString));
167     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + atomicString));
168     EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + atomicString + L"wide string");
169     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + atomicString + L"wide string"));
170     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (atomicString + L"wide string"));
171 
172     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString);
173     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString));
174     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString));
175     EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string");
176     EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string"));
177     EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string"));
178 
179     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string);
180     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string));
181     EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string));
182     EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string");
183     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string"));
184     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string"));
185 #endif
186 }
187 
188 } // namespace
189