Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #import "chrome/browser/ui/cocoa/applescript/apple_event_util.h" | |
| 6 | |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/json/json_reader.h" | |
| 9 #include "base/stringprintf.h" | |
| 10 #include "base/values.h" | |
| 11 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
| 12 #include "testing/gtest_mac.h" | |
| 13 | |
| 14 namespace { | |
| 15 | |
| 16 class AppleEventUtilTest : public CocoaTest { }; | |
| 17 | |
| 18 struct TestCase { | |
| 19 const char* json_input; | |
| 20 const char* expected_aedesc_dump; | |
| 21 DescType expected_aedesc_type; | |
| 22 }; | |
| 23 | |
| 24 TEST_F(AppleEventUtilTest, ValueToAppleEventDescriptor) { | |
| 25 const struct TestCase cases[] = { | |
| 26 { "null", "'msng'", typeType }, | |
| 27 { "-1000", "-1000", typeSInt32 }, | |
| 28 { "0", "0", typeSInt32 }, | |
| 29 { "1000", "1000", typeSInt32 }, | |
| 30 { "-1e100", "-1e+100", typeIEEE64BitFloatingPoint }, | |
| 31 { "0.0", "0", typeIEEE64BitFloatingPoint }, | |
| 32 { "1e100", "1e+100", typeIEEE64BitFloatingPoint }, | |
| 33 { "\"\"", "'utxt'(\"\")", typeUnicodeText }, | |
| 34 { "\"string\"", "'utxt'(\"string\")", typeUnicodeText }, | |
| 35 { "{}", "{ 'usrf':[ ] }", typeAERecord }, | |
| 36 { "[]", "[ ]", typeAEList }, | |
| 37 { "{\"Image\": {" | |
| 38 "\"Width\": 800," | |
| 39 "\"Height\": 600," | |
| 40 "\"Title\": \"View from 15th Floor\"," | |
| 41 "\"Thumbnail\": {" | |
| 42 "\"Url\": \"http://www.example.com/image/481989943\"," | |
| 43 "\"Height\": 125," | |
| 44 "\"Width\": \"100\"" | |
| 45 "}," | |
| 46 "\"IDs\": [116, 943, 234, 38793]" | |
| 47 "}" | |
| 48 "}", | |
| 49 "{ 'usrf':[ 'utxt'(\"Image\"), { 'usrf':[ 'utxt'(\"Height\"), 600, " | |
| 50 "'utxt'(\"IDs\"), [ 116, 943, 234, 38793 ], 'utxt'(\"Thumbnail\"), " | |
| 51 "{ 'usrf':[ 'utxt'(\"Height\"), 125, 'utxt'(\"Url\"), " | |
| 52 "'utxt'(\"http://www.example.com/image/481989943\"), 'utxt'(\"Width\"), " | |
| 53 "'utxt'(\"100\") ] }, 'utxt'(\"Title\"), " | |
| 54 "'utxt'(\"View from 15th Floor\"), 'utxt'(\"Width\"), 800 ] } ] }", | |
| 55 typeAERecord }, | |
| 56 { "[" | |
| 57 "{" | |
| 58 "\"precision\": \"zip\"," | |
| 59 "\"Latitude\": 37.7668," | |
| 60 "\"Longitude\": -122.3959," | |
| 61 "\"Address\": \"\"," | |
| 62 "\"City\": \"SAN FRANCISCO\"," | |
| 63 "\"State\": \"CA\"," | |
| 64 "\"Zip\": \"94107\"," | |
| 65 "\"Country\": \"US\"" | |
| 66 "}," | |
| 67 "{" | |
| 68 "\"precision\": \"zip\"," | |
| 69 "\"Latitude\": 37.371991," | |
| 70 "\"Longitude\": -122.026020," | |
| 71 "\"Address\": \"\"," | |
| 72 "\"City\": \"SUNNYVALE\"," | |
| 73 "\"State\": \"CA\"," | |
| 74 "\"Zip\": \"94085\"," | |
| 75 "\"Country\": \"US\"" | |
| 76 "}" | |
| 77 "]", | |
| 78 "[ { 'usrf':[ 'utxt'(\"Address\"), 'utxt'(\"\"), 'utxt'(\"City\"), " | |
| 79 "'utxt'(\"SAN FRANCISCO\"), 'utxt'(\"Country\"), 'utxt'(\"US\"), " | |
| 80 "'utxt'(\"Latitude\"), 37.7668, 'utxt'(\"Longitude\"), -122.396, " | |
| 81 "'utxt'(\"State\"), 'utxt'(\"CA\"), 'utxt'(\"Zip\"), 'utxt'(\"94107\"), " | |
| 82 "'utxt'(\"precision\"), 'utxt'(\"zip\") ] }, { 'usrf':[ " | |
| 83 "'utxt'(\"Address\"), 'utxt'(\"\"), 'utxt'(\"City\"), " | |
| 84 "'utxt'(\"SUNNYVALE\"), 'utxt'(\"Country\"), 'utxt'(\"US\"), " | |
| 85 "'utxt'(\"Latitude\"), 37.372, 'utxt'(\"Longitude\"), -122.026, " | |
| 86 "'utxt'(\"State\"), 'utxt'(\"CA\"), 'utxt'(\"Zip\"), 'utxt'(\"94085\"), " | |
| 87 "'utxt'(\"precision\"), 'utxt'(\"zip\") ] } ]", | |
| 88 typeAEList }, | |
| 89 }; | |
| 90 | |
| 91 for (size_t i = 0; i < arraysize(cases); ++i) { | |
| 92 scoped_ptr<base::Value> value(base::JSONReader::Read(cases[i].json_input)); | |
| 93 NSAppleEventDescriptor* descriptor = | |
| 94 chrome::mac::ValueToAppleEventDescriptor(value.get()); | |
| 95 NSString* descriptor_description = [descriptor description]; | |
| 96 | |
| 97 std::string expected_contents = | |
| 98 base::StringPrintf("<NSAppleEventDescriptor: %s>", | |
| 99 cases[i].expected_aedesc_dump); | |
| 100 EXPECT_STREQ(expected_contents.c_str(), | |
| 101 [descriptor_description UTF8String]) << "i: " << i; | |
| 102 EXPECT_EQ(cases[i].expected_aedesc_type, | |
| 103 [descriptor descriptorType]) << "i: " << i; | |
| 104 } | |
| 105 | |
| 106 // Test boolean values separately because boolean NSAppleEventDescriptors | |
| 107 // return different values across different system versions when their | |
| 108 // -description method is called. | |
| 109 | |
| 110 const bool all_bools[] = { true, false }; | |
| 111 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
| |
| 112 base::FundamentalValue value(b); | |
| 113 NSAppleEventDescriptor* descriptor = | |
| 114 chrome::mac::ValueToAppleEventDescriptor(&value); | |
| 115 | |
| 116 EXPECT_EQ(typeBoolean, [descriptor descriptorType]); | |
| 117 EXPECT_EQ(b, [descriptor booleanValue]); | |
| 118 } | |
| 119 } | |
| 120 | |
| 121 } // namespace | |
| OLD | NEW |