Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: ui/accessibility/ax_node_position_unittest.cc

Issue 2271893002: Creates AXPosition to uniquely identify a position in the accessibility tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed some compilation errors on the Mac. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/accessibility/ax_node_position.cc ('k') | ui/accessibility/ax_position.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <stdint.h>
6
7 #include <memory>
8 #include <vector>
9
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/accessibility/ax_enums.h"
12 #include "ui/accessibility/ax_node.h"
13 #include "ui/accessibility/ax_node_data.h"
14 #include "ui/accessibility/ax_node_position.h"
15 #include "ui/accessibility/ax_serializable_tree.h"
16 #include "ui/accessibility/ax_tree_serializer.h"
17 #include "ui/accessibility/ax_tree_update.h"
18
19 namespace ui {
20
21 using TestPositionType = AXPosition<AXNodePosition, AXNode>;
22
23 namespace {
24
25 class AXPositionTest : public testing::Test {
26 public:
27 const char* TEXT_VALUE = "Line 1\nLine 2";
28
29 AXPositionTest();
30 ~AXPositionTest() override;
31
32 protected:
33 void SetUp() override;
34 void TearDown() override;
35
36 AXNodeData root_;
37 AXNodeData button_;
38 AXNodeData check_box_;
39 AXNodeData text_field_;
40 AXNodeData static_text1_;
41 AXNodeData line_break_;
42 AXNodeData static_text2_;
43 AXNodeData inline_box1_;
44 AXNodeData inline_box2_;
45
46 AXTree tree_;
47 DISALLOW_COPY_AND_ASSIGN(AXPositionTest);
48 };
49
50 AXPositionTest::AXPositionTest() {}
51
52 AXPositionTest::~AXPositionTest() {}
53
54 void AXPositionTest::SetUp() {
55 std::vector<int32_t> line_start_offsets{0, 6};
56 std::vector<int32_t> word_starts{0, 5};
57 std::vector<int32_t> word_ends{3, 6};
58
59 root_.id = 1;
60 button_.id = 2;
61 check_box_.id = 3;
62 text_field_.id = 4;
63 static_text1_.id = 5;
64 inline_box1_.id = 6;
65 line_break_.id = 7;
66 static_text2_.id = 8;
67 inline_box2_.id = 9;
68
69 root_.role = AX_ROLE_DIALOG;
70 root_.state = 1 << AX_STATE_FOCUSABLE;
71 root_.location = gfx::RectF(0, 0, 800, 600);
72
73 button_.role = AX_ROLE_BUTTON;
74 button_.state = 1 << AX_STATE_HASPOPUP;
75 button_.SetName("Sample button_");
76 button_.location = gfx::RectF(20, 20, 200, 30);
77 root_.child_ids.push_back(button_.id);
78
79 check_box_.role = AX_ROLE_CHECK_BOX;
80 check_box_.state = 1 << AX_STATE_CHECKED;
81 check_box_.SetName("Sample check box");
82 check_box_.location = gfx::RectF(20, 50, 200, 30);
83 root_.child_ids.push_back(check_box_.id);
84
85 text_field_.role = AX_ROLE_TEXT_FIELD;
86 text_field_.state = 1 << AX_STATE_EDITABLE;
87 text_field_.SetValue(TEXT_VALUE);
88 text_field_.AddIntListAttribute(AX_ATTR_CACHED_LINE_STARTS,
89 line_start_offsets);
90 text_field_.child_ids.push_back(static_text1_.id);
91 text_field_.child_ids.push_back(line_break_.id);
92 text_field_.child_ids.push_back(static_text2_.id);
93 root_.child_ids.push_back(text_field_.id);
94
95 static_text1_.role = AX_ROLE_STATIC_TEXT;
96 static_text1_.state = 1 << AX_STATE_EDITABLE;
97 static_text1_.SetName("Line 1");
98 static_text1_.child_ids.push_back(inline_box1_.id);
99
100 inline_box1_.role = AX_ROLE_INLINE_TEXT_BOX;
101 inline_box1_.state = 1 << AX_STATE_EDITABLE;
102 inline_box1_.SetName("Line 1");
103 inline_box1_.AddIntListAttribute(AX_ATTR_WORD_STARTS, word_starts);
104 inline_box1_.AddIntListAttribute(AX_ATTR_WORD_ENDS, word_ends);
105
106 line_break_.role = AX_ROLE_LINE_BREAK;
107 line_break_.state = 1 << AX_STATE_EDITABLE;
108 line_break_.SetName("\n");
109
110 static_text2_.role = AX_ROLE_STATIC_TEXT;
111 static_text2_.state = 1 << AX_STATE_EDITABLE;
112 static_text2_.SetName("Line 2");
113 static_text2_.child_ids.push_back(inline_box2_.id);
114
115 inline_box2_.role = AX_ROLE_INLINE_TEXT_BOX;
116 inline_box2_.state = 1 << AX_STATE_EDITABLE;
117 inline_box2_.SetName("Line 2");
118 inline_box2_.AddIntListAttribute(AX_ATTR_WORD_STARTS, word_starts);
119 inline_box2_.AddIntListAttribute(AX_ATTR_WORD_ENDS, word_ends);
120
121 AXTreeUpdate initial_state;
122 initial_state.root_id = 1;
123 initial_state.nodes.push_back(root_);
124 initial_state.nodes.push_back(button_);
125 initial_state.nodes.push_back(check_box_);
126 initial_state.nodes.push_back(text_field_);
127 initial_state.nodes.push_back(static_text1_);
128 initial_state.nodes.push_back(inline_box1_);
129 initial_state.nodes.push_back(line_break_);
130 initial_state.nodes.push_back(static_text2_);
131 initial_state.nodes.push_back(inline_box2_);
132 initial_state.has_tree_data = true;
133 initial_state.tree_data.tree_id = 0;
134 initial_state.tree_data.title = "Dialog title";
135 AXSerializableTree src_tree(initial_state);
136
137 std::unique_ptr<AXTreeSource<const AXNode*, AXNodeData, AXTreeData>>
138 tree_source(src_tree.CreateTreeSource());
139 AXTreeSerializer<const AXNode*, AXNodeData, AXTreeData> serializer(
140 tree_source.get());
141 AXTreeUpdate update;
142 serializer.SerializeChanges(src_tree.root(), &update);
143 ASSERT_TRUE(tree_.Unserialize(update));
144 AXNodePosition::SetTreeForTesting(&tree_);
145 }
146
147 void AXPositionTest::TearDown() {
148 AXNodePosition::SetTreeForTesting(nullptr);
149 }
150
151 } // namespace
152
153 TEST_F(AXPositionTest, AtStartOfAnchorWithNullPosition) {
154 std::unique_ptr<TestPositionType> null_position(
155 AXNodePosition::CreateNullPosition());
156 ASSERT_NE(nullptr, null_position);
157 EXPECT_FALSE(null_position->AtStartOfAnchor());
158 }
159
160 TEST_F(AXPositionTest, AtStartOfAnchorWithTreePosition) {
161 std::unique_ptr<TestPositionType> tree_position(
162 AXNodePosition::CreateTreePosition(tree_.data().tree_id, root_.id,
163 0 /* child_index */));
164 ASSERT_NE(nullptr, tree_position);
165 EXPECT_TRUE(tree_position->AtStartOfAnchor());
166
167 tree_position.reset(AXNodePosition::CreateTreePosition(
168 tree_.data().tree_id, root_.id, 1 /* child_index */));
169 ASSERT_NE(nullptr, tree_position);
170 EXPECT_FALSE(tree_position->AtStartOfAnchor());
171
172 tree_position.reset(AXNodePosition::CreateTreePosition(
173 tree_.data().tree_id, root_.id, 3 /* child_index */));
174 ASSERT_NE(nullptr, tree_position);
175 EXPECT_FALSE(tree_position->AtStartOfAnchor());
176 }
177
178 TEST_F(AXPositionTest, AtStartOfAnchorWithTextPosition) {
179 std::unique_ptr<TestPositionType> text_position(
180 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
181 0 /* text_offset */,
182 AX_TEXT_AFFINITY_UPSTREAM));
183 ASSERT_NE(nullptr, text_position);
184 EXPECT_TRUE(text_position->AtStartOfAnchor());
185 text_position.reset(AXNodePosition::CreateTextPosition(
186 tree_.data().tree_id, inline_box1_.id, 1 /* text_offset */,
187 AX_TEXT_AFFINITY_UPSTREAM));
188 ASSERT_NE(nullptr, text_position);
189 EXPECT_FALSE(text_position->AtStartOfAnchor());
190
191 text_position.reset(AXNodePosition::CreateTextPosition(
192 tree_.data().tree_id, inline_box1_.id, 6 /* text_offset */,
193 AX_TEXT_AFFINITY_UPSTREAM));
194 ASSERT_NE(nullptr, text_position);
195 EXPECT_FALSE(text_position->AtStartOfAnchor());
196 }
197
198 TEST_F(AXPositionTest, AtEndOfAnchorWithNullPosition) {
199 std::unique_ptr<TestPositionType> null_position(
200 AXNodePosition::CreateNullPosition());
201 ASSERT_NE(nullptr, null_position);
202 EXPECT_FALSE(null_position->AtEndOfAnchor());
203 }
204
205 TEST_F(AXPositionTest, AtEndOfAnchorWithTreePosition) {
206 std::unique_ptr<TestPositionType> tree_position(
207 AXNodePosition::CreateTreePosition(tree_.data().tree_id, root_.id,
208 3 /* child_index */));
209 ASSERT_NE(nullptr, tree_position);
210 EXPECT_TRUE(tree_position->AtEndOfAnchor());
211
212 tree_position.reset(AXNodePosition::CreateTreePosition(
213 tree_.data().tree_id, root_.id, 2 /* child_index */));
214 ASSERT_NE(nullptr, tree_position);
215 EXPECT_FALSE(tree_position->AtEndOfAnchor());
216
217 tree_position.reset(AXNodePosition::CreateTreePosition(
218 tree_.data().tree_id, root_.id, 0 /* child_index */));
219 ASSERT_NE(nullptr, tree_position);
220 EXPECT_FALSE(tree_position->AtEndOfAnchor());
221 }
222
223 TEST_F(AXPositionTest, AtEndOfAnchorWithTextPosition) {
224 std::unique_ptr<TestPositionType> text_position(
225 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
226 6 /* text_offset */,
227 AX_TEXT_AFFINITY_UPSTREAM));
228 ASSERT_NE(nullptr, text_position);
229 EXPECT_TRUE(text_position->AtEndOfAnchor());
230
231 text_position.reset(AXNodePosition::CreateTextPosition(
232 tree_.data().tree_id, inline_box1_.id, 5 /* text_offset */,
233 AX_TEXT_AFFINITY_UPSTREAM));
234 ASSERT_NE(nullptr, text_position);
235 EXPECT_FALSE(text_position->AtEndOfAnchor());
236
237 text_position.reset(AXNodePosition::CreateTextPosition(
238 tree_.data().tree_id, inline_box1_.id, 0 /* text_offset */,
239 AX_TEXT_AFFINITY_UPSTREAM));
240 ASSERT_NE(nullptr, text_position);
241 EXPECT_FALSE(text_position->AtEndOfAnchor());
242 }
243
244 TEST_F(AXPositionTest, CreatePositionAtStartOfAnchorWithNullPosition) {
245 std::unique_ptr<TestPositionType> null_position(
246 AXNodePosition::CreateNullPosition());
247 ASSERT_NE(nullptr, null_position);
248 std::unique_ptr<TestPositionType> test_position(
249 null_position->CreatePositionAtStartOfAnchor());
250 EXPECT_NE(nullptr, test_position);
251 EXPECT_TRUE(test_position->IsNullPosition());
252 }
253
254 TEST_F(AXPositionTest, CreatePositionAtStartOfAnchorWithTreePosition) {
255 std::unique_ptr<TestPositionType> tree_position(
256 AXNodePosition::CreateTreePosition(tree_.data().tree_id, root_.id,
257 0 /* child_index */));
258 ASSERT_NE(nullptr, tree_position);
259 std::unique_ptr<TestPositionType> test_position(
260 tree_position->CreatePositionAtStartOfAnchor());
261 EXPECT_NE(nullptr, test_position);
262 EXPECT_TRUE(test_position->IsTreePosition());
263 EXPECT_EQ(root_.id, test_position->anchor_id());
264 EXPECT_EQ(0, test_position->child_index());
265
266 tree_position.reset(AXNodePosition::CreateTreePosition(
267 tree_.data().tree_id, root_.id, 1 /* child_index */));
268 ASSERT_NE(nullptr, tree_position);
269 test_position.reset(tree_position->CreatePositionAtStartOfAnchor());
270 EXPECT_NE(nullptr, test_position);
271 EXPECT_TRUE(test_position->IsTreePosition());
272 EXPECT_EQ(root_.id, test_position->anchor_id());
273 EXPECT_EQ(0, test_position->child_index());
274 }
275
276 TEST_F(AXPositionTest, CreatePositionAtStartOfAnchorWithTextPosition) {
277 std::unique_ptr<TestPositionType> text_position(
278 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
279 0 /* text_offset */,
280 AX_TEXT_AFFINITY_UPSTREAM));
281 ASSERT_NE(nullptr, text_position);
282 std::unique_ptr<TestPositionType> test_position(
283 text_position->CreatePositionAtStartOfAnchor());
284 EXPECT_NE(nullptr, test_position);
285 EXPECT_TRUE(test_position->IsTextPosition());
286 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
287 EXPECT_EQ(0, test_position->text_offset());
288
289 text_position.reset(AXNodePosition::CreateTextPosition(
290 tree_.data().tree_id, inline_box1_.id, 1 /* text_offset */,
291 AX_TEXT_AFFINITY_UPSTREAM));
292 ASSERT_NE(nullptr, text_position);
293 test_position.reset(text_position->CreatePositionAtStartOfAnchor());
294 EXPECT_NE(nullptr, test_position);
295 EXPECT_TRUE(test_position->IsTextPosition());
296 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
297 EXPECT_EQ(0, test_position->text_offset());
298 }
299
300 TEST_F(AXPositionTest, CreatePositionAtEndOfAnchorWithNullPosition) {
301 std::unique_ptr<TestPositionType> null_position(
302 AXNodePosition::CreateNullPosition());
303 ASSERT_NE(nullptr, null_position);
304 std::unique_ptr<TestPositionType> test_position(
305 null_position->CreatePositionAtEndOfAnchor());
306 EXPECT_NE(nullptr, test_position);
307 EXPECT_TRUE(test_position->IsNullPosition());
308 }
309
310 TEST_F(AXPositionTest, CreatePositionAtEndOfAnchorWithTreePosition) {
311 std::unique_ptr<TestPositionType> tree_position(
312 AXNodePosition::CreateTreePosition(tree_.data().tree_id, root_.id,
313 3 /* child_index */));
314 ASSERT_NE(nullptr, tree_position);
315 std::unique_ptr<TestPositionType> test_position(
316 tree_position->CreatePositionAtEndOfAnchor());
317 EXPECT_NE(nullptr, test_position);
318 EXPECT_TRUE(test_position->IsTreePosition());
319 EXPECT_EQ(root_.id, test_position->anchor_id());
320 EXPECT_EQ(3, test_position->child_index());
321
322 tree_position.reset(AXNodePosition::CreateTreePosition(
323 tree_.data().tree_id, root_.id, 1 /* child_index */));
324 ASSERT_NE(nullptr, tree_position);
325 test_position.reset(tree_position->CreatePositionAtEndOfAnchor());
326 EXPECT_NE(nullptr, test_position);
327 EXPECT_TRUE(test_position->IsTreePosition());
328 EXPECT_EQ(root_.id, test_position->anchor_id());
329 EXPECT_EQ(3, test_position->child_index());
330 }
331
332 TEST_F(AXPositionTest, CreatePositionAtEndOfAnchorWithTextPosition) {
333 std::unique_ptr<TestPositionType> text_position(
334 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
335 6 /* text_offset */,
336 AX_TEXT_AFFINITY_UPSTREAM));
337 ASSERT_NE(nullptr, text_position);
338 std::unique_ptr<TestPositionType> test_position(
339 text_position->CreatePositionAtEndOfAnchor());
340 EXPECT_NE(nullptr, test_position);
341 EXPECT_TRUE(test_position->IsTextPosition());
342 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
343 EXPECT_EQ(6, test_position->text_offset());
344
345 text_position.reset(AXNodePosition::CreateTextPosition(
346 tree_.data().tree_id, inline_box1_.id, 5 /* text_offset */,
347 AX_TEXT_AFFINITY_UPSTREAM));
348 ASSERT_NE(nullptr, text_position);
349 test_position.reset(text_position->CreatePositionAtEndOfAnchor());
350 EXPECT_NE(nullptr, test_position);
351 EXPECT_TRUE(test_position->IsTextPosition());
352 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
353 EXPECT_EQ(6, test_position->text_offset());
354 }
355
356 TEST_F(AXPositionTest, CreateChildPositionAtWithNullPosition) {
357 std::unique_ptr<TestPositionType> null_position(
358 AXNodePosition::CreateNullPosition());
359 ASSERT_NE(nullptr, null_position);
360 std::unique_ptr<TestPositionType> test_position(
361 null_position->CreateChildPositionAt(0));
362 EXPECT_NE(nullptr, test_position);
363 EXPECT_TRUE(test_position->IsNullPosition());
364 }
365
366 TEST_F(AXPositionTest, CreateChildPositionAtWithTreePosition) {
367 std::unique_ptr<TestPositionType> tree_position(
368 AXNodePosition::CreateTreePosition(tree_.data().tree_id, root_.id,
369 2 /* child_index */));
370 ASSERT_NE(nullptr, tree_position);
371 std::unique_ptr<TestPositionType> test_position(
372 tree_position->CreateChildPositionAt(1));
373 EXPECT_NE(nullptr, test_position);
374 EXPECT_TRUE(test_position->IsTreePosition());
375 EXPECT_EQ(check_box_.id, test_position->anchor_id());
376 EXPECT_EQ(0, test_position->child_index());
377
378 tree_position.reset(AXNodePosition::CreateTreePosition(
379 tree_.data().tree_id, button_.id, 0 /* child_index */));
380 ASSERT_NE(nullptr, tree_position);
381 test_position.reset(tree_position->CreateChildPositionAt(0));
382 EXPECT_NE(nullptr, test_position);
383 EXPECT_TRUE(test_position->IsNullPosition());
384 }
385
386 TEST_F(AXPositionTest, CreateChildPositionAtWithTextPosition) {
387 std::unique_ptr<TestPositionType> text_position(
388 AXNodePosition::CreateTextPosition(tree_.data().tree_id, static_text1_.id,
389 5 /* text_offset */,
390 AX_TEXT_AFFINITY_UPSTREAM));
391 ASSERT_NE(nullptr, text_position);
392 std::unique_ptr<TestPositionType> test_position(
393 text_position->CreateChildPositionAt(0));
394 EXPECT_NE(nullptr, test_position);
395 EXPECT_TRUE(test_position->IsTextPosition());
396 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
397 EXPECT_EQ(0, test_position->text_offset());
398
399 text_position.reset(AXNodePosition::CreateTextPosition(
400 tree_.data().tree_id, static_text2_.id, 4 /* text_offset */,
401 AX_TEXT_AFFINITY_UPSTREAM));
402 ASSERT_NE(nullptr, text_position);
403 test_position.reset(text_position->CreateChildPositionAt(1));
404 EXPECT_NE(nullptr, test_position);
405 EXPECT_TRUE(test_position->IsNullPosition());
406 }
407
408 TEST_F(AXPositionTest, CreateParentPositionWithNullPosition) {
409 std::unique_ptr<TestPositionType> null_position(
410 AXNodePosition::CreateNullPosition());
411 ASSERT_NE(nullptr, null_position);
412 std::unique_ptr<TestPositionType> test_position(
413 null_position->CreateParentPosition());
414 EXPECT_NE(nullptr, test_position);
415 EXPECT_TRUE(test_position->IsNullPosition());
416 }
417
418 TEST_F(AXPositionTest, CreateParentPositionWithTreePosition) {
419 std::unique_ptr<TestPositionType> tree_position(
420 AXNodePosition::CreateTreePosition(tree_.data().tree_id, check_box_.id,
421 0 /* child_index */));
422 ASSERT_NE(nullptr, tree_position);
423 std::unique_ptr<TestPositionType> test_position(
424 tree_position->CreateParentPosition());
425 EXPECT_NE(nullptr, test_position);
426 EXPECT_TRUE(test_position->IsTreePosition());
427 EXPECT_EQ(root_.id, test_position->anchor_id());
428 EXPECT_EQ(0, test_position->child_index());
429
430 tree_position.reset(AXNodePosition::CreateTreePosition(
431 tree_.data().tree_id, root_.id, 1 /* child_index */));
432 ASSERT_NE(nullptr, tree_position);
433 test_position.reset(tree_position->CreateParentPosition());
434 EXPECT_NE(nullptr, test_position);
435 EXPECT_TRUE(test_position->IsNullPosition());
436 }
437
438 TEST_F(AXPositionTest, CreateParentPositionWithTextPosition) {
439 std::unique_ptr<TestPositionType> text_position(
440 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
441 5 /* text_offset */,
442 AX_TEXT_AFFINITY_UPSTREAM));
443 ASSERT_NE(nullptr, text_position);
444 std::unique_ptr<TestPositionType> test_position(
445 text_position->CreateParentPosition());
446 EXPECT_NE(nullptr, test_position);
447 EXPECT_TRUE(test_position->IsTextPosition());
448 EXPECT_EQ(static_text1_.id, test_position->anchor_id());
449 EXPECT_EQ(0, test_position->text_offset());
450 }
451
452 TEST_F(AXPositionTest, CreateNextCharacterPositionWithNullPosition) {
453 std::unique_ptr<TestPositionType> null_position(
454 AXNodePosition::CreateNullPosition());
455 ASSERT_NE(nullptr, null_position);
456 std::unique_ptr<TestPositionType> test_position(
457 null_position->CreateNextCharacterPosition());
458 EXPECT_NE(nullptr, test_position);
459 EXPECT_TRUE(test_position->IsNullPosition());
460 }
461
462 TEST_F(AXPositionTest, CreateNextCharacterPositionWithTextPosition) {
463 std::unique_ptr<TestPositionType> text_position(
464 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box1_.id,
465 4 /* text_offset */,
466 AX_TEXT_AFFINITY_UPSTREAM));
467 ASSERT_NE(nullptr, text_position);
468 std::unique_ptr<TestPositionType> test_position(
469 text_position->CreateNextCharacterPosition());
470 EXPECT_NE(nullptr, test_position);
471 EXPECT_TRUE(test_position->IsTextPosition());
472 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
473 EXPECT_EQ(5, test_position->text_offset());
474
475 text_position.reset(AXNodePosition::CreateTextPosition(
476 tree_.data().tree_id, inline_box1_.id, 5 /* text_offset */,
477 AX_TEXT_AFFINITY_UPSTREAM));
478 ASSERT_NE(nullptr, text_position);
479 test_position.reset(text_position->CreateNextCharacterPosition());
480 EXPECT_NE(nullptr, test_position);
481 EXPECT_TRUE(test_position->IsTextPosition());
482 EXPECT_EQ(line_break_.id, test_position->anchor_id());
483 EXPECT_EQ(0, test_position->text_offset());
484
485 test_position.reset(test_position->CreateNextCharacterPosition());
486 EXPECT_NE(nullptr, test_position);
487 EXPECT_TRUE(test_position->IsTextPosition());
488 EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
489 EXPECT_EQ(0, test_position->text_offset());
490
491 test_position.reset(test_position->CreateNextCharacterPosition());
492 EXPECT_NE(nullptr, test_position);
493 EXPECT_TRUE(test_position->IsTextPosition());
494 EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
495 EXPECT_EQ(1, test_position->text_offset());
496
497 text_position.reset(AXNodePosition::CreateTextPosition(
498 tree_.data().tree_id, check_box_.id, 15 /* text_offset */,
499 AX_TEXT_AFFINITY_UPSTREAM));
500 ASSERT_NE(nullptr, text_position);
501 test_position.reset(text_position->CreateNextCharacterPosition());
502 EXPECT_NE(nullptr, test_position);
503 EXPECT_TRUE(test_position->IsTextPosition());
504 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
505 EXPECT_EQ(0, test_position->text_offset());
506 }
507
508 TEST_F(AXPositionTest, CreatePreviousCharacterPositionWithNullPosition) {
509 std::unique_ptr<TestPositionType> null_position(
510 AXNodePosition::CreateNullPosition());
511 ASSERT_NE(nullptr, null_position);
512 std::unique_ptr<TestPositionType> test_position(
513 null_position->CreatePreviousCharacterPosition());
514 EXPECT_NE(nullptr, test_position);
515 EXPECT_TRUE(test_position->IsNullPosition());
516 }
517
518 TEST_F(AXPositionTest, CreatePreviousCharacterPositionWithTextPosition) {
519 std::unique_ptr<TestPositionType> text_position(
520 AXNodePosition::CreateTextPosition(tree_.data().tree_id, inline_box2_.id,
521 5 /* text_offset */,
522 AX_TEXT_AFFINITY_UPSTREAM));
523 ASSERT_NE(nullptr, text_position);
524 std::unique_ptr<TestPositionType> test_position(
525 text_position->CreatePreviousCharacterPosition());
526 EXPECT_NE(nullptr, test_position);
527 EXPECT_TRUE(test_position->IsTextPosition());
528 EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
529 EXPECT_EQ(4, test_position->text_offset());
530
531 text_position.reset(AXNodePosition::CreateTextPosition(
532 tree_.data().tree_id, inline_box2_.id, 0 /* text_offset */,
533 AX_TEXT_AFFINITY_UPSTREAM));
534 ASSERT_NE(nullptr, text_position);
535 test_position.reset(text_position->CreatePreviousCharacterPosition());
536 EXPECT_NE(nullptr, test_position);
537 EXPECT_TRUE(test_position->IsTextPosition());
538 EXPECT_EQ(line_break_.id, test_position->anchor_id());
539 EXPECT_EQ(0, test_position->text_offset());
540
541 test_position.reset(test_position->CreatePreviousCharacterPosition());
542 EXPECT_NE(nullptr, test_position);
543 EXPECT_TRUE(test_position->IsTextPosition());
544 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
545 EXPECT_EQ(5, test_position->text_offset());
546
547 test_position.reset(test_position->CreatePreviousCharacterPosition());
548 EXPECT_NE(nullptr, test_position);
549 EXPECT_TRUE(test_position->IsTextPosition());
550 EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
551 EXPECT_EQ(4, test_position->text_offset());
552
553 text_position.reset(AXNodePosition::CreateTextPosition(
554 tree_.data().tree_id, inline_box1_.id, 0 /* text_offset */,
555 AX_TEXT_AFFINITY_UPSTREAM));
556 ASSERT_NE(nullptr, text_position);
557 test_position.reset(text_position->CreatePreviousCharacterPosition());
558 EXPECT_NE(nullptr, test_position);
559 EXPECT_TRUE(test_position->IsTextPosition());
560 EXPECT_EQ(check_box_.id, test_position->anchor_id());
561 EXPECT_EQ(15, test_position->text_offset());
562 }
563
564 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accessibility/ax_node_position.cc ('k') | ui/accessibility/ax_position.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698