OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/notifications/NotificationData.h" | 5 #include "modules/notifications/NotificationData.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/modules/v8/UnionTypesModules.h" | 8 #include "bindings/modules/v8/UnionTypesModules.h" |
9 #include "core/testing/NullExecutionContext.h" | 9 #include "core/testing/NullExecutionContext.h" |
10 #include "modules/notifications/Notification.h" | 10 #include "modules/notifications/Notification.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 }; | 39 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 }; |
40 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 }; | 40 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 }; |
41 | 41 |
42 class NotificationDataTest : public ::testing::Test { | 42 class NotificationDataTest : public ::testing::Test { |
43 public: | 43 public: |
44 void SetUp() override | 44 void SetUp() override |
45 { | 45 { |
46 m_executionContext = adoptRefWillBeNoop(new NullExecutionContext()); | 46 m_executionContext = adoptRefWillBeNoop(new NullExecutionContext()); |
47 } | 47 } |
48 | 48 |
49 ExecutionContext* executionContext() { return m_executionContext.get(); } | 49 ExecutionContext* getExecutionContext() { return m_executionContext.get(); } |
50 | 50 |
51 private: | 51 private: |
52 RefPtrWillBePersistent<ExecutionContext> m_executionContext; | 52 RefPtrWillBePersistent<ExecutionContext> m_executionContext; |
53 }; | 53 }; |
54 | 54 |
55 TEST_F(NotificationDataTest, ReflectProperties) | 55 TEST_F(NotificationDataTest, ReflectProperties) |
56 { | 56 { |
57 Vector<unsigned> vibrationPattern; | 57 Vector<unsigned> vibrationPattern; |
58 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i) | 58 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i) |
59 vibrationPattern.append(kNotificationVibration[i]); | 59 vibrationPattern.append(kNotificationVibration[i]); |
(...skipping 20 matching lines...) Expand all Loading... |
80 options.setVibrate(vibrationSequence); | 80 options.setVibrate(vibrationSequence); |
81 options.setTimestamp(kNotificationTimestamp); | 81 options.setTimestamp(kNotificationTimestamp); |
82 options.setRenotify(kNotificationRenotify); | 82 options.setRenotify(kNotificationRenotify); |
83 options.setSilent(kNotificationSilent); | 83 options.setSilent(kNotificationSilent); |
84 options.setRequireInteraction(kNotificationRequireInteraction); | 84 options.setRequireInteraction(kNotificationRequireInteraction); |
85 options.setActions(actions); | 85 options.setActions(actions); |
86 | 86 |
87 // TODO(peter): Test |options.data| and |notificationData.data|. | 87 // TODO(peter): Test |options.data| and |notificationData.data|. |
88 | 88 |
89 TrackExceptionState exceptionState; | 89 TrackExceptionState exceptionState; |
90 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 90 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
91 ASSERT_FALSE(exceptionState.hadException()); | 91 ASSERT_FALSE(exceptionState.hadException()); |
92 | 92 |
93 EXPECT_EQ(kNotificationTitle, notificationData.title); | 93 EXPECT_EQ(kNotificationTitle, notificationData.title); |
94 | 94 |
95 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct
ion); | 95 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct
ion); |
96 EXPECT_EQ(kNotificationLang, notificationData.lang); | 96 EXPECT_EQ(kNotificationLang, notificationData.lang); |
97 EXPECT_EQ(kNotificationBody, notificationData.body); | 97 EXPECT_EQ(kNotificationBody, notificationData.body); |
98 EXPECT_EQ(kNotificationTag, notificationData.tag); | 98 EXPECT_EQ(kNotificationTag, notificationData.tag); |
99 | 99 |
100 // TODO(peter): Test WebNotificationData.icon and WebNotificationAction.icon
when ExecutionContext::completeURL() works in this test. | 100 // TODO(peter): Test WebNotificationData.icon and WebNotificationAction.icon
when ExecutionContext::completeURL() works in this test. |
(...skipping 20 matching lines...) Expand all Loading... |
121 vibrationPattern.append(kNotificationVibration[i]); | 121 vibrationPattern.append(kNotificationVibration[i]); |
122 | 122 |
123 UnsignedLongOrUnsignedLongSequence vibrationSequence; | 123 UnsignedLongOrUnsignedLongSequence vibrationSequence; |
124 vibrationSequence.setUnsignedLongSequence(vibrationPattern); | 124 vibrationSequence.setUnsignedLongSequence(vibrationPattern); |
125 | 125 |
126 NotificationOptions options; | 126 NotificationOptions options; |
127 options.setVibrate(vibrationSequence); | 127 options.setVibrate(vibrationSequence); |
128 options.setSilent(true); | 128 options.setSilent(true); |
129 | 129 |
130 TrackExceptionState exceptionState; | 130 TrackExceptionState exceptionState; |
131 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 131 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
132 ASSERT_TRUE(exceptionState.hadException()); | 132 ASSERT_TRUE(exceptionState.hadException()); |
133 | 133 |
134 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep
tionState.message()); | 134 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep
tionState.message()); |
135 } | 135 } |
136 | 136 |
137 TEST_F(NotificationDataTest, RenotifyWithEmptyTag) | 137 TEST_F(NotificationDataTest, RenotifyWithEmptyTag) |
138 { | 138 { |
139 NotificationOptions options; | 139 NotificationOptions options; |
140 options.setTag(kNotificationEmptyTag); | 140 options.setTag(kNotificationEmptyTag); |
141 options.setRenotify(true); | 141 options.setRenotify(true); |
142 | 142 |
143 TrackExceptionState exceptionState; | 143 TrackExceptionState exceptionState; |
144 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 144 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
145 ASSERT_TRUE(exceptionState.hadException()); | 145 ASSERT_TRUE(exceptionState.hadException()); |
146 | 146 |
147 EXPECT_EQ("Notifications which set the renotify flag must specify a non-empt
y tag.", exceptionState.message()); | 147 EXPECT_EQ("Notifications which set the renotify flag must specify a non-empt
y tag.", exceptionState.message()); |
148 } | 148 } |
149 | 149 |
150 TEST_F(NotificationDataTest, InvalidIconUrls) | 150 TEST_F(NotificationDataTest, InvalidIconUrls) |
151 { | 151 { |
152 HeapVector<NotificationAction> actions; | 152 HeapVector<NotificationAction> actions; |
153 for (size_t i = 0; i < Notification::maxActions(); ++i) { | 153 for (size_t i = 0; i < Notification::maxActions(); ++i) { |
154 NotificationAction action; | 154 NotificationAction action; |
155 action.setAction(kNotificationActionAction); | 155 action.setAction(kNotificationActionAction); |
156 action.setTitle(kNotificationActionTitle); | 156 action.setTitle(kNotificationActionTitle); |
157 action.setIcon(kNotificationIconInvalid); | 157 action.setIcon(kNotificationIconInvalid); |
158 actions.append(action); | 158 actions.append(action); |
159 } | 159 } |
160 | 160 |
161 NotificationOptions options; | 161 NotificationOptions options; |
162 options.setIcon(kNotificationIconInvalid); | 162 options.setIcon(kNotificationIconInvalid); |
163 options.setActions(actions); | 163 options.setActions(actions); |
164 | 164 |
165 TrackExceptionState exceptionState; | 165 TrackExceptionState exceptionState; |
166 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 166 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
167 ASSERT_FALSE(exceptionState.hadException()); | 167 ASSERT_FALSE(exceptionState.hadException()); |
168 | 168 |
169 EXPECT_TRUE(notificationData.icon.isEmpty()); | 169 EXPECT_TRUE(notificationData.icon.isEmpty()); |
170 for (const auto& action : notificationData.actions) | 170 for (const auto& action : notificationData.actions) |
171 EXPECT_TRUE(action.icon.isEmpty()); | 171 EXPECT_TRUE(action.icon.isEmpty()); |
172 } | 172 } |
173 | 173 |
174 TEST_F(NotificationDataTest, VibrationNormalization) | 174 TEST_F(NotificationDataTest, VibrationNormalization) |
175 { | 175 { |
176 Vector<unsigned> unnormalizedPattern; | 176 Vector<unsigned> unnormalizedPattern; |
177 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationUnnormalized);
++i) | 177 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationUnnormalized);
++i) |
178 unnormalizedPattern.append(kNotificationVibrationUnnormalized[i]); | 178 unnormalizedPattern.append(kNotificationVibrationUnnormalized[i]); |
179 | 179 |
180 UnsignedLongOrUnsignedLongSequence vibrationSequence; | 180 UnsignedLongOrUnsignedLongSequence vibrationSequence; |
181 vibrationSequence.setUnsignedLongSequence(unnormalizedPattern); | 181 vibrationSequence.setUnsignedLongSequence(unnormalizedPattern); |
182 | 182 |
183 NotificationOptions options; | 183 NotificationOptions options; |
184 options.setVibrate(vibrationSequence); | 184 options.setVibrate(vibrationSequence); |
185 | 185 |
186 TrackExceptionState exceptionState; | 186 TrackExceptionState exceptionState; |
187 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 187 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
188 EXPECT_FALSE(exceptionState.hadException()); | 188 EXPECT_FALSE(exceptionState.hadException()); |
189 | 189 |
190 Vector<int> normalizedPattern; | 190 Vector<int> normalizedPattern; |
191 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationNormalized); +
+i) | 191 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationNormalized); +
+i) |
192 normalizedPattern.append(kNotificationVibrationNormalized[i]); | 192 normalizedPattern.append(kNotificationVibrationNormalized[i]); |
193 | 193 |
194 ASSERT_EQ(normalizedPattern.size(), notificationData.vibrate.size()); | 194 ASSERT_EQ(normalizedPattern.size(), notificationData.vibrate.size()); |
195 for (size_t i = 0; i < normalizedPattern.size(); ++i) | 195 for (size_t i = 0; i < normalizedPattern.size(); ++i) |
196 EXPECT_EQ(normalizedPattern[i], notificationData.vibrate[i]); | 196 EXPECT_EQ(normalizedPattern[i], notificationData.vibrate[i]); |
197 } | 197 } |
198 | 198 |
199 TEST_F(NotificationDataTest, DefaultTimestampValue) | 199 TEST_F(NotificationDataTest, DefaultTimestampValue) |
200 { | 200 { |
201 NotificationOptions options; | 201 NotificationOptions options; |
202 | 202 |
203 TrackExceptionState exceptionState; | 203 TrackExceptionState exceptionState; |
204 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 204 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
205 EXPECT_FALSE(exceptionState.hadException()); | 205 EXPECT_FALSE(exceptionState.hadException()); |
206 | 206 |
207 // The timestamp should be set to the current time since the epoch if it was
n't supplied by the developer. | 207 // The timestamp should be set to the current time since the epoch if it was
n't supplied by the developer. |
208 // "32" has no significance, but an equal comparison of the value could lead
to flaky failures. | 208 // "32" has no significance, but an equal comparison of the value could lead
to flaky failures. |
209 EXPECT_NEAR(notificationData.timestamp, WTF::currentTimeMS(), 32); | 209 EXPECT_NEAR(notificationData.timestamp, WTF::currentTimeMS(), 32); |
210 } | 210 } |
211 | 211 |
212 TEST_F(NotificationDataTest, DirectionValues) | 212 TEST_F(NotificationDataTest, DirectionValues) |
213 { | 213 { |
214 WTF::HashMap<String, WebNotificationData::Direction> mappings; | 214 WTF::HashMap<String, WebNotificationData::Direction> mappings; |
215 mappings.add("ltr", WebNotificationData::DirectionLeftToRight); | 215 mappings.add("ltr", WebNotificationData::DirectionLeftToRight); |
216 mappings.add("rtl", WebNotificationData::DirectionRightToLeft); | 216 mappings.add("rtl", WebNotificationData::DirectionRightToLeft); |
217 mappings.add("auto", WebNotificationData::DirectionAuto); | 217 mappings.add("auto", WebNotificationData::DirectionAuto); |
218 | 218 |
219 // Invalid values should default to "auto". | 219 // Invalid values should default to "auto". |
220 mappings.add("peter", WebNotificationData::DirectionAuto); | 220 mappings.add("peter", WebNotificationData::DirectionAuto); |
221 | 221 |
222 for (const String& direction : mappings.keys()) { | 222 for (const String& direction : mappings.keys()) { |
223 NotificationOptions options; | 223 NotificationOptions options; |
224 options.setDir(direction); | 224 options.setDir(direction); |
225 | 225 |
226 TrackExceptionState exceptionState; | 226 TrackExceptionState exceptionState; |
227 WebNotificationData notificationData = createWebNotificationData(executi
onContext(), kNotificationTitle, options, exceptionState); | 227 WebNotificationData notificationData = createWebNotificationData(getExec
utionContext(), kNotificationTitle, options, exceptionState); |
228 ASSERT_FALSE(exceptionState.hadException()); | 228 ASSERT_FALSE(exceptionState.hadException()); |
229 | 229 |
230 EXPECT_EQ(mappings.get(direction), notificationData.direction); | 230 EXPECT_EQ(mappings.get(direction), notificationData.direction); |
231 } | 231 } |
232 } | 232 } |
233 | 233 |
234 TEST_F(NotificationDataTest, MaximumActionCount) | 234 TEST_F(NotificationDataTest, MaximumActionCount) |
235 { | 235 { |
236 HeapVector<NotificationAction> actions; | 236 HeapVector<NotificationAction> actions; |
237 for (size_t i = 0; i < Notification::maxActions() + 2; ++i) { | 237 for (size_t i = 0; i < Notification::maxActions() + 2; ++i) { |
238 NotificationAction action; | 238 NotificationAction action; |
239 action.setAction(String::number(i)); | 239 action.setAction(String::number(i)); |
240 action.setTitle(kNotificationActionTitle); | 240 action.setTitle(kNotificationActionTitle); |
241 | 241 |
242 actions.append(action); | 242 actions.append(action); |
243 } | 243 } |
244 | 244 |
245 NotificationOptions options; | 245 NotificationOptions options; |
246 options.setActions(actions); | 246 options.setActions(actions); |
247 | 247 |
248 TrackExceptionState exceptionState; | 248 TrackExceptionState exceptionState; |
249 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 249 WebNotificationData notificationData = createWebNotificationData(getExecutio
nContext(), kNotificationTitle, options, exceptionState); |
250 ASSERT_FALSE(exceptionState.hadException()); | 250 ASSERT_FALSE(exceptionState.hadException()); |
251 | 251 |
252 // The stored actions will be capped to |maxActions| entries. | 252 // The stored actions will be capped to |maxActions| entries. |
253 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size()); | 253 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size()); |
254 | 254 |
255 for (size_t i = 0; i < Notification::maxActions(); ++i) { | 255 for (size_t i = 0; i < Notification::maxActions(); ++i) { |
256 WebString expectedAction = String::number(i); | 256 WebString expectedAction = String::number(i); |
257 EXPECT_EQ(expectedAction, notificationData.actions[i].action); | 257 EXPECT_EQ(expectedAction, notificationData.actions[i].action); |
258 } | 258 } |
259 } | 259 } |
260 | 260 |
261 } // namespace | 261 } // namespace |
262 } // namespace blink | 262 } // namespace blink |
OLD | NEW |