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

Unified Diff: ui/aura/mus/property_converter_unittest.cc

Issue 2499933003: Expand aura::PropertyConverter support. (Closed)
Patch Set: Fix the other new unit test. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/aura/mus/property_converter.cc ('k') | ui/aura/mus/window_tree_client_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/mus/property_converter_unittest.cc
diff --git a/ui/aura/mus/property_converter_unittest.cc b/ui/aura/mus/property_converter_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d64a88b78c4647234e34d84aa1e25e29d990d62e
--- /dev/null
+++ b/ui/aura/mus/property_converter_unittest.cc
@@ -0,0 +1,197 @@
+// Copyright 2016 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 "ui/aura/mus/property_converter.h"
+
+#include <stdint.h>
+#include <string>
+
+#include "base/logging.h"
+#include "base/macros.h"
+#include "services/ui/public/cpp/property_type_converters.h"
+#include "ui/aura/test/aura_test_base.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_property.h"
+#include "ui/gfx/geometry/rect.h"
+
+// See aura_constants.cc for bool, int32_t, int64_t, std::string, and gfx::Rect.
+// That same file also declares the uint32_t type via SkColor.
+DECLARE_WINDOW_PROPERTY_TYPE(uint8_t)
+DECLARE_WINDOW_PROPERTY_TYPE(uint16_t)
+DECLARE_WINDOW_PROPERTY_TYPE(uint64_t)
+DECLARE_WINDOW_PROPERTY_TYPE(int8_t)
+DECLARE_WINDOW_PROPERTY_TYPE(int16_t)
+
+namespace aura {
+
+namespace {
+
+DEFINE_WINDOW_PROPERTY_KEY(bool, kTestPropertyKey0, false);
+DEFINE_WINDOW_PROPERTY_KEY(uint8_t, kTestPropertyKey1, 0);
+DEFINE_WINDOW_PROPERTY_KEY(uint16_t, kTestPropertyKey2, 0);
+DEFINE_WINDOW_PROPERTY_KEY(uint32_t, kTestPropertyKey3, 0);
+DEFINE_WINDOW_PROPERTY_KEY(uint64_t, kTestPropertyKey4, 0);
+DEFINE_WINDOW_PROPERTY_KEY(int8_t, kTestPropertyKey5, 0);
+DEFINE_WINDOW_PROPERTY_KEY(int16_t, kTestPropertyKey6, 0);
+DEFINE_WINDOW_PROPERTY_KEY(int32_t, kTestPropertyKey7, 0);
+DEFINE_WINDOW_PROPERTY_KEY(int64_t, kTestPropertyKey8, 0);
+
+DEFINE_WINDOW_PROPERTY_KEY(gfx::Rect*, kTestRectPropertyKey, nullptr);
+DEFINE_WINDOW_PROPERTY_KEY(std::string*, kTestStringPropertyKey, nullptr);
+
+const char kTestPropertyServerKey0[] = "test-property-server0";
+const char kTestPropertyServerKey1[] = "test-property-server1";
+const char kTestPropertyServerKey2[] = "test-property-server2";
+const char kTestPropertyServerKey3[] = "test-property-server3";
+const char kTestPropertyServerKey4[] = "test-property-server4";
+const char kTestPropertyServerKey5[] = "test-property-server5";
+const char kTestPropertyServerKey6[] = "test-property-server6";
+const char kTestPropertyServerKey7[] = "test-property-server7";
+const char kTestPropertyServerKey8[] = "test-property-server8";
+
+const char kTestRectPropertyServerKey[] = "test-rect-property-server";
+const char kTestStringPropertyServerKey[] = "test-string-property-server";
+
+// Test registration, naming and value conversion for primitive property types.
+template <typename T>
+void TestPrimitiveProperty(PropertyConverter* property_converter,
+ Window* window,
+ const WindowProperty<T>* key,
+ const char* transport_name,
+ T value_1,
+ T value_2) {
+ property_converter->RegisterProperty(key, transport_name);
+ EXPECT_EQ(transport_name,
+ property_converter->GetTransportNameForPropertyKey(key));
+
+ window->SetProperty(key, value_1);
+ EXPECT_EQ(value_1, window->GetProperty(key));
+
+ std::string transport_name_out;
+ std::unique_ptr<std::vector<uint8_t>> transport_value_out;
+ EXPECT_TRUE(property_converter->ConvertPropertyForTransport(
+ window, key, &transport_name_out, &transport_value_out));
+ EXPECT_EQ(transport_name, transport_name_out);
+ const int64_t storage_value_1 = static_cast<int64_t>(value_1);
+ std::vector<uint8_t> transport_value1 =
+ mojo::ConvertTo<std::vector<uint8_t>>(storage_value_1);
+ EXPECT_EQ(transport_value1, *transport_value_out.get());
+
+ const int64_t storage_value_2 = static_cast<int64_t>(value_2);
+ std::vector<uint8_t> transport_value2 =
+ mojo::ConvertTo<std::vector<uint8_t>>(storage_value_2);
+ property_converter->SetPropertyFromTransportValue(window, transport_name,
+ &transport_value2);
+ EXPECT_EQ(value_2, window->GetProperty(key));
+}
+
+} // namespace
+
+using PropertyConverterTest = test::AuraTestBase;
+
+// Verifies property setting behavior for a std::string* property.
+TEST_F(PropertyConverterTest, PrimitiveProperties) {
+ PropertyConverter property_converter;
+ std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), nullptr));
+
+ const bool value_0a = true, value_0b = false;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey0,
+ kTestPropertyServerKey0, value_0a, value_0b);
+
+ const uint8_t value_1a = UINT8_MAX / 2, value_1b = UINT8_MAX / 3;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey1,
+ kTestPropertyServerKey1, value_1a, value_1b);
+
+ const uint16_t value_2a = UINT16_MAX / 3, value_2b = UINT16_MAX / 4;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey2,
+ kTestPropertyServerKey2, value_2a, value_2b);
+
+ const uint32_t value_3a = UINT32_MAX / 4, value_3b = UINT32_MAX / 5;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey3,
+ kTestPropertyServerKey3, value_3a, value_3b);
+
+ const uint64_t value_4a = UINT64_MAX / 5, value_4b = UINT64_MAX / 6;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey4,
+ kTestPropertyServerKey4, value_4a, value_4b);
+
+ const int8_t value_5a = INT8_MIN / 2, value_5b = INT8_MIN / 3;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey5,
+ kTestPropertyServerKey5, value_5a, value_5b);
+
+ const int16_t value_6a = INT16_MIN / 3, value_6b = INT16_MIN / 4;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey6,
+ kTestPropertyServerKey6, value_6a, value_6b);
+
+ const int32_t value_7a = INT32_MIN / 4, value_7b = INT32_MIN / 5;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey7,
+ kTestPropertyServerKey7, value_7a, value_7b);
+
+ const int64_t value_8a = INT64_MIN / 5, value_8b = INT64_MIN / 6;
+ TestPrimitiveProperty(&property_converter, window.get(), kTestPropertyKey8,
+ kTestPropertyServerKey8, value_8a, value_8b);
+}
+
+// Verifies property setting behavior for a gfx::Rect* property.
+TEST_F(PropertyConverterTest, RectProperty) {
+ PropertyConverter property_converter;
+ property_converter.RegisterProperty(kTestRectPropertyKey,
+ kTestRectPropertyServerKey);
+ EXPECT_EQ(
+ kTestRectPropertyServerKey,
+ property_converter.GetTransportNameForPropertyKey(kTestRectPropertyKey));
+
+ gfx::Rect value_1(1, 2, 3, 4);
+ std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), nullptr));
+ window->SetProperty(kTestRectPropertyKey, new gfx::Rect(value_1));
+ EXPECT_EQ(value_1, *window->GetProperty(kTestRectPropertyKey));
+
+ std::string transport_name_out;
+ std::unique_ptr<std::vector<uint8_t>> transport_value_out;
+ EXPECT_TRUE(property_converter.ConvertPropertyForTransport(
+ window.get(), kTestRectPropertyKey, &transport_name_out,
+ &transport_value_out));
+ EXPECT_EQ(kTestRectPropertyServerKey, transport_name_out);
+ EXPECT_EQ(mojo::ConvertTo<std::vector<uint8_t>>(value_1),
+ *transport_value_out.get());
+
+ gfx::Rect value_2(1, 3, 5, 7);
+ std::vector<uint8_t> transport_value =
+ mojo::ConvertTo<std::vector<uint8_t>>(value_2);
+ property_converter.SetPropertyFromTransportValue(
+ window.get(), kTestRectPropertyServerKey, &transport_value);
+ EXPECT_EQ(value_2, *window->GetProperty(kTestRectPropertyKey));
+}
+
+// Verifies property setting behavior for a std::string* property.
+TEST_F(PropertyConverterTest, StringProperty) {
+ PropertyConverter property_converter;
+ property_converter.RegisterProperty(kTestStringPropertyKey,
+ kTestStringPropertyServerKey);
+ EXPECT_EQ(kTestStringPropertyServerKey,
+ property_converter.GetTransportNameForPropertyKey(
+ kTestStringPropertyKey));
+
+ std::string value_1 = "test value";
+ std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), nullptr));
+ window->SetProperty(kTestStringPropertyKey, new std::string(value_1));
+ EXPECT_EQ(value_1, *window->GetProperty(kTestStringPropertyKey));
+
+ std::string transport_name_out;
+ std::unique_ptr<std::vector<uint8_t>> transport_value_out;
+ EXPECT_TRUE(property_converter.ConvertPropertyForTransport(
+ window.get(), kTestStringPropertyKey, &transport_name_out,
+ &transport_value_out));
+ EXPECT_EQ(kTestStringPropertyServerKey, transport_name_out);
+ EXPECT_EQ(mojo::ConvertTo<std::vector<uint8_t>>(value_1),
+ *transport_value_out.get());
+
+ std::string value_2 = "another test value";
+ std::vector<uint8_t> transport_value =
+ mojo::ConvertTo<std::vector<uint8_t>>(value_2);
+ property_converter.SetPropertyFromTransportValue(
+ window.get(), kTestStringPropertyServerKey, &transport_value);
+ EXPECT_EQ(value_2, *window->GetProperty(kTestStringPropertyKey));
+}
+
+} // namespace aura
« no previous file with comments | « ui/aura/mus/property_converter.cc ('k') | ui/aura/mus/window_tree_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698