OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/services/public/cpp/view_manager/view.h" | 5 #include "mojo/services/public/cpp/view_manager/view.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" | 9 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" |
10 #include "mojo/services/public/cpp/view_manager/util.h" | 10 #include "mojo/services/public/cpp/view_manager/util.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 v1.AddChild(&v11); | 78 v1.AddChild(&v11); |
79 TestView v111; | 79 TestView v111; |
80 ViewPrivate(&v111).set_id(111); | 80 ViewPrivate(&v111).set_id(111); |
81 v11.AddChild(&v111); | 81 v11.AddChild(&v111); |
82 | 82 |
83 // Find direct & indirect descendents. | 83 // Find direct & indirect descendents. |
84 EXPECT_EQ(&v11, v1.GetChildById(v11.id())); | 84 EXPECT_EQ(&v11, v1.GetChildById(v11.id())); |
85 EXPECT_EQ(&v111, v1.GetChildById(v111.id())); | 85 EXPECT_EQ(&v111, v1.GetChildById(v111.id())); |
86 } | 86 } |
87 | 87 |
| 88 TEST_F(ViewTest, DrawnAndVisible) { |
| 89 TestView v1; |
| 90 EXPECT_TRUE(v1.visible()); |
| 91 EXPECT_FALSE(v1.IsDrawn()); |
| 92 |
| 93 ViewPrivate(&v1).set_drawn(true); |
| 94 |
| 95 TestView v11; |
| 96 v1.AddChild(&v11); |
| 97 EXPECT_TRUE(v11.visible()); |
| 98 EXPECT_TRUE(v11.IsDrawn()); |
| 99 |
| 100 v1.RemoveChild(&v11); |
| 101 EXPECT_TRUE(v11.visible()); |
| 102 EXPECT_FALSE(v11.IsDrawn()); |
| 103 } |
| 104 |
88 // ViewObserver -------------------------------------------------------- | 105 // ViewObserver -------------------------------------------------------- |
89 | 106 |
90 typedef testing::Test ViewObserverTest; | 107 typedef testing::Test ViewObserverTest; |
91 | 108 |
92 bool TreeChangeParamsMatch(const ViewObserver::TreeChangeParams& lhs, | 109 bool TreeChangeParamsMatch(const ViewObserver::TreeChangeParams& lhs, |
93 const ViewObserver::TreeChangeParams& rhs) { | 110 const ViewObserver::TreeChangeParams& rhs) { |
94 return lhs.target == rhs.target && lhs.old_parent == rhs.old_parent && | 111 return lhs.target == rhs.target && lhs.old_parent == rhs.old_parent && |
95 lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver; | 112 lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver; |
96 } | 113 } |
97 | 114 |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 { | 403 { |
387 OrderChangeObserver observer(&v11); | 404 OrderChangeObserver observer(&v11); |
388 | 405 |
389 // Move v11 to front. | 406 // Move v11 to front. |
390 // Resulting order: v12, v13, v11 | 407 // Resulting order: v12, v13, v11 |
391 v11.MoveToFront(); | 408 v11.MoveToFront(); |
392 EXPECT_EQ(&v12, v1.children().front()); | 409 EXPECT_EQ(&v12, v1.children().front()); |
393 EXPECT_EQ(&v11, v1.children().back()); | 410 EXPECT_EQ(&v11, v1.children().back()); |
394 | 411 |
395 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 412 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
396 EXPECT_EQ(2U, changes.size()); | 413 ASSERT_EQ(2U, changes.size()); |
397 EXPECT_EQ(&v11, changes[0].view); | 414 EXPECT_EQ(&v11, changes[0].view); |
398 EXPECT_EQ(&v13, changes[0].relative_view); | 415 EXPECT_EQ(&v13, changes[0].relative_view); |
399 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); | 416 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); |
400 | 417 |
401 EXPECT_EQ(&v11, changes[1].view); | 418 EXPECT_EQ(&v11, changes[1].view); |
402 EXPECT_EQ(&v13, changes[1].relative_view); | 419 EXPECT_EQ(&v13, changes[1].relative_view); |
403 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); | 420 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); |
404 } | 421 } |
405 | 422 |
406 { | 423 { |
407 OrderChangeObserver observer(&v11); | 424 OrderChangeObserver observer(&v11); |
408 | 425 |
409 // Move v11 to back. | 426 // Move v11 to back. |
410 // Resulting order: v11, v12, v13 | 427 // Resulting order: v11, v12, v13 |
411 v11.MoveToBack(); | 428 v11.MoveToBack(); |
412 EXPECT_EQ(&v11, v1.children().front()); | 429 EXPECT_EQ(&v11, v1.children().front()); |
413 EXPECT_EQ(&v13, v1.children().back()); | 430 EXPECT_EQ(&v13, v1.children().back()); |
414 | 431 |
415 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 432 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
416 EXPECT_EQ(2U, changes.size()); | 433 ASSERT_EQ(2U, changes.size()); |
417 EXPECT_EQ(&v11, changes[0].view); | 434 EXPECT_EQ(&v11, changes[0].view); |
418 EXPECT_EQ(&v12, changes[0].relative_view); | 435 EXPECT_EQ(&v12, changes[0].relative_view); |
419 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); | 436 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); |
420 | 437 |
421 EXPECT_EQ(&v11, changes[1].view); | 438 EXPECT_EQ(&v11, changes[1].view); |
422 EXPECT_EQ(&v12, changes[1].relative_view); | 439 EXPECT_EQ(&v12, changes[1].relative_view); |
423 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); | 440 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); |
424 } | 441 } |
425 | 442 |
426 { | 443 { |
427 OrderChangeObserver observer(&v11); | 444 OrderChangeObserver observer(&v11); |
428 | 445 |
429 // Move v11 above v12. | 446 // Move v11 above v12. |
430 // Resulting order: v12. v11, v13 | 447 // Resulting order: v12. v11, v13 |
431 v11.Reorder(&v12, ORDER_DIRECTION_ABOVE); | 448 v11.Reorder(&v12, ORDER_DIRECTION_ABOVE); |
432 EXPECT_EQ(&v12, v1.children().front()); | 449 EXPECT_EQ(&v12, v1.children().front()); |
433 EXPECT_EQ(&v13, v1.children().back()); | 450 EXPECT_EQ(&v13, v1.children().back()); |
434 | 451 |
435 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 452 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
436 EXPECT_EQ(2U, changes.size()); | 453 ASSERT_EQ(2U, changes.size()); |
437 EXPECT_EQ(&v11, changes[0].view); | 454 EXPECT_EQ(&v11, changes[0].view); |
438 EXPECT_EQ(&v12, changes[0].relative_view); | 455 EXPECT_EQ(&v12, changes[0].relative_view); |
439 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); | 456 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); |
440 | 457 |
441 EXPECT_EQ(&v11, changes[1].view); | 458 EXPECT_EQ(&v11, changes[1].view); |
442 EXPECT_EQ(&v12, changes[1].relative_view); | 459 EXPECT_EQ(&v12, changes[1].relative_view); |
443 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); | 460 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); |
444 } | 461 } |
445 | 462 |
446 { | 463 { |
447 OrderChangeObserver observer(&v11); | 464 OrderChangeObserver observer(&v11); |
448 | 465 |
449 // Move v11 below v12. | 466 // Move v11 below v12. |
450 // Resulting order: v11, v12, v13 | 467 // Resulting order: v11, v12, v13 |
451 v11.Reorder(&v12, ORDER_DIRECTION_BELOW); | 468 v11.Reorder(&v12, ORDER_DIRECTION_BELOW); |
452 EXPECT_EQ(&v11, v1.children().front()); | 469 EXPECT_EQ(&v11, v1.children().front()); |
453 EXPECT_EQ(&v13, v1.children().back()); | 470 EXPECT_EQ(&v13, v1.children().back()); |
454 | 471 |
455 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 472 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
456 EXPECT_EQ(2U, changes.size()); | 473 ASSERT_EQ(2U, changes.size()); |
457 EXPECT_EQ(&v11, changes[0].view); | 474 EXPECT_EQ(&v11, changes[0].view); |
458 EXPECT_EQ(&v12, changes[0].relative_view); | 475 EXPECT_EQ(&v12, changes[0].relative_view); |
459 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); | 476 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); |
460 | 477 |
461 EXPECT_EQ(&v11, changes[1].view); | 478 EXPECT_EQ(&v11, changes[1].view); |
462 EXPECT_EQ(&v12, changes[1].relative_view); | 479 EXPECT_EQ(&v12, changes[1].relative_view); |
463 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); | 480 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); |
464 } | 481 } |
465 } | 482 } |
466 | 483 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 | 541 |
525 } // namespace | 542 } // namespace |
526 | 543 |
527 TEST_F(ViewObserverTest, SetBounds) { | 544 TEST_F(ViewObserverTest, SetBounds) { |
528 TestView v1; | 545 TestView v1; |
529 { | 546 { |
530 BoundsChangeObserver observer(&v1); | 547 BoundsChangeObserver observer(&v1); |
531 v1.SetBounds(gfx::Rect(0, 0, 100, 100)); | 548 v1.SetBounds(gfx::Rect(0, 0, 100, 100)); |
532 | 549 |
533 Changes changes = observer.GetAndClearChanges(); | 550 Changes changes = observer.GetAndClearChanges(); |
534 EXPECT_EQ(2U, changes.size()); | 551 ASSERT_EQ(2U, changes.size()); |
535 EXPECT_EQ( | 552 EXPECT_EQ( |
536 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changing", | 553 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changing", |
537 changes[0]); | 554 changes[0]); |
538 EXPECT_EQ( | 555 EXPECT_EQ( |
539 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changed", | 556 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changed", |
540 changes[1]); | 557 changes[1]); |
541 } | 558 } |
542 } | 559 } |
543 | 560 |
| 561 namespace { |
| 562 |
| 563 class VisibilityChangeObserver : public ViewObserver { |
| 564 public: |
| 565 explicit VisibilityChangeObserver(View* view) : view_(view) { |
| 566 view_->AddObserver(this); |
| 567 } |
| 568 virtual ~VisibilityChangeObserver() { view_->RemoveObserver(this); } |
| 569 |
| 570 Changes GetAndClearChanges() { |
| 571 Changes changes; |
| 572 changes.swap(changes_); |
| 573 return changes; |
| 574 } |
| 575 |
| 576 private: |
| 577 // Overridden from ViewObserver: |
| 578 virtual void OnViewVisibilityChanging(View* view) OVERRIDE { |
| 579 changes_.push_back( |
| 580 base::StringPrintf("view=%s phase=changing visibility=%s", |
| 581 ViewIdToString(view->id()).c_str(), |
| 582 view->visible() ? "true" : "false")); |
| 583 } |
| 584 virtual void OnViewVisibilityChanged(View* view) OVERRIDE { |
| 585 changes_.push_back(base::StringPrintf("view=%s phase=changed visibility=%s", |
| 586 ViewIdToString(view->id()).c_str(), |
| 587 view->visible() ? "true" : "false")); |
| 588 } |
| 589 |
| 590 View* view_; |
| 591 Changes changes_; |
| 592 |
| 593 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); |
| 594 }; |
| 595 |
| 596 } // namespace |
| 597 |
| 598 TEST_F(ViewObserverTest, SetVisible) { |
| 599 TestView v1; |
| 600 EXPECT_TRUE(v1.visible()); |
| 601 { |
| 602 // Change visibility from true to false and make sure we get notifications. |
| 603 VisibilityChangeObserver observer(&v1); |
| 604 v1.SetVisible(false); |
| 605 |
| 606 Changes changes = observer.GetAndClearChanges(); |
| 607 ASSERT_EQ(2U, changes.size()); |
| 608 EXPECT_EQ("view=0,1 phase=changing visibility=true", changes[0]); |
| 609 EXPECT_EQ("view=0,1 phase=changed visibility=false", changes[1]); |
| 610 } |
| 611 { |
| 612 // Set visible to existing value and verify no notifications. |
| 613 VisibilityChangeObserver observer(&v1); |
| 614 v1.SetVisible(false); |
| 615 EXPECT_TRUE(observer.GetAndClearChanges().empty()); |
| 616 } |
| 617 } |
| 618 |
544 } // namespace mojo | 619 } // namespace mojo |
OLD | NEW |