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

Side by Side Diff: ash/wm/dock/docked_window_layout_manager_unittest.cc

Issue 101383004: Eliminates gap at the top and bottom of docked area (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Eliminates gap at the top and bottom of docked area (nits) Created 6 years, 11 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
« no previous file with comments | « ash/wm/dock/docked_window_layout_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "ash/wm/dock/docked_window_layout_manager.h" 5 #include "ash/wm/dock/docked_window_layout_manager.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/screen_ash.h" 9 #include "ash/screen_ash.h"
10 #include "ash/shelf/shelf.h" 10 #include "ash/shelf/shelf.h"
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 EXPECT_EQ(w2->GetRootWindow()->bounds().right(), 412 EXPECT_EQ(w2->GetRootWindow()->bounds().right(),
413 w2->GetBoundsInScreen().right()); 413 w2->GetBoundsInScreen().right());
414 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); 414 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id());
415 415
416 // Test that the gaps differ at most by a single pixel. 416 // Test that the gaps differ at most by a single pixel.
417 gfx::Rect work_area = 417 gfx::Rect work_area =
418 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); 418 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area();
419 int gap1 = w1->GetBoundsInScreen().y(); 419 int gap1 = w1->GetBoundsInScreen().y();
420 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom(); 420 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom();
421 int gap3 = work_area.bottom() - w2->GetBoundsInScreen().bottom(); 421 int gap3 = work_area.bottom() - w2->GetBoundsInScreen().bottom();
422 EXPECT_NEAR(gap1, min_dock_gap(), 1); 422 EXPECT_EQ(0, gap1);
423 EXPECT_NEAR(gap2, min_dock_gap(), 1); 423 EXPECT_NEAR(gap2, min_dock_gap(), 1);
424 EXPECT_NEAR(gap3, min_dock_gap(), 1); 424 EXPECT_EQ(0, gap3);
425 } 425 }
426 426
427 // Adds two non-overlapping windows and tests layout after a drag. 427 // Adds two non-overlapping windows and tests layout after a drag.
428 TEST_P(DockedWindowLayoutManagerTest, TwoWindowsDragging) { 428 TEST_P(DockedWindowLayoutManagerTest, TwoWindowsDragging) {
429 if (!SupportsHostWindowResize()) 429 if (!SupportsHostWindowResize())
430 return; 430 return;
431 431
432 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); 432 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201)));
433 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 202))); 433 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 202)));
434 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); 434 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20);
(...skipping 11 matching lines...) Expand all
446 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w2.get(), 0, 20)); 446 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w2.get(), 0, 20));
447 DragMove(0, -w2->bounds().height() / 2 - min_dock_gap() - 1); 447 DragMove(0, -w2->bounds().height() / 2 - min_dock_gap() - 1);
448 DragEnd(); 448 DragEnd();
449 449
450 // Test the new windows order and that the gaps differ at most by a pixel. 450 // Test the new windows order and that the gaps differ at most by a pixel.
451 gfx::Rect work_area = 451 gfx::Rect work_area =
452 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); 452 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area();
453 int gap1 = w2->GetBoundsInScreen().y() - work_area.y(); 453 int gap1 = w2->GetBoundsInScreen().y() - work_area.y();
454 int gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom(); 454 int gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom();
455 int gap3 = work_area.bottom() - w1->GetBoundsInScreen().bottom(); 455 int gap3 = work_area.bottom() - w1->GetBoundsInScreen().bottom();
456 EXPECT_NEAR(gap1, min_dock_gap(), 1); 456 EXPECT_EQ(0, gap1);
457 EXPECT_NEAR(gap2, min_dock_gap(), 1); 457 EXPECT_NEAR(gap2, min_dock_gap(), 1);
458 EXPECT_NEAR(gap3, min_dock_gap(), 1); 458 EXPECT_EQ(0, gap3);
459 } 459 }
460 460
461 // Adds three overlapping windows and tests layout after a drag. 461 // Adds three overlapping windows and tests layout after a drag.
462 TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDragging) { 462 TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDragging) {
463 if (!SupportsHostWindowResize()) 463 if (!SupportsHostWindowResize())
464 return; 464 return;
465 UpdateDisplay("600x1000"); 465 UpdateDisplay("600x1000");
466 466
467 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 310))); 467 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 310)));
468 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); 468 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20);
(...skipping 14 matching lines...) Expand all
483 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w3->parent()->id()); 483 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w3->parent()->id());
484 484
485 // Test that the top and bottom windows are clamped in work area and 485 // Test that the top and bottom windows are clamped in work area and
486 // that the gaps between the windows differ at most by a pixel. 486 // that the gaps between the windows differ at most by a pixel.
487 gfx::Rect work_area = 487 gfx::Rect work_area =
488 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); 488 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area();
489 int gap1 = w1->GetBoundsInScreen().y() - work_area.y(); 489 int gap1 = w1->GetBoundsInScreen().y() - work_area.y();
490 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom(); 490 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom();
491 int gap3 = w3->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom(); 491 int gap3 = w3->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom();
492 int gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); 492 int gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom();
493 EXPECT_NEAR(gap1, min_dock_gap(), 1); 493 EXPECT_EQ(0, gap1);
494 EXPECT_NEAR(gap2, min_dock_gap(), 1); 494 EXPECT_NEAR(gap2, min_dock_gap(), 1);
495 EXPECT_NEAR(gap3, min_dock_gap(), 1); 495 EXPECT_NEAR(gap3, min_dock_gap(), 1);
496 EXPECT_NEAR(gap4, min_dock_gap(), 1); 496 EXPECT_EQ(0, gap4);
497 497
498 // Drag w1 below the point where w1 and w2 would swap places. This point is 498 // Drag w1 below the point where w1 and w2 would swap places. This point is
499 // half way between the tops of those two windows. 499 // half way between the tops of those two windows.
500 // A bit more vertical drag is needed to account for a window bounds changing 500 // A bit more vertical drag is needed to account for a window bounds changing
501 // to its restore bounds during the drag. 501 // to its restore bounds during the drag.
502 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20)); 502 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20));
503 DragMove(0, min_dock_gap() + w2->bounds().height() / 2 + 10); 503 DragMove(0, min_dock_gap() + w2->bounds().height() / 2 + 10);
504 504
505 // During the drag the windows get rearranged and the top and the bottom 505 // During the drag the windows get rearranged and the top and the bottom
506 // should be limited by the work area + |kMinDockGap|. 506 // should be limited by the work area.
507 EXPECT_EQ(min_dock_gap(), w2->GetBoundsInScreen().y()); 507 EXPECT_EQ(work_area.y(), w2->GetBoundsInScreen().y());
508 EXPECT_GT(w1->GetBoundsInScreen().y(), w2->GetBoundsInScreen().y()); 508 EXPECT_GT(w1->GetBoundsInScreen().y(), w2->GetBoundsInScreen().y());
509 EXPECT_EQ(min_dock_gap(), 509 EXPECT_EQ(work_area.bottom(), w3->GetBoundsInScreen().bottom());
510 work_area.bottom() - w3->GetBoundsInScreen().bottom());
511 DragEnd(); 510 DragEnd();
512 511
513 // Test the new windows order and that the gaps differ at most by a pixel. 512 // Test the new windows order and that the gaps differ at most by a pixel.
514 gap1 = w2->GetBoundsInScreen().y() - work_area.y(); 513 gap1 = w2->GetBoundsInScreen().y() - work_area.y();
515 gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom(); 514 gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom();
516 gap3 = w3->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom(); 515 gap3 = w3->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom();
517 gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); 516 gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom();
518 EXPECT_NEAR(gap1, min_dock_gap(), 1); 517 EXPECT_EQ(0, gap1);
519 EXPECT_NEAR(gap2, min_dock_gap(), 1); 518 EXPECT_NEAR(gap2, min_dock_gap(), 1);
520 EXPECT_NEAR(gap3, min_dock_gap(), 1); 519 EXPECT_NEAR(gap3, min_dock_gap(), 1);
521 EXPECT_NEAR(gap4, min_dock_gap(), 1); 520 EXPECT_EQ(0, gap4);
522 } 521 }
523 522
524 // Adds three windows in bottom display and tests layout after a drag. 523 // Adds three windows in bottom display and tests layout after a drag.
525 TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDraggingSecondScreen) { 524 TEST_P(DockedWindowLayoutManagerTest, ThreeWindowsDraggingSecondScreen) {
526 if (!SupportsMultipleDisplays() || !SupportsHostWindowResize()) 525 if (!SupportsMultipleDisplays() || !SupportsHostWindowResize())
527 return; 526 return;
528 527
529 // Create two screen vertical layout. 528 // Create two screen vertical layout.
530 UpdateDisplay("600x1000,600x1000"); 529 UpdateDisplay("600x1000,600x1000");
531 // Layout the secondary display to the bottom of the primary. 530 // Layout the secondary display to the bottom of the primary.
(...skipping 21 matching lines...) Expand all
553 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w3->parent()->id()); 552 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w3->parent()->id());
554 553
555 gfx::Rect work_area = 554 gfx::Rect work_area =
556 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); 555 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area();
557 // Test that the top and bottom windows are clamped in work area and 556 // Test that the top and bottom windows are clamped in work area and
558 // that the overlaps between the windows differ at most by a pixel. 557 // that the overlaps between the windows differ at most by a pixel.
559 int gap1 = w1->GetBoundsInScreen().y() - work_area.y(); 558 int gap1 = w1->GetBoundsInScreen().y() - work_area.y();
560 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom(); 559 int gap2 = w2->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom();
561 int gap3 = w3->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom(); 560 int gap3 = w3->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom();
562 int gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); 561 int gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom();
563 EXPECT_NEAR(gap1, min_dock_gap(), 1); 562 EXPECT_EQ(0, gap1);
564 EXPECT_NEAR(gap2, min_dock_gap(), 1); 563 EXPECT_NEAR(gap2, min_dock_gap(), 1);
565 EXPECT_NEAR(gap3, min_dock_gap(), 1); 564 EXPECT_NEAR(gap3, min_dock_gap(), 1);
566 EXPECT_NEAR(gap4, min_dock_gap(), 1); 565 EXPECT_EQ(0, gap4);
567 566
568 // Drag w1 below the point where w1 and w2 would swap places. This point is 567 // Drag w1 below the point where w1 and w2 would swap places. This point is
569 // half way between the tops of those two windows. 568 // half way between the tops of those two windows.
570 // A bit more vertical drag is needed to account for a window bounds changing 569 // A bit more vertical drag is needed to account for a window bounds changing
571 // to its restore bounds during the drag. 570 // to its restore bounds during the drag.
572 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20)); 571 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin(w1.get(), 0, 20));
573 DragMove(0, min_dock_gap() + w2->bounds().height() / 2 + 10); 572 DragMove(0, min_dock_gap() + w2->bounds().height() / 2 + 10);
574 573
575 // During the drag the windows get rearranged and the top and the bottom 574 // During the drag the windows get rearranged and the top and the bottom
576 // should be limited by the work area + |kMinDockGap|. 575 // should be limited by the work area.
577 EXPECT_EQ(work_area.y() + min_dock_gap(), w2->GetBoundsInScreen().y()); 576 EXPECT_EQ(work_area.y(), w2->GetBoundsInScreen().y());
578 EXPECT_GT(w1->GetBoundsInScreen().y(), w2->GetBoundsInScreen().y()); 577 EXPECT_GT(w1->GetBoundsInScreen().y(), w2->GetBoundsInScreen().y());
579 EXPECT_EQ(min_dock_gap(), 578 EXPECT_EQ(work_area.bottom(), w3->GetBoundsInScreen().bottom());
580 work_area.bottom() - w3->GetBoundsInScreen().bottom());
581 DragEnd(); 579 DragEnd();
582 580
583 // Test the new windows order and that the overlaps differ at most by a pixel. 581 // Test the new windows order and that the overlaps differ at most by a pixel.
584 gap1 = w2->GetBoundsInScreen().y() - work_area.y(); 582 gap1 = w2->GetBoundsInScreen().y() - work_area.y();
585 gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom(); 583 gap2 = w1->GetBoundsInScreen().y() - w2->GetBoundsInScreen().bottom();
586 gap3 = w3->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom(); 584 gap3 = w3->GetBoundsInScreen().y() - w1->GetBoundsInScreen().bottom();
587 gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom(); 585 gap4 = work_area.bottom() - w3->GetBoundsInScreen().bottom();
588 EXPECT_NEAR(gap1, min_dock_gap(), 1); 586 EXPECT_EQ(0, gap1);
589 EXPECT_NEAR(gap2, min_dock_gap(), 1); 587 EXPECT_NEAR(gap2, min_dock_gap(), 1);
590 EXPECT_NEAR(gap3, min_dock_gap(), 1); 588 EXPECT_NEAR(gap3, min_dock_gap(), 1);
591 EXPECT_NEAR(gap4, min_dock_gap(), 1); 589 EXPECT_EQ(0, gap4);
592 } 590 }
593 591
594 // Tests that a second window added to the dock is resized to match. 592 // Tests that a second window added to the dock is resized to match.
595 TEST_P(DockedWindowLayoutManagerTest, TwoWindowsWidthNew) { 593 TEST_P(DockedWindowLayoutManagerTest, TwoWindowsWidthNew) {
596 if (!SupportsHostWindowResize()) 594 if (!SupportsHostWindowResize())
597 return; 595 return;
598 596
599 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); 597 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201)));
600 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 280, 202))); 598 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 280, 202)));
601 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); 599 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20);
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 EXPECT_LT(w2->GetBoundsInScreen().height(), work_area.height() / 2 - 10); 806 EXPECT_LT(w2->GetBoundsInScreen().height(), work_area.height() / 2 - 10);
809 } 807 }
810 808
811 // Tests run twice - on both panels and normal windows 809 // Tests run twice - on both panels and normal windows
812 INSTANTIATE_TEST_CASE_P(NormalOrPanel, 810 INSTANTIATE_TEST_CASE_P(NormalOrPanel,
813 DockedWindowLayoutManagerTest, 811 DockedWindowLayoutManagerTest,
814 testing::Values(ui::wm::WINDOW_TYPE_NORMAL, 812 testing::Values(ui::wm::WINDOW_TYPE_NORMAL,
815 ui::wm::WINDOW_TYPE_PANEL)); 813 ui::wm::WINDOW_TYPE_PANEL));
816 } // namespace internal 814 } // namespace internal
817 } // namespace ash 815 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/dock/docked_window_layout_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698