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/window.h" | 5 #include "components/mus/public/cpp/window.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 // Move w11 to front. | 509 // Move w11 to front. |
510 // Resulting order: w12, w13, w11 | 510 // Resulting order: w12, w13, w11 |
511 w11.MoveToFront(); | 511 w11.MoveToFront(); |
512 EXPECT_EQ(&w12, w1.children().front()); | 512 EXPECT_EQ(&w12, w1.children().front()); |
513 EXPECT_EQ(&w11, w1.children().back()); | 513 EXPECT_EQ(&w11, w1.children().back()); |
514 | 514 |
515 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 515 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
516 ASSERT_EQ(2U, changes.size()); | 516 ASSERT_EQ(2U, changes.size()); |
517 EXPECT_EQ(&w11, changes[0].window); | 517 EXPECT_EQ(&w11, changes[0].window); |
518 EXPECT_EQ(&w13, changes[0].relative_window); | 518 EXPECT_EQ(&w13, changes[0].relative_window); |
519 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[0].direction); | 519 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[0].direction); |
520 | 520 |
521 EXPECT_EQ(&w11, changes[1].window); | 521 EXPECT_EQ(&w11, changes[1].window); |
522 EXPECT_EQ(&w13, changes[1].relative_window); | 522 EXPECT_EQ(&w13, changes[1].relative_window); |
523 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[1].direction); | 523 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[1].direction); |
524 } | 524 } |
525 | 525 |
526 { | 526 { |
527 OrderChangeObserver observer(&w11); | 527 OrderChangeObserver observer(&w11); |
528 | 528 |
529 // Move w11 to back. | 529 // Move w11 to back. |
530 // Resulting order: w11, w12, w13 | 530 // Resulting order: w11, w12, w13 |
531 w11.MoveToBack(); | 531 w11.MoveToBack(); |
532 EXPECT_EQ(&w11, w1.children().front()); | 532 EXPECT_EQ(&w11, w1.children().front()); |
533 EXPECT_EQ(&w13, w1.children().back()); | 533 EXPECT_EQ(&w13, w1.children().back()); |
534 | 534 |
535 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 535 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
536 ASSERT_EQ(2U, changes.size()); | 536 ASSERT_EQ(2U, changes.size()); |
537 EXPECT_EQ(&w11, changes[0].window); | 537 EXPECT_EQ(&w11, changes[0].window); |
538 EXPECT_EQ(&w12, changes[0].relative_window); | 538 EXPECT_EQ(&w12, changes[0].relative_window); |
539 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[0].direction); | 539 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[0].direction); |
540 | 540 |
541 EXPECT_EQ(&w11, changes[1].window); | 541 EXPECT_EQ(&w11, changes[1].window); |
542 EXPECT_EQ(&w12, changes[1].relative_window); | 542 EXPECT_EQ(&w12, changes[1].relative_window); |
543 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[1].direction); | 543 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[1].direction); |
544 } | 544 } |
545 | 545 |
546 { | 546 { |
547 OrderChangeObserver observer(&w11); | 547 OrderChangeObserver observer(&w11); |
548 | 548 |
549 // Move w11 above w12. | 549 // Move w11 above w12. |
550 // Resulting order: w12. w11, w13 | 550 // Resulting order: w12. w11, w13 |
551 w11.Reorder(&w12, mojom::ORDER_DIRECTION_ABOVE); | 551 w11.Reorder(&w12, mojom::OrderDirection::ABOVE); |
552 EXPECT_EQ(&w12, w1.children().front()); | 552 EXPECT_EQ(&w12, w1.children().front()); |
553 EXPECT_EQ(&w13, w1.children().back()); | 553 EXPECT_EQ(&w13, w1.children().back()); |
554 | 554 |
555 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 555 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
556 ASSERT_EQ(2U, changes.size()); | 556 ASSERT_EQ(2U, changes.size()); |
557 EXPECT_EQ(&w11, changes[0].window); | 557 EXPECT_EQ(&w11, changes[0].window); |
558 EXPECT_EQ(&w12, changes[0].relative_window); | 558 EXPECT_EQ(&w12, changes[0].relative_window); |
559 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[0].direction); | 559 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[0].direction); |
560 | 560 |
561 EXPECT_EQ(&w11, changes[1].window); | 561 EXPECT_EQ(&w11, changes[1].window); |
562 EXPECT_EQ(&w12, changes[1].relative_window); | 562 EXPECT_EQ(&w12, changes[1].relative_window); |
563 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[1].direction); | 563 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[1].direction); |
564 } | 564 } |
565 | 565 |
566 { | 566 { |
567 OrderChangeObserver observer(&w11); | 567 OrderChangeObserver observer(&w11); |
568 | 568 |
569 // Move w11 below w12. | 569 // Move w11 below w12. |
570 // Resulting order: w11, w12, w13 | 570 // Resulting order: w11, w12, w13 |
571 w11.Reorder(&w12, mojom::ORDER_DIRECTION_BELOW); | 571 w11.Reorder(&w12, mojom::OrderDirection::BELOW); |
572 EXPECT_EQ(&w11, w1.children().front()); | 572 EXPECT_EQ(&w11, w1.children().front()); |
573 EXPECT_EQ(&w13, w1.children().back()); | 573 EXPECT_EQ(&w13, w1.children().back()); |
574 | 574 |
575 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 575 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
576 ASSERT_EQ(2U, changes.size()); | 576 ASSERT_EQ(2U, changes.size()); |
577 EXPECT_EQ(&w11, changes[0].window); | 577 EXPECT_EQ(&w11, changes[0].window); |
578 EXPECT_EQ(&w12, changes[0].relative_window); | 578 EXPECT_EQ(&w12, changes[0].relative_window); |
579 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[0].direction); | 579 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[0].direction); |
580 | 580 |
581 EXPECT_EQ(&w11, changes[1].window); | 581 EXPECT_EQ(&w11, changes[1].window); |
582 EXPECT_EQ(&w12, changes[1].relative_window); | 582 EXPECT_EQ(&w12, changes[1].relative_window); |
583 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[1].direction); | 583 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[1].direction); |
584 } | 584 } |
585 } | 585 } |
586 | 586 |
587 namespace { | 587 namespace { |
588 | 588 |
589 typedef std::vector<std::string> Changes; | 589 typedef std::vector<std::string> Changes; |
590 | 590 |
591 std::string WindowIdToString(Id id) { | 591 std::string WindowIdToString(Id id) { |
592 return (id == 0) ? "null" | 592 return (id == 0) ? "null" |
593 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); | 593 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
978 EXPECT_EQ(w11, parent->children().back()); | 978 EXPECT_EQ(w11, parent->children().back()); |
979 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 979 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
980 | 980 |
981 // This tests that the order in children_ array rather than in | 981 // This tests that the order in children_ array rather than in |
982 // transient_children_ array is used when reinserting transient children. | 982 // transient_children_ array is used when reinserting transient children. |
983 // If transient_children_ array was used '22' would be following '21'. | 983 // If transient_children_ array was used '22' would be following '21'. |
984 w2->MoveToFront(); | 984 w2->MoveToFront(); |
985 EXPECT_EQ(w22, parent->children().back()); | 985 EXPECT_EQ(w22, parent->children().back()); |
986 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 986 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
987 | 987 |
988 w11->Reorder(w2.get(), mojom::ORDER_DIRECTION_ABOVE); | 988 w11->Reorder(w2.get(), mojom::OrderDirection::ABOVE); |
989 EXPECT_EQ(w11, parent->children().back()); | 989 EXPECT_EQ(w11, parent->children().back()); |
990 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 990 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
991 | 991 |
992 w21->Reorder(w1.get(), mojom::ORDER_DIRECTION_ABOVE); | 992 w21->Reorder(w1.get(), mojom::OrderDirection::ABOVE); |
993 EXPECT_EQ(w22, parent->children().back()); | 993 EXPECT_EQ(w22, parent->children().back()); |
994 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 994 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
995 | 995 |
996 w21->Reorder(w22, mojom::ORDER_DIRECTION_ABOVE); | 996 w21->Reorder(w22, mojom::OrderDirection::ABOVE); |
997 EXPECT_EQ(w213, parent->children().back()); | 997 EXPECT_EQ(w213, parent->children().back()); |
998 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); | 998 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); |
999 | 999 |
1000 w11->Reorder(w21, mojom::ORDER_DIRECTION_ABOVE); | 1000 w11->Reorder(w21, mojom::OrderDirection::ABOVE); |
1001 EXPECT_EQ(w11, parent->children().back()); | 1001 EXPECT_EQ(w11, parent->children().back()); |
1002 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); | 1002 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); |
1003 | 1003 |
1004 w213->Reorder(w21, mojom::ORDER_DIRECTION_ABOVE); | 1004 w213->Reorder(w21, mojom::OrderDirection::ABOVE); |
1005 EXPECT_EQ(w11, parent->children().back()); | 1005 EXPECT_EQ(w11, parent->children().back()); |
1006 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1006 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1007 | 1007 |
1008 // No change when stacking a transient parent above its transient child. | 1008 // No change when stacking a transient parent above its transient child. |
1009 w21->Reorder(w211, mojom::ORDER_DIRECTION_ABOVE); | 1009 w21->Reorder(w211, mojom::OrderDirection::ABOVE); |
1010 EXPECT_EQ(w11, parent->children().back()); | 1010 EXPECT_EQ(w11, parent->children().back()); |
1011 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1011 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1012 | 1012 |
1013 // This tests that the order in children_ array rather than in | 1013 // This tests that the order in children_ array rather than in |
1014 // transient_children_ array is used when reinserting transient children. | 1014 // transient_children_ array is used when reinserting transient children. |
1015 // If transient_children_ array was used '22' would be following '21'. | 1015 // If transient_children_ array was used '22' would be following '21'. |
1016 w2->Reorder(w1.get(), mojom::ORDER_DIRECTION_ABOVE); | 1016 w2->Reorder(w1.get(), mojom::OrderDirection::ABOVE); |
1017 EXPECT_EQ(w212, parent->children().back()); | 1017 EXPECT_EQ(w212, parent->children().back()); |
1018 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); | 1018 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); |
1019 | 1019 |
1020 w11->Reorder(w213, mojom::ORDER_DIRECTION_ABOVE); | 1020 w11->Reorder(w213, mojom::OrderDirection::ABOVE); |
1021 EXPECT_EQ(w11, parent->children().back()); | 1021 EXPECT_EQ(w11, parent->children().back()); |
1022 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1022 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1023 } | 1023 } |
1024 | 1024 |
1025 // Tests that transient children are stacked as a unit when using order below. | 1025 // Tests that transient children are stacked as a unit when using order below. |
1026 TEST_F(WindowTest, TransientWindowsGroupBelow) { | 1026 TEST_F(WindowTest, TransientWindowsGroupBelow) { |
1027 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); | 1027 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); |
1028 scoped_ptr<TestWindow> w1(CreateTestWindow(1, parent.get())); | 1028 scoped_ptr<TestWindow> w1(CreateTestWindow(1, parent.get())); |
1029 | 1029 |
1030 TestWindow* w11 = CreateTestWindow(11, parent.get()); | 1030 TestWindow* w11 = CreateTestWindow(11, parent.get()); |
(...skipping 25 matching lines...) Expand all Loading... |
1056 // transient_children_ array is used when reinserting transient children. | 1056 // transient_children_ array is used when reinserting transient children. |
1057 // If transient_children_ array was used '22' would be following '21'. | 1057 // If transient_children_ array was used '22' would be following '21'. |
1058 w2->MoveToBack(); | 1058 w2->MoveToBack(); |
1059 EXPECT_EQ(w11, parent->children().back()); | 1059 EXPECT_EQ(w11, parent->children().back()); |
1060 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 1060 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
1061 | 1061 |
1062 w1->MoveToBack(); | 1062 w1->MoveToBack(); |
1063 EXPECT_EQ(w22, parent->children().back()); | 1063 EXPECT_EQ(w22, parent->children().back()); |
1064 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 1064 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
1065 | 1065 |
1066 w21->Reorder(w1.get(), mojom::ORDER_DIRECTION_BELOW); | 1066 w21->Reorder(w1.get(), mojom::OrderDirection::BELOW); |
1067 EXPECT_EQ(w11, parent->children().back()); | 1067 EXPECT_EQ(w11, parent->children().back()); |
1068 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 1068 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
1069 | 1069 |
1070 w11->Reorder(w2.get(), mojom::ORDER_DIRECTION_BELOW); | 1070 w11->Reorder(w2.get(), mojom::OrderDirection::BELOW); |
1071 EXPECT_EQ(w22, parent->children().back()); | 1071 EXPECT_EQ(w22, parent->children().back()); |
1072 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 1072 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
1073 | 1073 |
1074 w22->Reorder(w21, mojom::ORDER_DIRECTION_BELOW); | 1074 w22->Reorder(w21, mojom::OrderDirection::BELOW); |
1075 EXPECT_EQ(w213, parent->children().back()); | 1075 EXPECT_EQ(w213, parent->children().back()); |
1076 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); | 1076 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); |
1077 | 1077 |
1078 w21->Reorder(w11, mojom::ORDER_DIRECTION_BELOW); | 1078 w21->Reorder(w11, mojom::OrderDirection::BELOW); |
1079 EXPECT_EQ(w11, parent->children().back()); | 1079 EXPECT_EQ(w11, parent->children().back()); |
1080 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); | 1080 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); |
1081 | 1081 |
1082 w213->Reorder(w211, mojom::ORDER_DIRECTION_BELOW); | 1082 w213->Reorder(w211, mojom::OrderDirection::BELOW); |
1083 EXPECT_EQ(w11, parent->children().back()); | 1083 EXPECT_EQ(w11, parent->children().back()); |
1084 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1084 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1085 | 1085 |
1086 // No change when stacking a transient parent below its transient child. | 1086 // No change when stacking a transient parent below its transient child. |
1087 w21->Reorder(w211, mojom::ORDER_DIRECTION_BELOW); | 1087 w21->Reorder(w211, mojom::OrderDirection::BELOW); |
1088 EXPECT_EQ(w11, parent->children().back()); | 1088 EXPECT_EQ(w11, parent->children().back()); |
1089 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1089 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1090 | 1090 |
1091 w1->Reorder(w2.get(), mojom::ORDER_DIRECTION_BELOW); | 1091 w1->Reorder(w2.get(), mojom::OrderDirection::BELOW); |
1092 EXPECT_EQ(w212, parent->children().back()); | 1092 EXPECT_EQ(w212, parent->children().back()); |
1093 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); | 1093 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); |
1094 | 1094 |
1095 w213->Reorder(w11, mojom::ORDER_DIRECTION_BELOW); | 1095 w213->Reorder(w11, mojom::OrderDirection::BELOW); |
1096 EXPECT_EQ(w11, parent->children().back()); | 1096 EXPECT_EQ(w11, parent->children().back()); |
1097 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1097 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
1098 } | 1098 } |
1099 | 1099 |
1100 // Tests that windows are restacked properly after a call to | 1100 // Tests that windows are restacked properly after a call to |
1101 // AddTransientWindow() or RemoveTransientWindow). | 1101 // AddTransientWindow() or RemoveTransientWindow). |
1102 TEST_F(WindowTest, RestackUponAddOrRemoveTransientWindow) { | 1102 TEST_F(WindowTest, RestackUponAddOrRemoveTransientWindow) { |
1103 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); | 1103 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); |
1104 scoped_ptr<TestWindow> windows[4]; | 1104 scoped_ptr<TestWindow> windows[4]; |
1105 for (int i = 0; i < 4; i++) | 1105 for (int i = 0; i < 4; i++) |
(...skipping 20 matching lines...) Expand all Loading... |
1126 scoped_ptr<TestWindow> window0(CreateTestWindow(1, parent.get())); | 1126 scoped_ptr<TestWindow> window0(CreateTestWindow(1, parent.get())); |
1127 scoped_ptr<TestWindow> window1(CreateTestWindow(2, parent.get())); | 1127 scoped_ptr<TestWindow> window1(CreateTestWindow(2, parent.get())); |
1128 | 1128 |
1129 TestWindow* window2 = CreateTestWindow(3, parent.get()); | 1129 TestWindow* window2 = CreateTestWindow(3, parent.get()); |
1130 | 1130 |
1131 window0->AddTransientWindow(window2); | 1131 window0->AddTransientWindow(window2); |
1132 EXPECT_EQ("1 3 2", ChildWindowIDsAsString(parent.get())); | 1132 EXPECT_EQ("1 3 2", ChildWindowIDsAsString(parent.get())); |
1133 } | 1133 } |
1134 | 1134 |
1135 } // namespace mus | 1135 } // namespace mus |
OLD | NEW |