OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 ASSERT_EQ(params.page_url.spec(), tmp); | 486 ASSERT_EQ(params.page_url.spec(), tmp); |
487 | 487 |
488 string16 tmp16; | 488 string16 tmp16; |
489 ASSERT_TRUE(info->GetString("selectionText", &tmp16)); | 489 ASSERT_TRUE(info->GetString("selectionText", &tmp16)); |
490 ASSERT_EQ(params.selection_text, tmp16); | 490 ASSERT_EQ(params.selection_text, tmp16); |
491 | 491 |
492 bool bool_tmp = true; | 492 bool bool_tmp = true; |
493 ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp)); | 493 ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp)); |
494 ASSERT_EQ(params.is_editable, bool_tmp); | 494 ASSERT_EQ(params.is_editable, bool_tmp); |
495 } | 495 } |
| 496 |
| 497 // Test that there is always only one radio item selected. |
| 498 TEST_F(ExtensionMenuManagerTest, SanitizeRadioButtons) { |
| 499 Extension* extension = AddExtension("test"); |
| 500 |
| 501 // A single unchecked item should get checked |
| 502 ExtensionMenuItem* item1 = CreateTestItem(extension); |
| 503 |
| 504 item1->set_type(ExtensionMenuItem::RADIO); |
| 505 item1->SetChecked(false); |
| 506 ASSERT_FALSE(item1->checked()); |
| 507 manager_.AddContextItem(extension, item1); |
| 508 ASSERT_TRUE(item1->checked()); |
| 509 |
| 510 // In a run of two unchecked items, the first should get selected. |
| 511 item1->SetChecked(false); |
| 512 ExtensionMenuItem* item2 = CreateTestItem(extension); |
| 513 item2->set_type(ExtensionMenuItem::RADIO); |
| 514 item2->SetChecked(false); |
| 515 ASSERT_FALSE(item1->checked()); |
| 516 ASSERT_FALSE(item2->checked()); |
| 517 manager_.AddContextItem(extension, item2); |
| 518 ASSERT_TRUE(item1->checked()); |
| 519 ASSERT_FALSE(item2->checked()); |
| 520 |
| 521 // If multiple items are checked, only the last item should get checked. |
| 522 item1->SetChecked(true); |
| 523 item2->SetChecked(true); |
| 524 ASSERT_TRUE(item1->checked()); |
| 525 ASSERT_TRUE(item2->checked()); |
| 526 manager_.ItemUpdated(item1->id()); |
| 527 ASSERT_FALSE(item1->checked()); |
| 528 ASSERT_TRUE(item2->checked()); |
| 529 |
| 530 // If the checked item is removed, the new first item should get checked. |
| 531 item1->SetChecked(false); |
| 532 item2->SetChecked(true); |
| 533 ASSERT_FALSE(item1->checked()); |
| 534 ASSERT_TRUE(item2->checked()); |
| 535 manager_.RemoveContextMenuItem(item2->id()); |
| 536 item2 = NULL; |
| 537 ASSERT_TRUE(item1->checked()); |
| 538 |
| 539 // If a checked item is added to a run that already has a checked item, |
| 540 // then the new item should get checked. |
| 541 item1->SetChecked(true); |
| 542 ExtensionMenuItem* new_item = CreateTestItem(extension); |
| 543 new_item->set_type(ExtensionMenuItem::RADIO); |
| 544 new_item->SetChecked(true); |
| 545 ASSERT_TRUE(item1->checked()); |
| 546 ASSERT_TRUE(new_item->checked()); |
| 547 manager_.AddContextItem(extension, new_item); |
| 548 ASSERT_FALSE(item1->checked()); |
| 549 ASSERT_TRUE(new_item->checked()); |
| 550 // Make sure that children are checked as well. |
| 551 ExtensionMenuItem* parent = CreateTestItem(extension); |
| 552 manager_.AddContextItem(extension, parent); |
| 553 ExtensionMenuItem* child1 = CreateTestItem(extension); |
| 554 child1->set_type(ExtensionMenuItem::RADIO); |
| 555 child1->SetChecked(false); |
| 556 ExtensionMenuItem* child2 = CreateTestItem(extension); |
| 557 child2->set_type(ExtensionMenuItem::RADIO); |
| 558 child2->SetChecked(true); |
| 559 ASSERT_FALSE(child1->checked()); |
| 560 ASSERT_TRUE(child2->checked()); |
| 561 |
| 562 manager_.AddChildItem(parent->id(), child1); |
| 563 ASSERT_TRUE(child1->checked()); |
| 564 |
| 565 manager_.AddChildItem(parent->id(), child2); |
| 566 ASSERT_FALSE(child1->checked()); |
| 567 ASSERT_TRUE(child2->checked()); |
| 568 |
| 569 // Removing the checked item from the children should cause the |
| 570 // remaining child to be checked. |
| 571 manager_.RemoveContextMenuItem(child2->id()); |
| 572 child2 = NULL; |
| 573 ASSERT_TRUE(child1->checked()); |
| 574 |
| 575 // This should NOT cause |new_item| to be deseleted because |
| 576 // |parent| will be seperating the two runs of radio items. |
| 577 manager_.ChangeParent(child1->id(), NULL); |
| 578 ASSERT_TRUE(new_item->checked()); |
| 579 ASSERT_TRUE(child1->checked()); |
| 580 |
| 581 // Removing |parent| should cause only |child1| to be selected. |
| 582 manager_.RemoveContextMenuItem(parent->id()); |
| 583 parent = NULL; |
| 584 ASSERT_FALSE(new_item->checked()); |
| 585 ASSERT_TRUE(child1->checked()); |
| 586 } |
OLD | NEW |