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 "components/mus/public/cpp/view.h" | 5 #include "components/mus/public/cpp/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 "components/mus/public/cpp/lib/view_private.h" | 9 #include "components/mus/public/cpp/lib/view_private.h" |
10 #include "components/mus/public/cpp/util.h" | 10 #include "components/mus/public/cpp/util.h" |
11 #include "components/mus/public/cpp/view_observer.h" | 11 #include "components/mus/public/cpp/view_observer.h" |
12 #include "components/mus/public/cpp/view_property.h" | 12 #include "components/mus/public/cpp/view_property.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 namespace mojo { | 15 namespace mus { |
16 | 16 |
17 // View ------------------------------------------------------------------------ | 17 // View ------------------------------------------------------------------------ |
18 | 18 |
19 typedef testing::Test ViewTest; | 19 typedef testing::Test ViewTest; |
20 | 20 |
21 // Subclass with public ctor/dtor. | 21 // Subclass with public ctor/dtor. |
22 class TestView : public View { | 22 class TestView : public View { |
23 public: | 23 public: |
24 TestView() { ViewPrivate(this).set_id(1); } | 24 TestView() { ViewPrivate(this).set_id(1); } |
25 ~TestView() {} | 25 ~TestView() {} |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back())); | 416 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back())); |
417 } | 417 } |
418 | 418 |
419 namespace { | 419 namespace { |
420 | 420 |
421 class OrderChangeObserver : public ViewObserver { | 421 class OrderChangeObserver : public ViewObserver { |
422 public: | 422 public: |
423 struct Change { | 423 struct Change { |
424 View* view; | 424 View* view; |
425 View* relative_view; | 425 View* relative_view; |
426 OrderDirection direction; | 426 mojo::OrderDirection direction; |
427 }; | 427 }; |
428 typedef std::vector<Change> Changes; | 428 typedef std::vector<Change> Changes; |
429 | 429 |
430 explicit OrderChangeObserver(View* observee) : observee_(observee) { | 430 explicit OrderChangeObserver(View* observee) : observee_(observee) { |
431 observee_->AddObserver(this); | 431 observee_->AddObserver(this); |
432 } | 432 } |
433 ~OrderChangeObserver() override { observee_->RemoveObserver(this); } | 433 ~OrderChangeObserver() override { observee_->RemoveObserver(this); } |
434 | 434 |
435 Changes GetAndClearChanges() { | 435 Changes GetAndClearChanges() { |
436 Changes changes; | 436 Changes changes; |
437 changes_.swap(changes); | 437 changes_.swap(changes); |
438 return changes; | 438 return changes; |
439 } | 439 } |
440 | 440 |
441 private: | 441 private: |
442 // Overridden from ViewObserver: | 442 // Overridden from ViewObserver: |
443 void OnViewReordering(View* view, | 443 void OnViewReordering(View* view, |
444 View* relative_view, | 444 View* relative_view, |
445 OrderDirection direction) override { | 445 mojo::OrderDirection direction) override { |
446 OnViewReordered(view, relative_view, direction); | 446 OnViewReordered(view, relative_view, direction); |
447 } | 447 } |
448 | 448 |
449 void OnViewReordered(View* view, | 449 void OnViewReordered(View* view, |
450 View* relative_view, | 450 View* relative_view, |
451 OrderDirection direction) override { | 451 mojo::OrderDirection direction) override { |
452 Change change; | 452 Change change; |
453 change.view = view; | 453 change.view = view; |
454 change.relative_view = relative_view; | 454 change.relative_view = relative_view; |
455 change.direction = direction; | 455 change.direction = direction; |
456 changes_.push_back(change); | 456 changes_.push_back(change); |
457 } | 457 } |
458 | 458 |
459 View* observee_; | 459 View* observee_; |
460 Changes changes_; | 460 Changes changes_; |
461 | 461 |
(...skipping 19 matching lines...) Expand all Loading... |
481 // Move v11 to front. | 481 // Move v11 to front. |
482 // Resulting order: v12, v13, v11 | 482 // Resulting order: v12, v13, v11 |
483 v11.MoveToFront(); | 483 v11.MoveToFront(); |
484 EXPECT_EQ(&v12, v1.children().front()); | 484 EXPECT_EQ(&v12, v1.children().front()); |
485 EXPECT_EQ(&v11, v1.children().back()); | 485 EXPECT_EQ(&v11, v1.children().back()); |
486 | 486 |
487 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 487 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
488 ASSERT_EQ(2U, changes.size()); | 488 ASSERT_EQ(2U, changes.size()); |
489 EXPECT_EQ(&v11, changes[0].view); | 489 EXPECT_EQ(&v11, changes[0].view); |
490 EXPECT_EQ(&v13, changes[0].relative_view); | 490 EXPECT_EQ(&v13, changes[0].relative_view); |
491 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); | 491 EXPECT_EQ(mojo::ORDER_DIRECTION_ABOVE, changes[0].direction); |
492 | 492 |
493 EXPECT_EQ(&v11, changes[1].view); | 493 EXPECT_EQ(&v11, changes[1].view); |
494 EXPECT_EQ(&v13, changes[1].relative_view); | 494 EXPECT_EQ(&v13, changes[1].relative_view); |
495 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); | 495 EXPECT_EQ(mojo::ORDER_DIRECTION_ABOVE, changes[1].direction); |
496 } | 496 } |
497 | 497 |
498 { | 498 { |
499 OrderChangeObserver observer(&v11); | 499 OrderChangeObserver observer(&v11); |
500 | 500 |
501 // Move v11 to back. | 501 // Move v11 to back. |
502 // Resulting order: v11, v12, v13 | 502 // Resulting order: v11, v12, v13 |
503 v11.MoveToBack(); | 503 v11.MoveToBack(); |
504 EXPECT_EQ(&v11, v1.children().front()); | 504 EXPECT_EQ(&v11, v1.children().front()); |
505 EXPECT_EQ(&v13, v1.children().back()); | 505 EXPECT_EQ(&v13, v1.children().back()); |
506 | 506 |
507 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 507 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
508 ASSERT_EQ(2U, changes.size()); | 508 ASSERT_EQ(2U, changes.size()); |
509 EXPECT_EQ(&v11, changes[0].view); | 509 EXPECT_EQ(&v11, changes[0].view); |
510 EXPECT_EQ(&v12, changes[0].relative_view); | 510 EXPECT_EQ(&v12, changes[0].relative_view); |
511 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); | 511 EXPECT_EQ(mojo::ORDER_DIRECTION_BELOW, changes[0].direction); |
512 | 512 |
513 EXPECT_EQ(&v11, changes[1].view); | 513 EXPECT_EQ(&v11, changes[1].view); |
514 EXPECT_EQ(&v12, changes[1].relative_view); | 514 EXPECT_EQ(&v12, changes[1].relative_view); |
515 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); | 515 EXPECT_EQ(mojo::ORDER_DIRECTION_BELOW, changes[1].direction); |
516 } | 516 } |
517 | 517 |
518 { | 518 { |
519 OrderChangeObserver observer(&v11); | 519 OrderChangeObserver observer(&v11); |
520 | 520 |
521 // Move v11 above v12. | 521 // Move v11 above v12. |
522 // Resulting order: v12. v11, v13 | 522 // Resulting order: v12. v11, v13 |
523 v11.Reorder(&v12, ORDER_DIRECTION_ABOVE); | 523 v11.Reorder(&v12, mojo::ORDER_DIRECTION_ABOVE); |
524 EXPECT_EQ(&v12, v1.children().front()); | 524 EXPECT_EQ(&v12, v1.children().front()); |
525 EXPECT_EQ(&v13, v1.children().back()); | 525 EXPECT_EQ(&v13, v1.children().back()); |
526 | 526 |
527 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 527 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
528 ASSERT_EQ(2U, changes.size()); | 528 ASSERT_EQ(2U, changes.size()); |
529 EXPECT_EQ(&v11, changes[0].view); | 529 EXPECT_EQ(&v11, changes[0].view); |
530 EXPECT_EQ(&v12, changes[0].relative_view); | 530 EXPECT_EQ(&v12, changes[0].relative_view); |
531 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[0].direction); | 531 EXPECT_EQ(mojo::ORDER_DIRECTION_ABOVE, changes[0].direction); |
532 | 532 |
533 EXPECT_EQ(&v11, changes[1].view); | 533 EXPECT_EQ(&v11, changes[1].view); |
534 EXPECT_EQ(&v12, changes[1].relative_view); | 534 EXPECT_EQ(&v12, changes[1].relative_view); |
535 EXPECT_EQ(ORDER_DIRECTION_ABOVE, changes[1].direction); | 535 EXPECT_EQ(mojo::ORDER_DIRECTION_ABOVE, changes[1].direction); |
536 } | 536 } |
537 | 537 |
538 { | 538 { |
539 OrderChangeObserver observer(&v11); | 539 OrderChangeObserver observer(&v11); |
540 | 540 |
541 // Move v11 below v12. | 541 // Move v11 below v12. |
542 // Resulting order: v11, v12, v13 | 542 // Resulting order: v11, v12, v13 |
543 v11.Reorder(&v12, ORDER_DIRECTION_BELOW); | 543 v11.Reorder(&v12, mojo::ORDER_DIRECTION_BELOW); |
544 EXPECT_EQ(&v11, v1.children().front()); | 544 EXPECT_EQ(&v11, v1.children().front()); |
545 EXPECT_EQ(&v13, v1.children().back()); | 545 EXPECT_EQ(&v13, v1.children().back()); |
546 | 546 |
547 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 547 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
548 ASSERT_EQ(2U, changes.size()); | 548 ASSERT_EQ(2U, changes.size()); |
549 EXPECT_EQ(&v11, changes[0].view); | 549 EXPECT_EQ(&v11, changes[0].view); |
550 EXPECT_EQ(&v12, changes[0].relative_view); | 550 EXPECT_EQ(&v12, changes[0].relative_view); |
551 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[0].direction); | 551 EXPECT_EQ(mojo::ORDER_DIRECTION_BELOW, changes[0].direction); |
552 | 552 |
553 EXPECT_EQ(&v11, changes[1].view); | 553 EXPECT_EQ(&v11, changes[1].view); |
554 EXPECT_EQ(&v12, changes[1].relative_view); | 554 EXPECT_EQ(&v12, changes[1].relative_view); |
555 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); | 555 EXPECT_EQ(mojo::ORDER_DIRECTION_BELOW, changes[1].direction); |
556 } | 556 } |
557 } | 557 } |
558 | 558 |
559 namespace { | 559 namespace { |
560 | 560 |
561 typedef std::vector<std::string> Changes; | 561 typedef std::vector<std::string> Changes; |
562 | 562 |
563 std::string ViewIdToString(Id id) { | 563 std::string ViewIdToString(Id id) { |
564 return (id == 0) ? "null" | 564 return (id == 0) ? "null" |
565 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); | 565 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); |
566 } | 566 } |
567 | 567 |
568 std::string RectToString(const Rect& rect) { | 568 std::string RectToString(const mojo::Rect& rect) { |
569 return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width, | 569 return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width, |
570 rect.height); | 570 rect.height); |
571 } | 571 } |
572 | 572 |
573 class BoundsChangeObserver : public ViewObserver { | 573 class BoundsChangeObserver : public ViewObserver { |
574 public: | 574 public: |
575 explicit BoundsChangeObserver(View* view) : view_(view) { | 575 explicit BoundsChangeObserver(View* view) : view_(view) { |
576 view_->AddObserver(this); | 576 view_->AddObserver(this); |
577 } | 577 } |
578 ~BoundsChangeObserver() override { view_->RemoveObserver(this); } | 578 ~BoundsChangeObserver() override { view_->RemoveObserver(this); } |
579 | 579 |
580 Changes GetAndClearChanges() { | 580 Changes GetAndClearChanges() { |
581 Changes changes; | 581 Changes changes; |
582 changes.swap(changes_); | 582 changes.swap(changes_); |
583 return changes; | 583 return changes; |
584 } | 584 } |
585 | 585 |
586 private: | 586 private: |
587 // Overridden from ViewObserver: | 587 // Overridden from ViewObserver: |
588 void OnViewBoundsChanging(View* view, | 588 void OnViewBoundsChanging(View* view, |
589 const Rect& old_bounds, | 589 const mojo::Rect& old_bounds, |
590 const Rect& new_bounds) override { | 590 const mojo::Rect& new_bounds) override { |
591 changes_.push_back(base::StringPrintf( | 591 changes_.push_back(base::StringPrintf( |
592 "view=%s old_bounds=%s new_bounds=%s phase=changing", | 592 "view=%s old_bounds=%s new_bounds=%s phase=changing", |
593 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), | 593 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), |
594 RectToString(new_bounds).c_str())); | 594 RectToString(new_bounds).c_str())); |
595 } | 595 } |
596 void OnViewBoundsChanged(View* view, | 596 void OnViewBoundsChanged(View* view, |
597 const Rect& old_bounds, | 597 const mojo::Rect& old_bounds, |
598 const Rect& new_bounds) override { | 598 const mojo::Rect& new_bounds) override { |
599 changes_.push_back(base::StringPrintf( | 599 changes_.push_back(base::StringPrintf( |
600 "view=%s old_bounds=%s new_bounds=%s phase=changed", | 600 "view=%s old_bounds=%s new_bounds=%s phase=changed", |
601 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), | 601 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), |
602 RectToString(new_bounds).c_str())); | 602 RectToString(new_bounds).c_str())); |
603 } | 603 } |
604 | 604 |
605 View* view_; | 605 View* view_; |
606 Changes changes_; | 606 Changes changes_; |
607 | 607 |
608 MOJO_DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); | 608 MOJO_DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); |
609 }; | 609 }; |
610 | 610 |
611 } // namespace | 611 } // namespace |
612 | 612 |
613 TEST_F(ViewObserverTest, SetBounds) { | 613 TEST_F(ViewObserverTest, SetBounds) { |
614 TestView v1; | 614 TestView v1; |
615 { | 615 { |
616 BoundsChangeObserver observer(&v1); | 616 BoundsChangeObserver observer(&v1); |
617 Rect rect; | 617 mojo::Rect rect; |
618 rect.width = rect.height = 100; | 618 rect.width = rect.height = 100; |
619 v1.SetBounds(rect); | 619 v1.SetBounds(rect); |
620 | 620 |
621 Changes changes = observer.GetAndClearChanges(); | 621 Changes changes = observer.GetAndClearChanges(); |
622 ASSERT_EQ(2U, changes.size()); | 622 ASSERT_EQ(2U, changes.size()); |
623 EXPECT_EQ( | 623 EXPECT_EQ( |
624 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changing", | 624 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changing", |
625 changes[0]); | 625 changes[0]); |
626 EXPECT_EQ( | 626 EXPECT_EQ( |
627 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changed", | 627 "view=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changed", |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 v1.SetLocalProperty(&prop, 3); | 864 v1.SetLocalProperty(&prop, 3); |
865 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); | 865 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); |
866 v1.ClearLocalProperty(&prop); | 866 v1.ClearLocalProperty(&prop); |
867 EXPECT_EQ(PropertyChangeInfo(&prop, 3), o.PropertyChangeInfoAndClear()); | 867 EXPECT_EQ(PropertyChangeInfo(&prop, 3), o.PropertyChangeInfoAndClear()); |
868 | 868 |
869 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. | 869 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. |
870 EXPECT_EQ(PropertyChangeInfo(reinterpret_cast<const void*>(NULL), -3), | 870 EXPECT_EQ(PropertyChangeInfo(reinterpret_cast<const void*>(NULL), -3), |
871 o.PropertyChangeInfoAndClear()); | 871 o.PropertyChangeInfoAndClear()); |
872 } | 872 } |
873 | 873 |
874 } // namespace mojo | 874 } // namespace mus |
OLD | NEW |