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

Side by Side Diff: content/browser/accessibility/browser_accessibility_win_unittest.cc

Issue 2860883003: A11y: Add/refactor methods for manipulating bitfields on AXNodeData. (Closed)
Patch Set: Delete AXNodeData::Init() and clear bitfields in AXNodeData() instead. Created 3 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/accessibility/browser_accessibility_win.h" 5 #include "content/browser/accessibility/browser_accessibility_win.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 // Test that BrowserAccessibilityManager correctly releases the tree of 120 // Test that BrowserAccessibilityManager correctly releases the tree of
121 // BrowserAccessibility instances upon delete. 121 // BrowserAccessibility instances upon delete.
122 TEST_F(BrowserAccessibilityTest, TestNoLeaks) { 122 TEST_F(BrowserAccessibilityTest, TestNoLeaks) {
123 // Create ui::AXNodeData objects for a simple document tree, 123 // Create ui::AXNodeData objects for a simple document tree,
124 // representing the accessibility information used to initialize 124 // representing the accessibility information used to initialize
125 // BrowserAccessibilityManager. 125 // BrowserAccessibilityManager.
126 ui::AXNodeData button; 126 ui::AXNodeData button;
127 button.id = 2; 127 button.id = 2;
128 button.SetName("Button"); 128 button.SetName("Button");
129 button.role = ui::AX_ROLE_BUTTON; 129 button.role = ui::AX_ROLE_BUTTON;
130 button.state = 0;
131 130
132 ui::AXNodeData checkbox; 131 ui::AXNodeData checkbox;
133 checkbox.id = 3; 132 checkbox.id = 3;
134 checkbox.SetName("Checkbox"); 133 checkbox.SetName("Checkbox");
135 checkbox.role = ui::AX_ROLE_CHECK_BOX; 134 checkbox.role = ui::AX_ROLE_CHECK_BOX;
136 checkbox.state = 0;
137 135
138 ui::AXNodeData root; 136 ui::AXNodeData root;
139 root.id = 1; 137 root.id = 1;
140 root.SetName("Document"); 138 root.SetName("Document");
141 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 139 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
142 root.state = 0;
143 root.child_ids.push_back(2); 140 root.child_ids.push_back(2);
144 root.child_ids.push_back(3); 141 root.child_ids.push_back(3);
145 142
146 // Construct a BrowserAccessibilityManager with this 143 // Construct a BrowserAccessibilityManager with this
147 // ui::AXNodeData tree and a factory for an instance-counting 144 // ui::AXNodeData tree and a factory for an instance-counting
148 // BrowserAccessibility, and ensure that exactly 3 instances were 145 // BrowserAccessibility, and ensure that exactly 3 instances were
149 // created. Note that the manager takes ownership of the factory. 146 // created. Note that the manager takes ownership of the factory.
150 CountedBrowserAccessibility::reset(); 147 CountedBrowserAccessibility::reset();
151 std::unique_ptr<BrowserAccessibilityManager> manager( 148 std::unique_ptr<BrowserAccessibilityManager> manager(
152 BrowserAccessibilityManager::Create( 149 BrowserAccessibilityManager::Create(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 } 185 }
189 186
190 TEST_F(BrowserAccessibilityTest, TestChildrenChange) { 187 TEST_F(BrowserAccessibilityTest, TestChildrenChange) {
191 // Create ui::AXNodeData objects for a simple document tree, 188 // Create ui::AXNodeData objects for a simple document tree,
192 // representing the accessibility information used to initialize 189 // representing the accessibility information used to initialize
193 // BrowserAccessibilityManager. 190 // BrowserAccessibilityManager.
194 ui::AXNodeData text; 191 ui::AXNodeData text;
195 text.id = 2; 192 text.id = 2;
196 text.role = ui::AX_ROLE_STATIC_TEXT; 193 text.role = ui::AX_ROLE_STATIC_TEXT;
197 text.SetName("old text"); 194 text.SetName("old text");
198 text.state = 0;
199 195
200 ui::AXNodeData root; 196 ui::AXNodeData root;
201 root.id = 1; 197 root.id = 1;
202 root.SetName("Document"); 198 root.SetName("Document");
203 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 199 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
204 root.state = 0;
205 root.child_ids.push_back(2); 200 root.child_ids.push_back(2);
206 201
207 // Construct a BrowserAccessibilityManager with this 202 // Construct a BrowserAccessibilityManager with this
208 // ui::AXNodeData tree and a factory for an instance-counting 203 // ui::AXNodeData tree and a factory for an instance-counting
209 // BrowserAccessibility. 204 // BrowserAccessibility.
210 CountedBrowserAccessibility::reset(); 205 CountedBrowserAccessibility::reset();
211 std::unique_ptr<BrowserAccessibilityManager> manager( 206 std::unique_ptr<BrowserAccessibilityManager> manager(
212 BrowserAccessibilityManager::Create( 207 BrowserAccessibilityManager::Create(
213 MakeAXTreeUpdate(root, text), nullptr, 208 MakeAXTreeUpdate(root, text), nullptr,
214 new CountedBrowserAccessibilityFactory())); 209 new CountedBrowserAccessibilityFactory()));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 265 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
271 } 266 }
272 267
273 TEST_F(BrowserAccessibilityTest, TestChildrenChangeNoLeaks) { 268 TEST_F(BrowserAccessibilityTest, TestChildrenChangeNoLeaks) {
274 // Create ui::AXNodeData objects for a simple document tree, 269 // Create ui::AXNodeData objects for a simple document tree,
275 // representing the accessibility information used to initialize 270 // representing the accessibility information used to initialize
276 // BrowserAccessibilityManager. 271 // BrowserAccessibilityManager.
277 ui::AXNodeData div; 272 ui::AXNodeData div;
278 div.id = 2; 273 div.id = 2;
279 div.role = ui::AX_ROLE_GROUP; 274 div.role = ui::AX_ROLE_GROUP;
280 div.state = 0;
281 275
282 ui::AXNodeData text3; 276 ui::AXNodeData text3;
283 text3.id = 3; 277 text3.id = 3;
284 text3.role = ui::AX_ROLE_STATIC_TEXT; 278 text3.role = ui::AX_ROLE_STATIC_TEXT;
285 text3.state = 0;
286 279
287 ui::AXNodeData text4; 280 ui::AXNodeData text4;
288 text4.id = 4; 281 text4.id = 4;
289 text4.role = ui::AX_ROLE_STATIC_TEXT; 282 text4.role = ui::AX_ROLE_STATIC_TEXT;
290 text4.state = 0;
291 283
292 div.child_ids.push_back(3); 284 div.child_ids.push_back(3);
293 div.child_ids.push_back(4); 285 div.child_ids.push_back(4);
294 286
295 ui::AXNodeData root; 287 ui::AXNodeData root;
296 root.id = 1; 288 root.id = 1;
297 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 289 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
298 root.state = 0;
299 root.child_ids.push_back(2); 290 root.child_ids.push_back(2);
300 291
301 // Construct a BrowserAccessibilityManager with this 292 // Construct a BrowserAccessibilityManager with this
302 // ui::AXNodeData tree and a factory for an instance-counting 293 // ui::AXNodeData tree and a factory for an instance-counting
303 // BrowserAccessibility and ensure that exactly 4 instances were 294 // BrowserAccessibility and ensure that exactly 4 instances were
304 // created. Note that the manager takes ownership of the factory. 295 // created. Note that the manager takes ownership of the factory.
305 CountedBrowserAccessibility::reset(); 296 CountedBrowserAccessibility::reset();
306 std::unique_ptr<BrowserAccessibilityManager> manager( 297 std::unique_ptr<BrowserAccessibilityManager> manager(
307 BrowserAccessibilityManager::Create( 298 BrowserAccessibilityManager::Create(
308 MakeAXTreeUpdate(root, div, text3, text4), nullptr, 299 MakeAXTreeUpdate(root, div, text3, text4), nullptr,
(...skipping 24 matching lines...) Expand all
333 std::string text_value = line1 + '\n' + line2; 324 std::string text_value = line1 + '\n' + line2;
334 325
335 ui::AXNodeData root; 326 ui::AXNodeData root;
336 root.id = 1; 327 root.id = 1;
337 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 328 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
338 root.child_ids.push_back(2); 329 root.child_ids.push_back(2);
339 330
340 ui::AXNodeData text_field; 331 ui::AXNodeData text_field;
341 text_field.id = 2; 332 text_field.id = 2;
342 text_field.role = ui::AX_ROLE_TEXT_FIELD; 333 text_field.role = ui::AX_ROLE_TEXT_FIELD;
343 text_field.state = 1 << ui::AX_STATE_EDITABLE; 334 text_field.AddState(ui::AX_STATE_EDITABLE);
344 text_field.SetValue(text_value); 335 text_field.SetValue(text_value);
345 std::vector<int32_t> line_start_offsets; 336 std::vector<int32_t> line_start_offsets;
346 line_start_offsets.push_back(15); 337 line_start_offsets.push_back(15);
347 text_field.AddIntListAttribute(ui::AX_ATTR_CACHED_LINE_STARTS, 338 text_field.AddIntListAttribute(ui::AX_ATTR_CACHED_LINE_STARTS,
348 line_start_offsets); 339 line_start_offsets);
349 text_field.child_ids.push_back(3); 340 text_field.child_ids.push_back(3);
350 text_field.child_ids.push_back(5); 341 text_field.child_ids.push_back(5);
351 text_field.child_ids.push_back(6); 342 text_field.child_ids.push_back(6);
352 343
353 ui::AXNodeData static_text1; 344 ui::AXNodeData static_text1;
354 static_text1.id = 3; 345 static_text1.id = 3;
355 static_text1.role = ui::AX_ROLE_STATIC_TEXT; 346 static_text1.role = ui::AX_ROLE_STATIC_TEXT;
356 static_text1.state = 1 << ui::AX_STATE_EDITABLE; 347 static_text1.AddState(ui::AX_STATE_EDITABLE);
357 static_text1.SetName(line1); 348 static_text1.SetName(line1);
358 static_text1.child_ids.push_back(4); 349 static_text1.child_ids.push_back(4);
359 350
360 ui::AXNodeData inline_box1; 351 ui::AXNodeData inline_box1;
361 inline_box1.id = 4; 352 inline_box1.id = 4;
362 inline_box1.role = ui::AX_ROLE_INLINE_TEXT_BOX; 353 inline_box1.role = ui::AX_ROLE_INLINE_TEXT_BOX;
363 inline_box1.state = 1 << ui::AX_STATE_EDITABLE; 354 inline_box1.AddState(ui::AX_STATE_EDITABLE);
364 inline_box1.SetName(line1); 355 inline_box1.SetName(line1);
365 std::vector<int32_t> word_start_offsets1; 356 std::vector<int32_t> word_start_offsets1;
366 word_start_offsets1.push_back(0); 357 word_start_offsets1.push_back(0);
367 word_start_offsets1.push_back(4); 358 word_start_offsets1.push_back(4);
368 word_start_offsets1.push_back(8); 359 word_start_offsets1.push_back(8);
369 inline_box1.AddIntListAttribute( 360 inline_box1.AddIntListAttribute(
370 ui::AX_ATTR_WORD_STARTS, word_start_offsets1); 361 ui::AX_ATTR_WORD_STARTS, word_start_offsets1);
371 362
372 ui::AXNodeData line_break; 363 ui::AXNodeData line_break;
373 line_break.id = 5; 364 line_break.id = 5;
374 line_break.role = ui::AX_ROLE_LINE_BREAK; 365 line_break.role = ui::AX_ROLE_LINE_BREAK;
375 line_break.state = 1 << ui::AX_STATE_EDITABLE; 366 line_break.AddState(ui::AX_STATE_EDITABLE);
376 line_break.SetName("\n"); 367 line_break.SetName("\n");
377 368
378 ui::AXNodeData static_text2; 369 ui::AXNodeData static_text2;
379 static_text2.id = 6; 370 static_text2.id = 6;
380 static_text2.role = ui::AX_ROLE_STATIC_TEXT; 371 static_text2.role = ui::AX_ROLE_STATIC_TEXT;
381 static_text2.state = 1 << ui::AX_STATE_EDITABLE; 372 static_text2.AddState(ui::AX_STATE_EDITABLE);
382 static_text2.SetName(line2); 373 static_text2.SetName(line2);
383 static_text2.child_ids.push_back(7); 374 static_text2.child_ids.push_back(7);
384 375
385 ui::AXNodeData inline_box2; 376 ui::AXNodeData inline_box2;
386 inline_box2.id = 7; 377 inline_box2.id = 7;
387 inline_box2.role = ui::AX_ROLE_INLINE_TEXT_BOX; 378 inline_box2.role = ui::AX_ROLE_INLINE_TEXT_BOX;
388 inline_box2.state = 1 << ui::AX_STATE_EDITABLE; 379 inline_box2.AddState(ui::AX_STATE_EDITABLE);
389 inline_box2.SetName(line2); 380 inline_box2.SetName(line2);
390 std::vector<int32_t> word_start_offsets2; 381 std::vector<int32_t> word_start_offsets2;
391 word_start_offsets2.push_back(0); 382 word_start_offsets2.push_back(0);
392 word_start_offsets2.push_back(5); 383 word_start_offsets2.push_back(5);
393 word_start_offsets2.push_back(10); 384 word_start_offsets2.push_back(10);
394 inline_box2.AddIntListAttribute( 385 inline_box2.AddIntListAttribute(
395 ui::AX_ATTR_WORD_STARTS, word_start_offsets2); 386 ui::AX_ATTR_WORD_STARTS, word_start_offsets2);
396 387
397 CountedBrowserAccessibility::reset(); 388 CountedBrowserAccessibility::reset();
398 std::unique_ptr<BrowserAccessibilityManager> manager( 389 std::unique_ptr<BrowserAccessibilityManager> manager(
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 } 483 }
493 484
494 TEST_F(BrowserAccessibilityTest, TestSimpleHypertext) { 485 TEST_F(BrowserAccessibilityTest, TestSimpleHypertext) {
495 const std::string text1_name = "One two three."; 486 const std::string text1_name = "One two three.";
496 const std::string text2_name = " Four five six."; 487 const std::string text2_name = " Four five six.";
497 const long text_name_len = text1_name.length() + text2_name.length(); 488 const long text_name_len = text1_name.length() + text2_name.length();
498 489
499 ui::AXNodeData text1; 490 ui::AXNodeData text1;
500 text1.id = 11; 491 text1.id = 11;
501 text1.role = ui::AX_ROLE_STATIC_TEXT; 492 text1.role = ui::AX_ROLE_STATIC_TEXT;
502 text1.state = 1 << ui::AX_STATE_READ_ONLY; 493 text1.AddState(ui::AX_STATE_READ_ONLY);
503 text1.SetName(text1_name); 494 text1.SetName(text1_name);
504 495
505 ui::AXNodeData text2; 496 ui::AXNodeData text2;
506 text2.id = 12; 497 text2.id = 12;
507 text2.role = ui::AX_ROLE_STATIC_TEXT; 498 text2.role = ui::AX_ROLE_STATIC_TEXT;
508 text2.state = 1 << ui::AX_STATE_READ_ONLY; 499 text2.AddState(ui::AX_STATE_READ_ONLY);
509 text2.SetName(text2_name); 500 text2.SetName(text2_name);
510 501
511 ui::AXNodeData root; 502 ui::AXNodeData root;
512 root.id = 1; 503 root.id = 1;
513 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 504 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
514 root.state = 1 << ui::AX_STATE_READ_ONLY; 505 root.AddState(ui::AX_STATE_READ_ONLY);
515 root.child_ids.push_back(text1.id); 506 root.child_ids.push_back(text1.id);
516 root.child_ids.push_back(text2.id); 507 root.child_ids.push_back(text2.id);
517 508
518 CountedBrowserAccessibility::reset(); 509 CountedBrowserAccessibility::reset();
519 std::unique_ptr<BrowserAccessibilityManager> manager( 510 std::unique_ptr<BrowserAccessibilityManager> manager(
520 BrowserAccessibilityManager::Create( 511 BrowserAccessibilityManager::Create(
521 MakeAXTreeUpdate(root, text1, text2), nullptr, 512 MakeAXTreeUpdate(root, text1, text2), nullptr,
522 new CountedBrowserAccessibilityFactory())); 513 new CountedBrowserAccessibilityFactory()));
523 ASSERT_EQ(3, CountedBrowserAccessibility::num_instances()); 514 ASSERT_EQ(3, CountedBrowserAccessibility::num_instances());
524 515
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 // Each control (combo / check box, button and link) will be represented by an 566 // Each control (combo / check box, button and link) will be represented by an
576 // embedded object character. 567 // embedded object character.
577 const base::string16 embed(1, BrowserAccessibilityWin::kEmbeddedCharacter); 568 const base::string16 embed(1, BrowserAccessibilityWin::kEmbeddedCharacter);
578 const base::string16 root_hypertext = 569 const base::string16 root_hypertext =
579 text1_name + embed + text2_name + embed + embed + embed; 570 text1_name + embed + text2_name + embed + embed + embed;
580 const long root_hypertext_len = root_hypertext.length(); 571 const long root_hypertext_len = root_hypertext.length();
581 572
582 ui::AXNodeData text1; 573 ui::AXNodeData text1;
583 text1.id = 11; 574 text1.id = 11;
584 text1.role = ui::AX_ROLE_STATIC_TEXT; 575 text1.role = ui::AX_ROLE_STATIC_TEXT;
585 text1.state = 1 << ui::AX_STATE_READ_ONLY; 576 text1.AddState(ui::AX_STATE_READ_ONLY);
586 text1.SetName(base::UTF16ToUTF8(text1_name)); 577 text1.SetName(base::UTF16ToUTF8(text1_name));
587 578
588 ui::AXNodeData combo_box; 579 ui::AXNodeData combo_box;
589 combo_box.id = 12; 580 combo_box.id = 12;
590 combo_box.role = ui::AX_ROLE_COMBO_BOX; 581 combo_box.role = ui::AX_ROLE_COMBO_BOX;
591 combo_box.SetName(base::UTF16ToUTF8(combo_box_name)); 582 combo_box.SetName(base::UTF16ToUTF8(combo_box_name));
592 combo_box.SetValue(base::UTF16ToUTF8(combo_box_value)); 583 combo_box.SetValue(base::UTF16ToUTF8(combo_box_value));
593 584
594 ui::AXNodeData text2; 585 ui::AXNodeData text2;
595 text2.id = 13; 586 text2.id = 13;
596 text2.role = ui::AX_ROLE_STATIC_TEXT; 587 text2.role = ui::AX_ROLE_STATIC_TEXT;
597 text2.state = 1 << ui::AX_STATE_READ_ONLY; 588 text2.AddState(ui::AX_STATE_READ_ONLY);
598 text2.SetName(base::UTF16ToUTF8(text2_name)); 589 text2.SetName(base::UTF16ToUTF8(text2_name));
599 590
600 ui::AXNodeData check_box; 591 ui::AXNodeData check_box;
601 check_box.id = 14; 592 check_box.id = 14;
602 check_box.role = ui::AX_ROLE_CHECK_BOX; 593 check_box.role = ui::AX_ROLE_CHECK_BOX;
603 check_box.state = 0;
604 check_box.AddIntAttribute(ui::AX_ATTR_CHECKED_STATE, 594 check_box.AddIntAttribute(ui::AX_ATTR_CHECKED_STATE,
605 ui::AX_CHECKED_STATE_TRUE); 595 ui::AX_CHECKED_STATE_TRUE);
606 check_box.SetName(base::UTF16ToUTF8(check_box_name)); 596 check_box.SetName(base::UTF16ToUTF8(check_box_name));
607 check_box.SetValue(base::UTF16ToUTF8(check_box_value)); 597 check_box.SetValue(base::UTF16ToUTF8(check_box_value));
608 598
609 ui::AXNodeData button, button_text; 599 ui::AXNodeData button, button_text;
610 button.id = 15; 600 button.id = 15;
611 button_text.id = 17; 601 button_text.id = 17;
612 button_text.SetName(base::UTF16ToUTF8(button_text_name)); 602 button_text.SetName(base::UTF16ToUTF8(button_text_name));
613 button.role = ui::AX_ROLE_BUTTON; 603 button.role = ui::AX_ROLE_BUTTON;
614 button_text.role = ui::AX_ROLE_STATIC_TEXT; 604 button_text.role = ui::AX_ROLE_STATIC_TEXT;
615 button.state = 1 << ui::AX_STATE_READ_ONLY; 605 button.AddState(ui::AX_STATE_READ_ONLY);
616 button_text.state = 1 << ui::AX_STATE_READ_ONLY; 606 button_text.AddState(ui::AX_STATE_READ_ONLY);
617 button.child_ids.push_back(button_text.id); 607 button.child_ids.push_back(button_text.id);
618 608
619 ui::AXNodeData link, link_text; 609 ui::AXNodeData link, link_text;
620 link.id = 16; 610 link.id = 16;
621 link_text.id = 18; 611 link_text.id = 18;
622 link_text.SetName(base::UTF16ToUTF8(link_text_name)); 612 link_text.SetName(base::UTF16ToUTF8(link_text_name));
623 link.role = ui::AX_ROLE_LINK; 613 link.role = ui::AX_ROLE_LINK;
624 link_text.role = ui::AX_ROLE_STATIC_TEXT; 614 link_text.role = ui::AX_ROLE_STATIC_TEXT;
625 link.state = 1 << ui::AX_STATE_READ_ONLY; 615 link.AddState(ui::AX_STATE_READ_ONLY);
626 link_text.state = 1 << ui::AX_STATE_READ_ONLY; 616 link_text.AddState(ui::AX_STATE_READ_ONLY);
627 link.child_ids.push_back(link_text.id); 617 link.child_ids.push_back(link_text.id);
628 618
629 ui::AXNodeData root; 619 ui::AXNodeData root;
630 root.id = 1; 620 root.id = 1;
631 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 621 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
632 root.state = 1 << ui::AX_STATE_READ_ONLY; 622 root.AddState(ui::AX_STATE_READ_ONLY);
633 root.child_ids.push_back(text1.id); 623 root.child_ids.push_back(text1.id);
634 root.child_ids.push_back(combo_box.id); 624 root.child_ids.push_back(combo_box.id);
635 root.child_ids.push_back(text2.id); 625 root.child_ids.push_back(text2.id);
636 root.child_ids.push_back(check_box.id); 626 root.child_ids.push_back(check_box.id);
637 root.child_ids.push_back(button.id); 627 root.child_ids.push_back(button.id);
638 root.child_ids.push_back(link.id); 628 root.child_ids.push_back(link.id);
639 629
640 CountedBrowserAccessibility::reset(); 630 CountedBrowserAccessibility::reset();
641 std::unique_ptr<BrowserAccessibilityManager> manager( 631 std::unique_ptr<BrowserAccessibilityManager> manager(
642 BrowserAccessibilityManager::Create( 632 BrowserAccessibilityManager::Create(
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 ui::AXNodeData pseudo_before; 824 ui::AXNodeData pseudo_before;
835 pseudo_before.id = 2; 825 pseudo_before.id = 2;
836 pseudo_before.role = ui::AX_ROLE_DIV; 826 pseudo_before.role = ui::AX_ROLE_DIV;
837 pseudo_before.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "<pseudo:before>"); 827 pseudo_before.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "<pseudo:before>");
838 pseudo_before.AddStringAttribute(ui::AX_ATTR_DISPLAY, "none"); 828 pseudo_before.AddStringAttribute(ui::AX_ATTR_DISPLAY, "none");
839 829
840 ui::AXNodeData checkbox; 830 ui::AXNodeData checkbox;
841 checkbox.id = 3; 831 checkbox.id = 3;
842 checkbox.SetName("Checkbox"); 832 checkbox.SetName("Checkbox");
843 checkbox.role = ui::AX_ROLE_CHECK_BOX; 833 checkbox.role = ui::AX_ROLE_CHECK_BOX;
844 checkbox.state = 0;
845 checkbox.AddIntAttribute(ui::AX_ATTR_CHECKED_STATE, 834 checkbox.AddIntAttribute(ui::AX_ATTR_CHECKED_STATE,
846 ui::AX_CHECKED_STATE_TRUE); 835 ui::AX_CHECKED_STATE_TRUE);
847 836
848 ui::AXNodeData root; 837 ui::AXNodeData root;
849 root.id = 1; 838 root.id = 1;
850 root.SetName("Document"); 839 root.SetName("Document");
851 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 840 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
852 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 841 root.AddState(ui::AX_STATE_READ_ONLY);
842 root.AddState(ui::AX_STATE_FOCUSABLE);
853 root.child_ids.push_back(2); 843 root.child_ids.push_back(2);
854 root.child_ids.push_back(3); 844 root.child_ids.push_back(3);
855 845
856 CountedBrowserAccessibility::reset(); 846 CountedBrowserAccessibility::reset();
857 std::unique_ptr<BrowserAccessibilityManager> manager( 847 std::unique_ptr<BrowserAccessibilityManager> manager(
858 BrowserAccessibilityManager::Create( 848 BrowserAccessibilityManager::Create(
859 MakeAXTreeUpdate(root, pseudo_before, checkbox), nullptr, 849 MakeAXTreeUpdate(root, pseudo_before, checkbox), nullptr,
860 new CountedBrowserAccessibilityFactory())); 850 new CountedBrowserAccessibilityFactory()));
861 ASSERT_EQ(3, CountedBrowserAccessibility::num_instances()); 851 ASSERT_EQ(3, CountedBrowserAccessibility::num_instances());
862 852
(...skipping 26 matching lines...) Expand all
889 EXPECT_EQ(L"checkable:true;", attributes_str); 879 EXPECT_EQ(L"checkable:true;", attributes_str);
890 880
891 manager.reset(); 881 manager.reset();
892 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 882 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
893 } 883 }
894 884
895 TEST_F(BrowserAccessibilityTest, TestValueAttributeInTextControls) { 885 TEST_F(BrowserAccessibilityTest, TestValueAttributeInTextControls) {
896 ui::AXNodeData root; 886 ui::AXNodeData root;
897 root.id = 1; 887 root.id = 1;
898 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 888 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
899 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 889 root.AddState(ui::AX_STATE_READ_ONLY);
890 root.AddState(ui::AX_STATE_FOCUSABLE);
900 891
901 ui::AXNodeData combo_box, combo_box_text; 892 ui::AXNodeData combo_box, combo_box_text;
902 combo_box.id = 2; 893 combo_box.id = 2;
903 combo_box_text.id = 3; 894 combo_box_text.id = 3;
904 combo_box.SetName("Combo box:"); 895 combo_box.SetName("Combo box:");
905 combo_box_text.SetName("Combo box text"); 896 combo_box_text.SetName("Combo box text");
906 combo_box.role = ui::AX_ROLE_COMBO_BOX; 897 combo_box.role = ui::AX_ROLE_COMBO_BOX;
907 combo_box_text.role = ui::AX_ROLE_STATIC_TEXT; 898 combo_box_text.role = ui::AX_ROLE_STATIC_TEXT;
908 combo_box.state = (1 << ui::AX_STATE_EDITABLE) | 899 combo_box.AddState(ui::AX_STATE_EDITABLE);
909 (1 << ui::AX_STATE_FOCUSABLE); 900 combo_box.AddState(ui::AX_STATE_FOCUSABLE);
910 combo_box_text.state = 1 << ui::AX_STATE_EDITABLE; 901 combo_box_text.AddState(ui::AX_STATE_EDITABLE);
911 combo_box.child_ids.push_back(combo_box_text.id); 902 combo_box.child_ids.push_back(combo_box_text.id);
912 903
913 ui::AXNodeData search_box, search_box_text, new_line; 904 ui::AXNodeData search_box, search_box_text, new_line;
914 search_box.id = 4; 905 search_box.id = 4;
915 search_box_text.id = 5; 906 search_box_text.id = 5;
916 new_line.id = 6; 907 new_line.id = 6;
917 search_box.SetName("Search for:"); 908 search_box.SetName("Search for:");
918 search_box_text.SetName("Search box text"); 909 search_box_text.SetName("Search box text");
919 new_line.SetName("\n"); 910 new_line.SetName("\n");
920 search_box.role = ui::AX_ROLE_SEARCH_BOX; 911 search_box.role = ui::AX_ROLE_SEARCH_BOX;
921 search_box_text.role = ui::AX_ROLE_STATIC_TEXT; 912 search_box_text.role = ui::AX_ROLE_STATIC_TEXT;
922 new_line.role = ui::AX_ROLE_LINE_BREAK; 913 new_line.role = ui::AX_ROLE_LINE_BREAK;
923 search_box.state = (1 << ui::AX_STATE_EDITABLE) | 914 search_box.AddState(ui::AX_STATE_EDITABLE);
924 (1 << ui::AX_STATE_FOCUSABLE); 915 search_box.AddState(ui::AX_STATE_FOCUSABLE);
925 search_box_text.state = new_line.state = 1 << ui::AX_STATE_EDITABLE; 916 search_box_text.AddState(ui::AX_STATE_EDITABLE);
917 new_line.AddState(ui::AX_STATE_EDITABLE);
926 search_box.child_ids.push_back(search_box_text.id); 918 search_box.child_ids.push_back(search_box_text.id);
927 search_box.child_ids.push_back(new_line.id); 919 search_box.child_ids.push_back(new_line.id);
928 920
929 ui::AXNodeData text_field; 921 ui::AXNodeData text_field;
930 text_field.id = 7; 922 text_field.id = 7;
931 text_field.role = ui::AX_ROLE_TEXT_FIELD; 923 text_field.role = ui::AX_ROLE_TEXT_FIELD;
932 text_field.state = 924 text_field.AddState(ui::AX_STATE_EDITABLE);
933 (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_FOCUSABLE); 925 text_field.AddState(ui::AX_STATE_FOCUSABLE);
934 text_field.SetValue("Text field text"); 926 text_field.SetValue("Text field text");
935 927
936 ui::AXNodeData link, link_text; 928 ui::AXNodeData link, link_text;
937 link.id = 8; 929 link.id = 8;
938 link_text.id = 9; 930 link_text.id = 9;
939 link_text.SetName("Link text"); 931 link_text.SetName("Link text");
940 link.role = ui::AX_ROLE_LINK; 932 link.role = ui::AX_ROLE_LINK;
941 link_text.role = ui::AX_ROLE_STATIC_TEXT; 933 link_text.role = ui::AX_ROLE_STATIC_TEXT;
942 link.state = link_text.state = 1 << ui::AX_STATE_READ_ONLY; 934 link.AddState(ui::AX_STATE_READ_ONLY);
935 link_text.AddState(ui::AX_STATE_READ_ONLY);
943 link.child_ids.push_back(link_text.id); 936 link.child_ids.push_back(link_text.id);
944 937
945 ui::AXNodeData slider, slider_text; 938 ui::AXNodeData slider, slider_text;
946 slider.id = 10; 939 slider.id = 10;
947 slider_text.id = 11; 940 slider_text.id = 11;
948 slider.AddFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, 5.0F); 941 slider.AddFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, 5.0F);
949 slider_text.SetName("Slider text"); 942 slider_text.SetName("Slider text");
950 slider.role = ui::AX_ROLE_SLIDER; 943 slider.role = ui::AX_ROLE_SLIDER;
951 slider_text.role = ui::AX_ROLE_STATIC_TEXT; 944 slider_text.role = ui::AX_ROLE_STATIC_TEXT;
952 slider.state = slider_text.state = 1 << ui::AX_STATE_READ_ONLY; 945 slider.AddState(ui::AX_STATE_READ_ONLY);
946 slider_text.AddState(ui::AX_STATE_READ_ONLY);
953 slider.child_ids.push_back(slider_text.id); 947 slider.child_ids.push_back(slider_text.id);
954 948
955 root.child_ids.push_back(2); // Combo box. 949 root.child_ids.push_back(2); // Combo box.
956 root.child_ids.push_back(4); // Search box. 950 root.child_ids.push_back(4); // Search box.
957 root.child_ids.push_back(7); // Text field. 951 root.child_ids.push_back(7); // Text field.
958 root.child_ids.push_back(8); // Link. 952 root.child_ids.push_back(8); // Link.
959 root.child_ids.push_back(10); // Slider. 953 root.child_ids.push_back(10); // Slider.
960 954
961 CountedBrowserAccessibility::reset(); 955 CountedBrowserAccessibility::reset();
962 std::unique_ptr<BrowserAccessibilityManager> manager( 956 std::unique_ptr<BrowserAccessibilityManager> manager(
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 line2_word_starts.push_back(7); 1044 line2_word_starts.push_back(7);
1051 line2_word_starts.push_back(12); 1045 line2_word_starts.push_back(12);
1052 line2_word_starts.push_back(15); 1046 line2_word_starts.push_back(15);
1053 line2_word_starts.push_back(20); 1047 line2_word_starts.push_back(20);
1054 line2_word_starts.push_back(25); 1048 line2_word_starts.push_back(25);
1055 line2_word_starts.push_back(29); 1049 line2_word_starts.push_back(29);
1056 1050
1057 ui::AXNodeData root; 1051 ui::AXNodeData root;
1058 root.id = 1; 1052 root.id = 1;
1059 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1053 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1060 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1054 root.AddState(ui::AX_STATE_READ_ONLY);
1055 root.AddState(ui::AX_STATE_FOCUSABLE);
1061 1056
1062 ui::AXNodeData textarea, textarea_div, textarea_text; 1057 ui::AXNodeData textarea, textarea_div, textarea_text;
1063 textarea.id = 2; 1058 textarea.id = 2;
1064 textarea_div.id = 3; 1059 textarea_div.id = 3;
1065 textarea_text.id = 4; 1060 textarea_text.id = 4;
1066 textarea.role = ui::AX_ROLE_TEXT_FIELD; 1061 textarea.role = ui::AX_ROLE_TEXT_FIELD;
1067 textarea_div.role = ui::AX_ROLE_DIV; 1062 textarea_div.role = ui::AX_ROLE_DIV;
1068 textarea_text.role = ui::AX_ROLE_STATIC_TEXT; 1063 textarea_text.role = ui::AX_ROLE_STATIC_TEXT;
1069 textarea.state = (1 << ui::AX_STATE_EDITABLE) | 1064 textarea.AddState(ui::AX_STATE_EDITABLE);
1070 (1 << ui::AX_STATE_FOCUSABLE) | 1065 textarea.AddState(ui::AX_STATE_FOCUSABLE);
1071 (1 << ui::AX_STATE_MULTILINE); 1066 textarea.AddState(ui::AX_STATE_MULTILINE);
1072 textarea_div.state = 1 << ui::AX_STATE_EDITABLE; 1067 textarea_div.AddState(ui::AX_STATE_EDITABLE);
1073 textarea_text.state = 1 << ui::AX_STATE_EDITABLE; 1068 textarea_text.AddState(ui::AX_STATE_EDITABLE);
1074 textarea.SetValue(base::UTF16ToUTF8(text)); 1069 textarea.SetValue(base::UTF16ToUTF8(text));
1075 textarea_text.SetName(base::UTF16ToUTF8(text)); 1070 textarea_text.SetName(base::UTF16ToUTF8(text));
1076 textarea.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "textarea"); 1071 textarea.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "textarea");
1077 textarea.child_ids.push_back(textarea_div.id); 1072 textarea.child_ids.push_back(textarea_div.id);
1078 textarea_div.child_ids.push_back(textarea_text.id); 1073 textarea_div.child_ids.push_back(textarea_text.id);
1079 1074
1080 ui::AXNodeData textarea_line1, textarea_line2; 1075 ui::AXNodeData textarea_line1, textarea_line2;
1081 textarea_line1.id = 5; 1076 textarea_line1.id = 5;
1082 textarea_line2.id = 6; 1077 textarea_line2.id = 6;
1083 textarea_line1.role = ui::AX_ROLE_INLINE_TEXT_BOX; 1078 textarea_line1.role = ui::AX_ROLE_INLINE_TEXT_BOX;
1084 textarea_line2.role = ui::AX_ROLE_INLINE_TEXT_BOX; 1079 textarea_line2.role = ui::AX_ROLE_INLINE_TEXT_BOX;
1085 textarea_line1.state = 1 << ui::AX_STATE_EDITABLE; 1080 textarea_line1.AddState(ui::AX_STATE_EDITABLE);
1086 textarea_line2.state = 1 << ui::AX_STATE_EDITABLE; 1081 textarea_line2.AddState(ui::AX_STATE_EDITABLE);
1087 textarea_line1.SetName(base::UTF16ToUTF8(line1)); 1082 textarea_line1.SetName(base::UTF16ToUTF8(line1));
1088 textarea_line2.SetName(base::UTF16ToUTF8(line2)); 1083 textarea_line2.SetName(base::UTF16ToUTF8(line2));
1089 textarea_line1.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS, 1084 textarea_line1.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS,
1090 line1_word_starts); 1085 line1_word_starts);
1091 textarea_line2.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS, 1086 textarea_line2.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS,
1092 line2_word_starts); 1087 line2_word_starts);
1093 textarea_text.child_ids.push_back(textarea_line1.id); 1088 textarea_text.child_ids.push_back(textarea_line1.id);
1094 textarea_text.child_ids.push_back(textarea_line2.id); 1089 textarea_text.child_ids.push_back(textarea_line2.id);
1095 1090
1096 ui::AXNodeData text_field, text_field_div, text_field_text; 1091 ui::AXNodeData text_field, text_field_div, text_field_text;
1097 text_field.id = 7; 1092 text_field.id = 7;
1098 text_field_div.id = 8; 1093 text_field_div.id = 8;
1099 text_field_text.id = 9; 1094 text_field_text.id = 9;
1100 text_field.role = ui::AX_ROLE_TEXT_FIELD; 1095 text_field.role = ui::AX_ROLE_TEXT_FIELD;
1101 text_field_div.role = ui::AX_ROLE_DIV; 1096 text_field_div.role = ui::AX_ROLE_DIV;
1102 text_field_text.role = ui::AX_ROLE_STATIC_TEXT; 1097 text_field_text.role = ui::AX_ROLE_STATIC_TEXT;
1103 text_field.state = 1098 text_field.AddState(ui::AX_STATE_EDITABLE);
1104 (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_FOCUSABLE); 1099 text_field.AddState(ui::AX_STATE_FOCUSABLE);
1105 text_field_div.state = 1 << ui::AX_STATE_EDITABLE; 1100 text_field_div.AddState(ui::AX_STATE_EDITABLE);
1106 text_field_text.state = 1 << ui::AX_STATE_EDITABLE; 1101 text_field_text.AddState(ui::AX_STATE_EDITABLE);
1107 text_field.SetValue(base::UTF16ToUTF8(line1)); 1102 text_field.SetValue(base::UTF16ToUTF8(line1));
1108 text_field_text.SetName(base::UTF16ToUTF8(line1)); 1103 text_field_text.SetName(base::UTF16ToUTF8(line1));
1109 text_field.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "input"); 1104 text_field.AddStringAttribute(ui::AX_ATTR_HTML_TAG, "input");
1110 text_field.html_attributes.push_back(std::make_pair("type", "text")); 1105 text_field.html_attributes.push_back(std::make_pair("type", "text"));
1111 text_field.child_ids.push_back(text_field_div.id); 1106 text_field.child_ids.push_back(text_field_div.id);
1112 text_field_div.child_ids.push_back(text_field_text.id); 1107 text_field_div.child_ids.push_back(text_field_text.id);
1113 1108
1114 ui::AXNodeData text_field_line; 1109 ui::AXNodeData text_field_line;
1115 text_field_line.id = 10; 1110 text_field_line.id = 10;
1116 text_field_line.role = ui::AX_ROLE_INLINE_TEXT_BOX; 1111 text_field_line.role = ui::AX_ROLE_INLINE_TEXT_BOX;
1117 text_field_line.state = 1 << ui::AX_STATE_EDITABLE; 1112 text_field_line.AddState(ui::AX_STATE_EDITABLE);
1118 text_field_line.SetName(base::UTF16ToUTF8(line1)); 1113 text_field_line.SetName(base::UTF16ToUTF8(line1));
1119 text_field_line.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS, 1114 text_field_line.AddIntListAttribute(ui::AX_ATTR_WORD_STARTS,
1120 line1_word_starts); 1115 line1_word_starts);
1121 text_field_text.child_ids.push_back(text_field_line.id); 1116 text_field_text.child_ids.push_back(text_field_line.id);
1122 1117
1123 root.child_ids.push_back(2); // Textarea. 1118 root.child_ids.push_back(2); // Textarea.
1124 root.child_ids.push_back(7); // Text field. 1119 root.child_ids.push_back(7); // Text field.
1125 1120
1126 CountedBrowserAccessibility::reset(); 1121 CountedBrowserAccessibility::reset();
1127 std::unique_ptr<BrowserAccessibilityManager> manager( 1122 std::unique_ptr<BrowserAccessibilityManager> manager(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 text_field_object.Reset(); 1187 text_field_object.Reset();
1193 1188
1194 manager.reset(); 1189 manager.reset();
1195 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 1190 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
1196 } 1191 }
1197 1192
1198 TEST_F(BrowserAccessibilityTest, TestCaretAndSelectionInSimpleFields) { 1193 TEST_F(BrowserAccessibilityTest, TestCaretAndSelectionInSimpleFields) {
1199 ui::AXNodeData root; 1194 ui::AXNodeData root;
1200 root.id = 1; 1195 root.id = 1;
1201 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1196 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1202 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1197 root.AddState(ui::AX_STATE_READ_ONLY);
1198 root.AddState(ui::AX_STATE_FOCUSABLE);
1203 1199
1204 ui::AXNodeData combo_box; 1200 ui::AXNodeData combo_box;
1205 combo_box.id = 2; 1201 combo_box.id = 2;
1206 combo_box.role = ui::AX_ROLE_COMBO_BOX; 1202 combo_box.role = ui::AX_ROLE_COMBO_BOX;
1207 combo_box.state = (1 << ui::AX_STATE_EDITABLE) | 1203 combo_box.AddState(ui::AX_STATE_EDITABLE);
1208 (1 << ui::AX_STATE_FOCUSABLE); 1204 combo_box.AddState(ui::AX_STATE_FOCUSABLE);
1209 combo_box.SetValue("Test1"); 1205 combo_box.SetValue("Test1");
1210 // Place the caret between 't' and 'e'. 1206 // Place the caret between 't' and 'e'.
1211 combo_box.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, 1); 1207 combo_box.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, 1);
1212 combo_box.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, 1); 1208 combo_box.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, 1);
1213 1209
1214 ui::AXNodeData text_field; 1210 ui::AXNodeData text_field;
1215 text_field.id = 3; 1211 text_field.id = 3;
1216 text_field.role = ui::AX_ROLE_TEXT_FIELD; 1212 text_field.role = ui::AX_ROLE_TEXT_FIELD;
1217 text_field.state = (1 << ui::AX_STATE_EDITABLE) | 1213 text_field.AddState(ui::AX_STATE_EDITABLE);
1218 (1 << ui::AX_STATE_FOCUSABLE); 1214 text_field.AddState(ui::AX_STATE_FOCUSABLE);
1219 text_field.SetValue("Test2"); 1215 text_field.SetValue("Test2");
1220 // Select the letter 'e'. 1216 // Select the letter 'e'.
1221 text_field.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, 1); 1217 text_field.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, 1);
1222 text_field.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, 2); 1218 text_field.AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, 2);
1223 1219
1224 root.child_ids.push_back(2); 1220 root.child_ids.push_back(2);
1225 root.child_ids.push_back(3); 1221 root.child_ids.push_back(3);
1226 1222
1227 CountedBrowserAccessibility::reset(); 1223 CountedBrowserAccessibility::reset();
1228 std::unique_ptr<BrowserAccessibilityManager> manager( 1224 std::unique_ptr<BrowserAccessibilityManager> manager(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 EXPECT_EQ(2, selection_end); 1287 EXPECT_EQ(2, selection_end);
1292 1288
1293 manager.reset(); 1289 manager.reset();
1294 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 1290 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
1295 } 1291 }
1296 1292
1297 TEST_F(BrowserAccessibilityTest, TestCaretInContentEditables) { 1293 TEST_F(BrowserAccessibilityTest, TestCaretInContentEditables) {
1298 ui::AXNodeData root; 1294 ui::AXNodeData root;
1299 root.id = 1; 1295 root.id = 1;
1300 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1296 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1301 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1297 root.AddState(ui::AX_STATE_READ_ONLY);
1298 root.AddState(ui::AX_STATE_FOCUSABLE);
1302 1299
1303 ui::AXNodeData div_editable; 1300 ui::AXNodeData div_editable;
1304 div_editable.id = 2; 1301 div_editable.id = 2;
1305 div_editable.role = ui::AX_ROLE_DIV; 1302 div_editable.role = ui::AX_ROLE_DIV;
1306 div_editable.state = (1 << ui::AX_STATE_EDITABLE) | 1303 div_editable.AddState(ui::AX_STATE_EDITABLE);
1307 (1 << ui::AX_STATE_FOCUSABLE); 1304 div_editable.AddState(ui::AX_STATE_FOCUSABLE);
1308 1305
1309 ui::AXNodeData text; 1306 ui::AXNodeData text;
1310 text.id = 3; 1307 text.id = 3;
1311 text.role = ui::AX_ROLE_STATIC_TEXT; 1308 text.role = ui::AX_ROLE_STATIC_TEXT;
1312 text.state = (1 << ui::AX_STATE_EDITABLE); 1309 text.AddState(ui::AX_STATE_EDITABLE);
1313 text.SetName("Click "); 1310 text.SetName("Click ");
1314 1311
1315 ui::AXNodeData link; 1312 ui::AXNodeData link;
1316 link.id = 4; 1313 link.id = 4;
1317 link.role = ui::AX_ROLE_LINK; 1314 link.role = ui::AX_ROLE_LINK;
1318 link.state = (1 << ui::AX_STATE_EDITABLE) | 1315 link.AddState(ui::AX_STATE_EDITABLE);
1319 (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_LINKED); 1316 link.AddState(ui::AX_STATE_FOCUSABLE);
1317 link.AddState(ui::AX_STATE_LINKED);
1320 link.SetName("here"); 1318 link.SetName("here");
1321 1319
1322 ui::AXNodeData link_text; 1320 ui::AXNodeData link_text;
1323 link_text.id = 5; 1321 link_text.id = 5;
1324 link_text.role = ui::AX_ROLE_STATIC_TEXT; 1322 link_text.role = ui::AX_ROLE_STATIC_TEXT;
1325 link_text.state = (1 << ui::AX_STATE_EDITABLE) | 1323 link_text.AddState(ui::AX_STATE_EDITABLE);
1326 (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_LINKED); 1324 link_text.AddState(ui::AX_STATE_FOCUSABLE);
1325 link_text.AddState(ui::AX_STATE_LINKED);
1327 link_text.SetName("here"); 1326 link_text.SetName("here");
1328 1327
1329 root.child_ids.push_back(2); 1328 root.child_ids.push_back(2);
1330 div_editable.child_ids.push_back(3); 1329 div_editable.child_ids.push_back(3);
1331 div_editable.child_ids.push_back(4); 1330 div_editable.child_ids.push_back(4);
1332 link.child_ids.push_back(5); 1331 link.child_ids.push_back(5);
1333 1332
1334 ui::AXTreeUpdate update = MakeAXTreeUpdate( 1333 ui::AXTreeUpdate update = MakeAXTreeUpdate(
1335 root, div_editable, link, link_text, text); 1334 root, div_editable, link, link_text, text);
1336 1335
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 EXPECT_EQ(1, caret_offset); 1411 EXPECT_EQ(1, caret_offset);
1413 1412
1414 manager.reset(); 1413 manager.reset();
1415 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 1414 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
1416 } 1415 }
1417 1416
1418 TEST_F(BrowserAccessibilityTest, TestSelectionInContentEditables) { 1417 TEST_F(BrowserAccessibilityTest, TestSelectionInContentEditables) {
1419 ui::AXNodeData root; 1418 ui::AXNodeData root;
1420 root.id = 1; 1419 root.id = 1;
1421 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1420 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1422 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1421 root.AddState(ui::AX_STATE_READ_ONLY);
1422 root.AddState(ui::AX_STATE_FOCUSABLE);
1423 1423
1424 ui::AXNodeData div_editable; 1424 ui::AXNodeData div_editable;
1425 div_editable.id = 2; 1425 div_editable.id = 2;
1426 div_editable.role = ui::AX_ROLE_DIV; 1426 div_editable.role = ui::AX_ROLE_DIV;
1427 div_editable.state = 1427 div_editable.AddState(ui::AX_STATE_FOCUSABLE);
1428 (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_EDITABLE); 1428 div_editable.AddState(ui::AX_STATE_EDITABLE);
1429 1429
1430 ui::AXNodeData text; 1430 ui::AXNodeData text;
1431 text.id = 3; 1431 text.id = 3;
1432 text.role = ui::AX_ROLE_STATIC_TEXT; 1432 text.role = ui::AX_ROLE_STATIC_TEXT;
1433 text.state = (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_EDITABLE); 1433 text.AddState(ui::AX_STATE_FOCUSABLE);
1434 text.AddState(ui::AX_STATE_EDITABLE);
1434 text.SetName("Click "); 1435 text.SetName("Click ");
1435 1436
1436 ui::AXNodeData link; 1437 ui::AXNodeData link;
1437 link.id = 4; 1438 link.id = 4;
1438 link.role = ui::AX_ROLE_LINK; 1439 link.role = ui::AX_ROLE_LINK;
1439 link.state = (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_EDITABLE) | 1440 link.AddState(ui::AX_STATE_FOCUSABLE);
1440 (1 << ui::AX_STATE_LINKED); 1441 link.AddState(ui::AX_STATE_EDITABLE);
1442 link.AddState(ui::AX_STATE_LINKED);
1441 link.SetName("here"); 1443 link.SetName("here");
1442 1444
1443 ui::AXNodeData link_text; 1445 ui::AXNodeData link_text;
1444 link_text.id = 5; 1446 link_text.id = 5;
1445 link_text.role = ui::AX_ROLE_STATIC_TEXT; 1447 link_text.role = ui::AX_ROLE_STATIC_TEXT;
1446 link_text.state = (1 << ui::AX_STATE_FOCUSABLE) | 1448 link_text.AddState(ui::AX_STATE_FOCUSABLE);
1447 (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_LINKED); 1449 link_text.AddState(ui::AX_STATE_EDITABLE);
1450 link_text.AddState(ui::AX_STATE_LINKED);
1448 link_text.SetName("here"); 1451 link_text.SetName("here");
1449 1452
1450 root.child_ids.push_back(2); 1453 root.child_ids.push_back(2);
1451 div_editable.child_ids.push_back(3); 1454 div_editable.child_ids.push_back(3);
1452 div_editable.child_ids.push_back(4); 1455 div_editable.child_ids.push_back(4);
1453 link.child_ids.push_back(5); 1456 link.child_ids.push_back(5);
1454 1457
1455 ui::AXTreeUpdate update = 1458 ui::AXTreeUpdate update =
1456 MakeAXTreeUpdate(root, div_editable, link, link_text, text); 1459 MakeAXTreeUpdate(root, div_editable, link, link_text, text);
1457 1460
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 EXPECT_EQ(7, selection_end); 1570 EXPECT_EQ(7, selection_end);
1568 1571
1569 manager.reset(); 1572 manager.reset();
1570 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 1573 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
1571 } 1574 }
1572 1575
1573 TEST_F(BrowserAccessibilityTest, TestIAccessibleHyperlink) { 1576 TEST_F(BrowserAccessibilityTest, TestIAccessibleHyperlink) {
1574 ui::AXNodeData root; 1577 ui::AXNodeData root;
1575 root.id = 1; 1578 root.id = 1;
1576 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1579 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1577 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1580 root.AddState(ui::AX_STATE_READ_ONLY);
1581 root.AddState(ui::AX_STATE_FOCUSABLE);
1578 1582
1579 ui::AXNodeData div; 1583 ui::AXNodeData div;
1580 div.id = 2; 1584 div.id = 2;
1581 div.role = ui::AX_ROLE_DIV; 1585 div.role = ui::AX_ROLE_DIV;
1582 div.state = (1 << ui::AX_STATE_FOCUSABLE); 1586 div.AddState(ui::AX_STATE_FOCUSABLE);
1583 1587
1584 ui::AXNodeData text; 1588 ui::AXNodeData text;
1585 text.id = 3; 1589 text.id = 3;
1586 text.role = ui::AX_ROLE_STATIC_TEXT; 1590 text.role = ui::AX_ROLE_STATIC_TEXT;
1587 text.SetName("Click "); 1591 text.SetName("Click ");
1588 1592
1589 ui::AXNodeData link; 1593 ui::AXNodeData link;
1590 link.id = 4; 1594 link.id = 4;
1591 link.role = ui::AX_ROLE_LINK; 1595 link.role = ui::AX_ROLE_LINK;
1592 link.state = (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_LINKED); 1596 link.AddState(ui::AX_STATE_FOCUSABLE);
1597 link.AddState(ui::AX_STATE_LINKED);
1593 link.SetName("here"); 1598 link.SetName("here");
1594 link.AddStringAttribute(ui::AX_ATTR_URL, "example.com"); 1599 link.AddStringAttribute(ui::AX_ATTR_URL, "example.com");
1595 1600
1596 root.child_ids.push_back(2); 1601 root.child_ids.push_back(2);
1597 div.child_ids.push_back(3); 1602 div.child_ids.push_back(3);
1598 div.child_ids.push_back(4); 1603 div.child_ids.push_back(4);
1599 1604
1600 CountedBrowserAccessibility::reset(); 1605 CountedBrowserAccessibility::reset();
1601 std::unique_ptr<BrowserAccessibilityManager> manager( 1606 std::unique_ptr<BrowserAccessibilityManager> manager(
1602 BrowserAccessibilityManager::Create( 1607 BrowserAccessibilityManager::Create(
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 EXPECT_EQ(1, end_index); 1726 EXPECT_EQ(1, end_index);
1722 EXPECT_HRESULT_FAILED(text_accessible->get_endIndex(&end_index)); 1727 EXPECT_HRESULT_FAILED(text_accessible->get_endIndex(&end_index));
1723 EXPECT_HRESULT_SUCCEEDED(link_accessible->get_endIndex(&end_index)); 1728 EXPECT_HRESULT_SUCCEEDED(link_accessible->get_endIndex(&end_index));
1724 EXPECT_EQ(7, end_index); 1729 EXPECT_EQ(7, end_index);
1725 } 1730 }
1726 1731
1727 TEST_F(BrowserAccessibilityTest, TestTextAttributesInContentEditables) { 1732 TEST_F(BrowserAccessibilityTest, TestTextAttributesInContentEditables) {
1728 ui::AXNodeData root; 1733 ui::AXNodeData root;
1729 root.id = 1; 1734 root.id = 1;
1730 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1735 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1731 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1736 root.AddState(ui::AX_STATE_READ_ONLY);
1737 root.AddState(ui::AX_STATE_FOCUSABLE);
1732 1738
1733 ui::AXNodeData div_editable; 1739 ui::AXNodeData div_editable;
1734 div_editable.id = 2; 1740 div_editable.id = 2;
1735 div_editable.role = ui::AX_ROLE_DIV; 1741 div_editable.role = ui::AX_ROLE_DIV;
1736 div_editable.state = 1742 div_editable.AddState(ui::AX_STATE_EDITABLE);
1737 (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_FOCUSABLE); 1743 div_editable.AddState(ui::AX_STATE_FOCUSABLE);
1738 div_editable.AddStringAttribute(ui::AX_ATTR_FONT_FAMILY, "Helvetica"); 1744 div_editable.AddStringAttribute(ui::AX_ATTR_FONT_FAMILY, "Helvetica");
1739 1745
1740 ui::AXNodeData text_before; 1746 ui::AXNodeData text_before;
1741 text_before.id = 3; 1747 text_before.id = 3;
1742 text_before.role = ui::AX_ROLE_STATIC_TEXT; 1748 text_before.role = ui::AX_ROLE_STATIC_TEXT;
1743 text_before.state = (1 << ui::AX_STATE_EDITABLE); 1749 text_before.AddState(ui::AX_STATE_EDITABLE);
1744 text_before.SetName("Before "); 1750 text_before.SetName("Before ");
1745 text_before.AddIntAttribute( 1751 text_before.AddIntAttribute(
1746 ui::AX_ATTR_TEXT_STYLE, 1752 ui::AX_ATTR_TEXT_STYLE,
1747 (ui::AX_TEXT_STYLE_BOLD | ui::AX_TEXT_STYLE_ITALIC)); 1753 (ui::AX_TEXT_STYLE_BOLD | ui::AX_TEXT_STYLE_ITALIC));
1748 1754
1749 ui::AXNodeData link; 1755 ui::AXNodeData link;
1750 link.id = 4; 1756 link.id = 4;
1751 link.role = ui::AX_ROLE_LINK; 1757 link.role = ui::AX_ROLE_LINK;
1752 link.state = (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_FOCUSABLE) | 1758 link.AddState(ui::AX_STATE_EDITABLE);
1753 (1 << ui::AX_STATE_LINKED); 1759 link.AddState(ui::AX_STATE_FOCUSABLE);
1760 link.AddState(ui::AX_STATE_LINKED);
1754 link.SetName("lnk"); 1761 link.SetName("lnk");
1755 link.AddIntAttribute(ui::AX_ATTR_TEXT_STYLE, ui::AX_TEXT_STYLE_UNDERLINE); 1762 link.AddIntAttribute(ui::AX_ATTR_TEXT_STYLE, ui::AX_TEXT_STYLE_UNDERLINE);
1756 1763
1757 ui::AXNodeData link_text; 1764 ui::AXNodeData link_text;
1758 link_text.id = 5; 1765 link_text.id = 5;
1759 link_text.role = ui::AX_ROLE_STATIC_TEXT; 1766 link_text.role = ui::AX_ROLE_STATIC_TEXT;
1760 link_text.state = (1 << ui::AX_STATE_EDITABLE) | 1767 link_text.AddState(ui::AX_STATE_EDITABLE);
1761 (1 << ui::AX_STATE_FOCUSABLE) | (1 << ui::AX_STATE_LINKED); 1768 link_text.AddState(ui::AX_STATE_FOCUSABLE);
1769 link_text.AddState(ui::AX_STATE_LINKED);
1762 link_text.SetName("lnk"); 1770 link_text.SetName("lnk");
1763 link_text.AddIntAttribute(ui::AX_ATTR_TEXT_STYLE, 1771 link_text.AddIntAttribute(ui::AX_ATTR_TEXT_STYLE,
1764 ui::AX_TEXT_STYLE_UNDERLINE); 1772 ui::AX_TEXT_STYLE_UNDERLINE);
1765 1773
1766 // The name "lnk" is misspelled. 1774 // The name "lnk" is misspelled.
1767 std::vector<int32_t> marker_types; 1775 std::vector<int32_t> marker_types;
1768 marker_types.push_back(static_cast<int32_t>(ui::AX_MARKER_TYPE_SPELLING)); 1776 marker_types.push_back(static_cast<int32_t>(ui::AX_MARKER_TYPE_SPELLING));
1769 std::vector<int32_t> marker_starts; 1777 std::vector<int32_t> marker_starts;
1770 marker_starts.push_back(0); 1778 marker_starts.push_back(0);
1771 std::vector<int32_t> marker_ends; 1779 std::vector<int32_t> marker_ends;
1772 marker_ends.push_back(3); 1780 marker_ends.push_back(3);
1773 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_TYPES, marker_types); 1781 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_TYPES, marker_types);
1774 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_STARTS, marker_starts); 1782 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_STARTS, marker_starts);
1775 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_ENDS, marker_ends); 1783 link_text.AddIntListAttribute(ui::AX_ATTR_MARKER_ENDS, marker_ends);
1776 1784
1777 ui::AXNodeData text_after; 1785 ui::AXNodeData text_after;
1778 text_after.id = 6; 1786 text_after.id = 6;
1779 text_after.role = ui::AX_ROLE_STATIC_TEXT; 1787 text_after.role = ui::AX_ROLE_STATIC_TEXT;
1780 text_after.state = (1 << ui::AX_STATE_EDITABLE); 1788 text_after.AddState(ui::AX_STATE_EDITABLE);
1781 text_after.SetName(" after."); 1789 text_after.SetName(" after.");
1782 // Leave text style as normal. 1790 // Leave text style as normal.
1783 1791
1784 root.child_ids.push_back(div_editable.id); 1792 root.child_ids.push_back(div_editable.id);
1785 div_editable.child_ids.push_back(text_before.id); 1793 div_editable.child_ids.push_back(text_before.id);
1786 div_editable.child_ids.push_back(link.id); 1794 div_editable.child_ids.push_back(link.id);
1787 div_editable.child_ids.push_back(text_after.id); 1795 div_editable.child_ids.push_back(text_after.id);
1788 link.child_ids.push_back(link_text.id); 1796 link.child_ids.push_back(link_text.id);
1789 1797
1790 ui::AXTreeUpdate update = MakeAXTreeUpdate(root, div_editable, text_before, 1798 ui::AXTreeUpdate update = MakeAXTreeUpdate(root, div_editable, text_before,
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1961 // The word "helo" is misspelled. 1969 // The word "helo" is misspelled.
1962 std::string value2("Helo there."); 1970 std::string value2("Helo there.");
1963 1971
1964 LONG value1_length = static_cast<LONG>(value1.length()); 1972 LONG value1_length = static_cast<LONG>(value1.length());
1965 LONG value2_length = static_cast<LONG>(value2.length()); 1973 LONG value2_length = static_cast<LONG>(value2.length());
1966 LONG combo_box_value_length = value1_length + value2_length; 1974 LONG combo_box_value_length = value1_length + value2_length;
1967 1975
1968 ui::AXNodeData root; 1976 ui::AXNodeData root;
1969 root.id = 1; 1977 root.id = 1;
1970 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 1978 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
1971 root.state = (1 << ui::AX_STATE_READ_ONLY) | (1 << ui::AX_STATE_FOCUSABLE); 1979 root.AddState(ui::AX_STATE_READ_ONLY);
1980 root.AddState(ui::AX_STATE_FOCUSABLE);
1972 1981
1973 ui::AXNodeData combo_box; 1982 ui::AXNodeData combo_box;
1974 combo_box.id = 2; 1983 combo_box.id = 2;
1975 combo_box.role = ui::AX_ROLE_COMBO_BOX; 1984 combo_box.role = ui::AX_ROLE_COMBO_BOX;
1976 combo_box.state = 1985 combo_box.AddState(ui::AX_STATE_EDITABLE);
1977 (1 << ui::AX_STATE_EDITABLE) | (1 << ui::AX_STATE_FOCUSABLE); 1986 combo_box.AddState(ui::AX_STATE_FOCUSABLE);
1978 combo_box.SetValue(value1 + value2); 1987 combo_box.SetValue(value1 + value2);
1979 1988
1980 ui::AXNodeData combo_box_div; 1989 ui::AXNodeData combo_box_div;
1981 combo_box_div.id = 3; 1990 combo_box_div.id = 3;
1982 combo_box_div.role = ui::AX_ROLE_DIV; 1991 combo_box_div.role = ui::AX_ROLE_DIV;
1983 combo_box_div.state = 1 << ui::AX_STATE_EDITABLE; 1992 combo_box_div.AddState(ui::AX_STATE_EDITABLE);
1984 1993
1985 ui::AXNodeData static_text1; 1994 ui::AXNodeData static_text1;
1986 static_text1.id = 4; 1995 static_text1.id = 4;
1987 static_text1.role = ui::AX_ROLE_STATIC_TEXT; 1996 static_text1.role = ui::AX_ROLE_STATIC_TEXT;
1988 static_text1.state = 1 << ui::AX_STATE_EDITABLE; 1997 static_text1.AddState(ui::AX_STATE_EDITABLE);
1989 static_text1.SetName(value1); 1998 static_text1.SetName(value1);
1990 1999
1991 ui::AXNodeData static_text2; 2000 ui::AXNodeData static_text2;
1992 static_text2.id = 5; 2001 static_text2.id = 5;
1993 static_text2.role = ui::AX_ROLE_STATIC_TEXT; 2002 static_text2.role = ui::AX_ROLE_STATIC_TEXT;
1994 static_text2.state = 1 << ui::AX_STATE_EDITABLE; 2003 static_text2.AddState(ui::AX_STATE_EDITABLE);
1995 static_text2.SetName(value2); 2004 static_text2.SetName(value2);
1996 2005
1997 std::vector<int32_t> marker_types; 2006 std::vector<int32_t> marker_types;
1998 marker_types.push_back(static_cast<int32_t>(ui::AX_MARKER_TYPE_SPELLING)); 2007 marker_types.push_back(static_cast<int32_t>(ui::AX_MARKER_TYPE_SPELLING));
1999 std::vector<int32_t> marker_starts; 2008 std::vector<int32_t> marker_starts;
2000 marker_starts.push_back(0); 2009 marker_starts.push_back(0);
2001 std::vector<int32_t> marker_ends; 2010 std::vector<int32_t> marker_ends;
2002 marker_ends.push_back(4); 2011 marker_ends.push_back(4);
2003 static_text2.AddIntListAttribute(ui::AX_ATTR_MARKER_TYPES, marker_types); 2012 static_text2.AddIntListAttribute(ui::AX_ATTR_MARKER_TYPES, marker_types);
2004 static_text2.AddIntListAttribute(ui::AX_ATTR_MARKER_STARTS, marker_starts); 2013 static_text2.AddIntListAttribute(ui::AX_ATTR_MARKER_STARTS, marker_starts);
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
2488 std::vector<AXEventNotificationDetails> events = {event}; 2497 std::vector<AXEventNotificationDetails> events = {event};
2489 manager->OnAccessibilityEvents(events); 2498 manager->OnAccessibilityEvents(events);
2490 2499
2491 EXPECT_HRESULT_SUCCEEDED(ax_child1->get_nRelations(&n_relations)); 2500 EXPECT_HRESULT_SUCCEEDED(ax_child1->get_nRelations(&n_relations));
2492 EXPECT_EQ(2, n_relations); 2501 EXPECT_EQ(2, n_relations);
2493 EXPECT_HRESULT_SUCCEEDED(ax_child2->get_nRelations(&n_relations)); 2502 EXPECT_HRESULT_SUCCEEDED(ax_child2->get_nRelations(&n_relations));
2494 EXPECT_EQ(2, n_relations); 2503 EXPECT_EQ(2, n_relations);
2495 } 2504 }
2496 2505
2497 } // namespace content 2506 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698