| // Copyright 2021 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/gfx/delegated_ink_metadata.h" | 
 | #include "ui/gfx/delegated_ink_point.h" | 
 |  | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace gfx { | 
 |  | 
 | // Test confirms that DelegatedInkPoint and DelegatedInkMetadata will both | 
 | // report that they match each other if the timestamp and point are the same, | 
 | // regardless of any other members. | 
 | TEST(DelegatedInkTest, PointAndMetadataMatch) { | 
 |   const gfx::PointF point(10, 40); | 
 |   const base::TimeTicks timestamp = base::TimeTicks::Now(); | 
 |  | 
 |   DelegatedInkPoint ink_point(point, timestamp, /*pointer_id=*/1); | 
 |   DelegatedInkMetadata metadata(point, /*diameter=*/10, SK_ColorBLACK, | 
 |                                 timestamp, gfx::RectF(10, 10, 100, 100), | 
 |                                 /*hovering=*/false); | 
 |  | 
 |   EXPECT_TRUE(ink_point.MatchesDelegatedInkMetadata(&metadata)); | 
 |  | 
 |   DelegatedInkPoint point_no_pointer_id(point, timestamp); | 
 |  | 
 |   EXPECT_TRUE(point_no_pointer_id.MatchesDelegatedInkMetadata(&metadata)); | 
 |  | 
 |   DelegatedInkMetadata metadata_with_frame_time( | 
 |       point, /*diameter=*/7.777f, SK_ColorCYAN, timestamp, | 
 |       gfx::RectF(6, 14, 240, 307), base::TimeTicks::Now(), /*hovering=*/true); | 
 |  | 
 |   EXPECT_TRUE(ink_point.MatchesDelegatedInkMetadata(&metadata_with_frame_time)); | 
 |   EXPECT_TRUE(point_no_pointer_id.MatchesDelegatedInkMetadata( | 
 |       &metadata_with_frame_time)); | 
 | } | 
 |  | 
 | // Confirms that if the timestamps are the same and point locations are within | 
 | // |kEpsilon|, then they will be considered matching. | 
 | TEST(DelegatedInkTest, PointAndMetadataAreClose) { | 
 |   const base::TimeTicks timestamp = base::TimeTicks::Now(); | 
 |   const gfx::PointF point_location(34, 95.002f); | 
 |   const gfx::PointF metadata_location(33.994f, 94.9524f); | 
 |  | 
 |   DelegatedInkPoint ink_point(point_location, timestamp); | 
 |   DelegatedInkMetadata metadata( | 
 |       metadata_location, /*diameter=*/3.5f, SK_ColorRED, timestamp, | 
 |       gfx::RectF(0, 3, 14.6f, 78.2f), /*hovering=*/false); | 
 |  | 
 |   EXPECT_TRUE(ink_point.MatchesDelegatedInkMetadata(&metadata)); | 
 | } | 
 |  | 
 | // Confirms that if timestamps or points are different (or the metadata is null) | 
 | // the DelegatedInkPoint and DelegatedInkMetadata are not considered matching. | 
 | TEST(DelegatedInkTest, PointAndMetadataDoNotMatch) { | 
 |   const base::TimeTicks timestamp = base::TimeTicks::Now(); | 
 |   const gfx::PointF point_location(34, 95.002f); | 
 |   const gfx::PointF metadata_location_close(33.994f, 94.9523f); | 
 |  | 
 |   DelegatedInkPoint ink_point(point_location, timestamp); | 
 |   EXPECT_FALSE(ink_point.MatchesDelegatedInkMetadata(nullptr)); | 
 |  | 
 |   DelegatedInkMetadata close_metadata( | 
 |       metadata_location_close, /*diameter=*/5, SK_ColorWHITE, timestamp, | 
 |       gfx::RectF(40, 30.6f, 43, 7.2f), /*hovering=*/true); | 
 |   EXPECT_FALSE(ink_point.MatchesDelegatedInkMetadata(&close_metadata)); | 
 |  | 
 |   const gfx::PointF metadata_location_far(23.789f, 20); | 
 |   DelegatedInkMetadata far_metadata( | 
 |       metadata_location_far, /*diameter=*/1, SK_ColorYELLOW, timestamp, | 
 |       gfx::RectF(12.44f, 3, 1000, 1000.1f), /*hovering=*/false); | 
 |   EXPECT_FALSE(ink_point.MatchesDelegatedInkMetadata(&far_metadata)); | 
 |  | 
 |   DelegatedInkMetadata metadata_different_timestamp( | 
 |       point_location, /*diameter=*/10, SK_ColorGREEN, | 
 |       timestamp + base::Milliseconds(10), gfx::RectF(0, 0, 0, 0), | 
 |       /*hovering*/ true); | 
 |   EXPECT_FALSE( | 
 |       ink_point.MatchesDelegatedInkMetadata(&metadata_different_timestamp)); | 
 | } | 
 |  | 
 | }  // namespace gfx |