Index: chrome/browser/ui/cocoa/applescript/apple_event_util_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/applescript/apple_event_util_unittest.mm b/chrome/browser/ui/cocoa/applescript/apple_event_util_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6b25cde97aa08c869eb35e0fee78bbf9dc7005f8 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/applescript/apple_event_util_unittest.mm |
@@ -0,0 +1,121 @@ |
+// Copyright (c) 2013 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. |
+ |
+#import "chrome/browser/ui/cocoa/applescript/apple_event_util.h" |
+ |
+#include "base/basictypes.h" |
+#include "base/json/json_reader.h" |
+#include "base/stringprintf.h" |
+#include "base/values.h" |
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
+#include "testing/gtest_mac.h" |
+ |
+namespace { |
+ |
+class AppleEventUtilTest : public CocoaTest { }; |
+ |
+struct TestCase { |
+ const char* json_input; |
+ const char* expected_aedesc_dump; |
+ DescType expected_aedesc_type; |
+}; |
+ |
+TEST_F(AppleEventUtilTest, ValueToAppleEventDescriptor) { |
+ const struct TestCase cases[] = { |
+ { "null", "'msng'", typeType }, |
+ { "-1000", "-1000", typeSInt32 }, |
+ { "0", "0", typeSInt32 }, |
+ { "1000", "1000", typeSInt32 }, |
+ { "-1e100", "-1e+100", typeIEEE64BitFloatingPoint }, |
+ { "0.0", "0", typeIEEE64BitFloatingPoint }, |
+ { "1e100", "1e+100", typeIEEE64BitFloatingPoint }, |
+ { "\"\"", "'utxt'(\"\")", typeUnicodeText }, |
+ { "\"string\"", "'utxt'(\"string\")", typeUnicodeText }, |
+ { "{}", "{ 'usrf':[ ] }", typeAERecord }, |
+ { "[]", "[ ]", typeAEList }, |
+ { "{\"Image\": {" |
+ "\"Width\": 800," |
+ "\"Height\": 600," |
+ "\"Title\": \"View from 15th Floor\"," |
+ "\"Thumbnail\": {" |
+ "\"Url\": \"http://www.example.com/image/481989943\"," |
+ "\"Height\": 125," |
+ "\"Width\": \"100\"" |
+ "}," |
+ "\"IDs\": [116, 943, 234, 38793]" |
+ "}" |
+ "}", |
+ "{ 'usrf':[ 'utxt'(\"Image\"), { 'usrf':[ 'utxt'(\"Height\"), 600, " |
+ "'utxt'(\"IDs\"), [ 116, 943, 234, 38793 ], 'utxt'(\"Thumbnail\"), " |
+ "{ 'usrf':[ 'utxt'(\"Height\"), 125, 'utxt'(\"Url\"), " |
+ "'utxt'(\"http://www.example.com/image/481989943\"), 'utxt'(\"Width\"), " |
+ "'utxt'(\"100\") ] }, 'utxt'(\"Title\"), " |
+ "'utxt'(\"View from 15th Floor\"), 'utxt'(\"Width\"), 800 ] } ] }", |
+ typeAERecord }, |
+ { "[" |
+ "{" |
+ "\"precision\": \"zip\"," |
+ "\"Latitude\": 37.7668," |
+ "\"Longitude\": -122.3959," |
+ "\"Address\": \"\"," |
+ "\"City\": \"SAN FRANCISCO\"," |
+ "\"State\": \"CA\"," |
+ "\"Zip\": \"94107\"," |
+ "\"Country\": \"US\"" |
+ "}," |
+ "{" |
+ "\"precision\": \"zip\"," |
+ "\"Latitude\": 37.371991," |
+ "\"Longitude\": -122.026020," |
+ "\"Address\": \"\"," |
+ "\"City\": \"SUNNYVALE\"," |
+ "\"State\": \"CA\"," |
+ "\"Zip\": \"94085\"," |
+ "\"Country\": \"US\"" |
+ "}" |
+ "]", |
+ "[ { 'usrf':[ 'utxt'(\"Address\"), 'utxt'(\"\"), 'utxt'(\"City\"), " |
+ "'utxt'(\"SAN FRANCISCO\"), 'utxt'(\"Country\"), 'utxt'(\"US\"), " |
+ "'utxt'(\"Latitude\"), 37.7668, 'utxt'(\"Longitude\"), -122.396, " |
+ "'utxt'(\"State\"), 'utxt'(\"CA\"), 'utxt'(\"Zip\"), 'utxt'(\"94107\"), " |
+ "'utxt'(\"precision\"), 'utxt'(\"zip\") ] }, { 'usrf':[ " |
+ "'utxt'(\"Address\"), 'utxt'(\"\"), 'utxt'(\"City\"), " |
+ "'utxt'(\"SUNNYVALE\"), 'utxt'(\"Country\"), 'utxt'(\"US\"), " |
+ "'utxt'(\"Latitude\"), 37.372, 'utxt'(\"Longitude\"), -122.026, " |
+ "'utxt'(\"State\"), 'utxt'(\"CA\"), 'utxt'(\"Zip\"), 'utxt'(\"94085\"), " |
+ "'utxt'(\"precision\"), 'utxt'(\"zip\") ] } ]", |
+ typeAEList }, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(cases); ++i) { |
+ scoped_ptr<base::Value> value(base::JSONReader::Read(cases[i].json_input)); |
+ NSAppleEventDescriptor* descriptor = |
+ chrome::mac::ValueToAppleEventDescriptor(value.get()); |
+ NSString* descriptor_description = [descriptor description]; |
+ |
+ std::string expected_contents = |
+ base::StringPrintf("<NSAppleEventDescriptor: %s>", |
+ cases[i].expected_aedesc_dump); |
+ EXPECT_STREQ(expected_contents.c_str(), |
+ [descriptor_description UTF8String]) << "i: " << i; |
+ EXPECT_EQ(cases[i].expected_aedesc_type, |
+ [descriptor descriptorType]) << "i: " << i; |
+ } |
+ |
+ // Test boolean values separately because boolean NSAppleEventDescriptors |
+ // return different values across different system versions when their |
+ // -description method is called. |
+ |
+ const bool all_bools[] = { true, false }; |
+ for (bool b : all_bools) { |
Robert Sesek
2013/01/04 19:26:42
Woaaaaah
Avi (use Gerrit)
2013/01/04 19:40:09
I was originally planning on
for (bool b : { true
|
+ base::FundamentalValue value(b); |
+ NSAppleEventDescriptor* descriptor = |
+ chrome::mac::ValueToAppleEventDescriptor(&value); |
+ |
+ EXPECT_EQ(typeBoolean, [descriptor descriptorType]); |
+ EXPECT_EQ(b, [descriptor booleanValue]); |
+ } |
+} |
+ |
+} // namespace |