Index: content/browser/media/capture/capture_resolution_evaluator_unittest.cc |
diff --git a/content/browser/media/capture/capture_resolution_evaluator_unittest.cc b/content/browser/media/capture/capture_resolution_evaluator_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e7f0beeb7018cb5a039c4abca642b8216f0164dc |
--- /dev/null |
+++ b/content/browser/media/capture/capture_resolution_evaluator_unittest.cc |
@@ -0,0 +1,146 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/media/capture/capture_resolution_evaluator.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace content { |
+ |
+namespace { |
+ |
Wez
2015/05/13 19:05:09
nit: Don't think you need an empty namespace since
miu
2015/05/14 01:21:32
I don't want to export these symbols. I could rem
Wez
2015/05/15 00:55:42
My point is that you neither need the namespace no
miu
2015/05/15 21:14:00
They are static, but the symbol is public in the c
Wez
2015/05/15 23:31:31
Yes, I understand that - if they were _global_ con
|
+// 16:9 maximum and minimum frame sizes. |
+const int kMaxFrameWidth = 3840; |
+const int kMaxFrameHeight = 2160; |
+const int kMinFrameWidth = 320; |
+const int kMinFrameHeight = 180; |
+ |
+} // namespace |
+ |
+TEST(CaptureResolutionEvaluatorTest, |
+ FixedResolutionPolicy_CaptureSizeAlwaysFixed) { |
Wez
2015/05/13 19:05:09
nit: Suggest putting a blank line between each cal
miu
2015/05/14 01:21:32
Done.
|
+ const gfx::Size the_one_frame_size(kMaxFrameWidth, kMaxFrameHeight); |
+ CaptureResolutionEvaluator evaluator( |
+ the_one_frame_size, |
+ media::RESOLUTION_POLICY_FIXED_RESOLUTION); |
+ EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(the_one_frame_size); |
+ EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth + 424, |
+ kMaxFrameHeight - 101)); |
+ EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth - 202, |
+ kMaxFrameHeight + 56)); |
+ EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(kMinFrameWidth, kMinFrameHeight)); |
+ EXPECT_EQ(the_one_frame_size, evaluator.capture_size()); |
+} |
+ |
+TEST(CaptureResolutionEvaluatorTest, |
+ FixedAspectRatioPolicy_CaptureSizeHasSameAspectRatio) { |
+ CaptureResolutionEvaluator evaluator( |
+ gfx::Size(kMaxFrameWidth, kMaxFrameHeight), |
+ media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO); |
+ |
+#define EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO() \ |
Wez
2015/05/13 19:05:09
Might be cleaner to take the hit of parameterizing
miu
2015/05/14 01:21:32
Done.
|
+ ASSERT_LE(kMinFrameWidth, evaluator.capture_size().width()); \ |
+ ASSERT_LE(kMinFrameHeight, evaluator.capture_size().height()); \ |
+ EXPECT_GE(kMaxFrameWidth, evaluator.capture_size().width()); \ |
+ EXPECT_GE(kMaxFrameHeight, evaluator.capture_size().height()); \ |
+ EXPECT_NEAR(static_cast<double>(kMaxFrameWidth) / kMaxFrameHeight, \ |
+ static_cast<double>(evaluator.capture_size().width()) / \ |
+ evaluator.capture_size().height(), \ |
+ 0.01) |
+ |
+ // Starting condition. |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ |
+ // Max size in --> max size out. |
+ evaluator.UpdateForNewSourceSize(gfx::Size(kMaxFrameWidth, kMaxFrameHeight)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ |
+ // Various source sizes within bounds. |
+ evaluator.UpdateForNewSourceSize(gfx::Size(640, 480)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(480, 640)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(640, 640)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ const gfx::Size unchanged_size = evaluator.capture_size(); |
Wez
2015/05/13 19:05:09
Looks like this belongs in the next block?
miu
2015/05/14 01:21:33
Done.
|
+ |
+ // Bad source size results in no update. |
+ evaluator.UpdateForNewSourceSize(gfx::Size(0, 0)); |
+ EXPECT_EQ(unchanged_size, evaluator.capture_size()); |
+ |
+ // Downscaling size (preserving aspect ratio) when source size exceeds the |
+ // upper bounds. |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight * 2)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth, kMaxFrameHeight * 2)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ |
+ // Upscaling size (preserving aspect ratio) when source size is under the |
+ // lower bounds. |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMinFrameWidth / 2, kMinFrameHeight / 2)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMinFrameWidth / 2, kMaxFrameHeight)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMinFrameWidth, kMinFrameHeight / 2)); |
+ EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO(); |
+ |
+#undef EXPECT_IS_WITHIN_BOUNDS_AND_SAME_ASPECT_RATIO |
+} |
+ |
+TEST(CaptureResolutionEvaluatorTest, |
+ AnyWithinLimitPolicy_CaptureSizeIsAnythingWithinLimits) { |
+ const gfx::Size max_size(kMaxFrameWidth, kMaxFrameHeight); |
+ CaptureResolutionEvaluator evaluator( |
+ max_size, media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT); |
+ |
+ // Starting condition. |
+ EXPECT_EQ(max_size, evaluator.capture_size()); |
+ |
+ // Max size in --> max size out. |
+ evaluator.UpdateForNewSourceSize(max_size); |
+ EXPECT_EQ(max_size, evaluator.capture_size()); |
+ |
+ // Various source sizes within bounds. |
+ evaluator.UpdateForNewSourceSize(gfx::Size(640, 480)); |
+ EXPECT_EQ(gfx::Size(640, 480), evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(480, 640)); |
+ EXPECT_EQ(gfx::Size(480, 640), evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(640, 640)); |
+ EXPECT_EQ(gfx::Size(640, 640), evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize(gfx::Size(2, 2)); |
+ EXPECT_EQ(gfx::Size(2, 2), evaluator.capture_size()); |
+ const gfx::Size unchanged_size = evaluator.capture_size(); |
Wez
2015/05/13 19:05:09
As above
miu
2015/05/14 01:21:33
Done.
|
+ |
+ // Bad source size results in no update. |
+ evaluator.UpdateForNewSourceSize(gfx::Size(0, 0)); |
+ EXPECT_EQ(unchanged_size, evaluator.capture_size()); |
+ |
+ // Downscaling size (preserving aspect ratio) when source size exceeds the |
+ // upper bounds. |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight * 2)); |
+ EXPECT_EQ(max_size, evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth * 2, kMaxFrameHeight)); |
+ EXPECT_EQ(gfx::Size(kMaxFrameWidth, kMaxFrameHeight / 2), |
+ evaluator.capture_size()); |
+ evaluator.UpdateForNewSourceSize( |
+ gfx::Size(kMaxFrameWidth, kMaxFrameHeight * 2)); |
+ EXPECT_EQ(gfx::Size(kMaxFrameWidth / 2, kMaxFrameHeight), |
+ evaluator.capture_size()); |
+} |
+ |
+} // namespace content |