File: window_position_in_root_monitor_unittest.cc

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (74 lines) | stat: -rw-r--r-- 2,503 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/aura_extra/window_position_in_root_monitor.h"

#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/test/bind.h"
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/test/test_windows.h"
#include "ui/aura/window.h"
#include "ui/gfx/geometry/rect.h"

namespace aura_extra {

using WindowPositionInRootMonitorTest = aura::test::AuraTestBase;

TEST_F(WindowPositionInRootMonitorTest, Basic) {
  // Changing the position while not in a root should not notify the callback.
  std::unique_ptr<aura::Window> w1(
      aura::test::CreateTestWindowWithId(1, nullptr));
  w1->set_owned_by_parent(false);
  bool monitor_notified = false;
  WindowPositionInRootMonitor monitor(
      w1.get(), base::BindLambdaForTesting([&] { monitor_notified = true; }));
  w1->SetBounds(gfx::Rect(1, 2, 3, 4));
  EXPECT_FALSE(monitor_notified);
  w1->SetBounds(gfx::Rect(11, 2, 3, 4));
  EXPECT_FALSE(monitor_notified);

  // Adding an ancestor that is not part of the root should not notify the
  // callback.
  std::unique_ptr<aura::Window> w2(
      aura::test::CreateTestWindowWithId(2, nullptr));
  w2->set_owned_by_parent(false);
  w2->AddChild(w1.get());
  EXPECT_FALSE(monitor_notified);
  w2->SetBounds(gfx::Rect(21, 10, 20, 20));
  EXPECT_FALSE(monitor_notified);

  // Adding to the root should immediately notify.
  root_window()->AddChild(w2.get());
  EXPECT_TRUE(monitor_notified);
  monitor_notified = false;

  // Changing |w2|'s bounds show notify as |w2| is the parent and |w1| is in a
  // root.
  w2->SetBounds(gfx::Rect(22, 10, 20, 20));
  EXPECT_TRUE(monitor_notified);
  monitor_notified = false;

  // Removing an ancestor, and changing the ancestors bounds should not notify.
  root_window()->RemoveChild(w2.get());
  EXPECT_FALSE(monitor_notified);
  w2->SetBounds(gfx::Rect(21, 22, 23, 24));
  EXPECT_FALSE(monitor_notified);

  // Add |w1| directly to the root, should immediately notify.
  root_window()->AddChild(w1.get());
  EXPECT_TRUE(monitor_notified);
  monitor_notified = false;

  // Changing |w1|s bounds should notify as in a root.
  w1->SetBounds(gfx::Rect(101, 102, 12, 13));
  EXPECT_TRUE(monitor_notified);
  monitor_notified = false;

  // Changing the size should not notify.
  w1->SetBounds(gfx::Rect(101, 102, 121, 13));
  EXPECT_FALSE(monitor_notified);
}

}  // namespace aura_extra