OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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 <Cocoa/Cocoa.h> | |
6 #include <vector> | |
7 | |
8 #include "base/mac_util.h" | |
9 | |
10 #include "base/file_path.h" | |
11 #include "base/file_util.h" | |
12 #include "base/mac/scoped_cftyperef.h" | |
13 #include "base/test/mock_chrome_application_mac.h" | |
14 #include "base/scoped_nsobject.h" | |
15 #include "base/scoped_ptr.h" | |
16 #include "testing/gtest/include/gtest/gtest.h" | |
17 #include "testing/platform_test.h" | |
18 | |
19 namespace mac_util { | |
20 | |
21 namespace { | |
22 | |
23 typedef PlatformTest MacUtilTest; | |
24 | |
25 TEST_F(MacUtilTest, TestFSRef) { | |
26 FSRef ref; | |
27 std::string path("/System/Library"); | |
28 | |
29 ASSERT_TRUE(FSRefFromPath(path, &ref)); | |
30 EXPECT_EQ(path, PathFromFSRef(ref)); | |
31 } | |
32 | |
33 TEST_F(MacUtilTest, GetUserDirectoryTest) { | |
34 // Try a few keys, make sure they come back with non-empty paths. | |
35 FilePath caches_dir; | |
36 EXPECT_TRUE(GetUserDirectory(NSCachesDirectory, &caches_dir)); | |
37 EXPECT_FALSE(caches_dir.empty()); | |
38 | |
39 FilePath application_support_dir; | |
40 EXPECT_TRUE(GetUserDirectory(NSApplicationSupportDirectory, | |
41 &application_support_dir)); | |
42 EXPECT_FALSE(application_support_dir.empty()); | |
43 | |
44 FilePath library_dir; | |
45 EXPECT_TRUE(GetUserDirectory(NSLibraryDirectory, &library_dir)); | |
46 EXPECT_FALSE(library_dir.empty()); | |
47 } | |
48 | |
49 TEST_F(MacUtilTest, TestLibraryPath) { | |
50 FilePath library_dir = GetUserLibraryPath(); | |
51 // Make sure the string isn't empty. | |
52 EXPECT_FALSE(library_dir.value().empty()); | |
53 } | |
54 | |
55 TEST_F(MacUtilTest, TestGrabWindowSnapshot) { | |
56 // Launch a test window so we can take a snapshot. | |
57 [MockCrApp sharedApplication]; | |
58 NSRect frame = NSMakeRect(0, 0, 400, 400); | |
59 scoped_nsobject<NSWindow> window( | |
60 [[NSWindow alloc] initWithContentRect:frame | |
61 styleMask:NSBorderlessWindowMask | |
62 backing:NSBackingStoreBuffered | |
63 defer:NO]); | |
64 [window setBackgroundColor:[NSColor whiteColor]]; | |
65 [window makeKeyAndOrderFront:NSApp]; | |
66 | |
67 scoped_ptr<std::vector<unsigned char> > png_representation( | |
68 new std::vector<unsigned char>); | |
69 int width, height; | |
70 GrabWindowSnapshot(window, png_representation.get(), | |
71 &width, &height); | |
72 | |
73 // Copy png back into NSData object so we can make sure we grabbed a png. | |
74 scoped_nsobject<NSData> image_data( | |
75 [[NSData alloc] initWithBytes:&(*png_representation)[0] | |
76 length:png_representation->size()]); | |
77 NSBitmapImageRep* rep = [NSBitmapImageRep imageRepWithData:image_data.get()]; | |
78 EXPECT_TRUE([rep isKindOfClass:[NSBitmapImageRep class]]); | |
79 EXPECT_TRUE(CGImageGetWidth([rep CGImage]) == 400); | |
80 NSColor* color = [rep colorAtX:200 y:200]; | |
81 CGFloat red = 0, green = 0, blue = 0, alpha = 0; | |
82 [color getRed:&red green:&green blue:&blue alpha:&alpha]; | |
83 EXPECT_GE(red + green + blue, 3.0); | |
84 } | |
85 | |
86 TEST_F(MacUtilTest, TestGetAppBundlePath) { | |
87 FilePath out; | |
88 | |
89 // Make sure it doesn't crash. | |
90 out = GetAppBundlePath(FilePath()); | |
91 EXPECT_TRUE(out.empty()); | |
92 | |
93 // Some more invalid inputs. | |
94 const char* invalid_inputs[] = { | |
95 "/", "/foo", "foo", "/foo/bar.", "foo/bar.", "/foo/bar./bazquux", | |
96 "foo/bar./bazquux", "foo/.app", "//foo", | |
97 }; | |
98 for (size_t i = 0; i < arraysize(invalid_inputs); i++) { | |
99 out = GetAppBundlePath(FilePath(invalid_inputs[i])); | |
100 EXPECT_TRUE(out.empty()) << "loop: " << i; | |
101 } | |
102 | |
103 // Some valid inputs; this and |expected_outputs| should be in sync. | |
104 struct { | |
105 const char *in; | |
106 const char *expected_out; | |
107 } valid_inputs[] = { | |
108 { "FooBar.app/", "FooBar.app" }, | |
109 { "/FooBar.app", "/FooBar.app" }, | |
110 { "/FooBar.app/", "/FooBar.app" }, | |
111 { "//FooBar.app", "//FooBar.app" }, | |
112 { "/Foo/Bar.app", "/Foo/Bar.app" }, | |
113 { "/Foo/Bar.app/", "/Foo/Bar.app" }, | |
114 { "/F/B.app", "/F/B.app" }, | |
115 { "/F/B.app/", "/F/B.app" }, | |
116 { "/Foo/Bar.app/baz", "/Foo/Bar.app" }, | |
117 { "/Foo/Bar.app/baz/", "/Foo/Bar.app" }, | |
118 { "/Foo/Bar.app/baz/quux.app/quuux", "/Foo/Bar.app" }, | |
119 { "/Applications/Google Foo.app/bar/Foo Helper.app/quux/Foo Helper", | |
120 "/Applications/Google Foo.app" }, | |
121 }; | |
122 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(valid_inputs); i++) { | |
123 out = GetAppBundlePath(FilePath(valid_inputs[i].in)); | |
124 EXPECT_FALSE(out.empty()) << "loop: " << i; | |
125 EXPECT_STREQ(valid_inputs[i].expected_out, | |
126 out.value().c_str()) << "loop: " << i; | |
127 } | |
128 } | |
129 | |
130 TEST_F(MacUtilTest, TestExcludeFileFromBackups) { | |
131 NSString* homeDirectory = NSHomeDirectory(); | |
132 NSString* dummyFilePath = | |
133 [homeDirectory stringByAppendingPathComponent:@"DummyFile"]; | |
134 const char* dummy_file_path = [dummyFilePath fileSystemRepresentation]; | |
135 ASSERT_TRUE(dummy_file_path); | |
136 FilePath file_path(dummy_file_path); | |
137 // It is not actually necessary to have a physical file in order to | |
138 // set its exclusion property. | |
139 NSURL* fileURL = [NSURL URLWithString:dummyFilePath]; | |
140 // Reset the exclusion in case it was set previously. | |
141 SetFileBackupExclusion(file_path, false); | |
142 Boolean excludeByPath; | |
143 // Initial state should be non-excluded. | |
144 EXPECT_FALSE(CSBackupIsItemExcluded((CFURLRef)fileURL, &excludeByPath)); | |
145 // Exclude the file. | |
146 EXPECT_TRUE(SetFileBackupExclusion(file_path, true)); | |
147 EXPECT_TRUE(CSBackupIsItemExcluded((CFURLRef)fileURL, &excludeByPath)); | |
148 // Un-exclude the file. | |
149 EXPECT_TRUE(SetFileBackupExclusion(file_path, false)); | |
150 EXPECT_FALSE(CSBackupIsItemExcluded((CFURLRef)fileURL, &excludeByPath)); | |
151 } | |
152 | |
153 TEST_F(MacUtilTest, TestGetValueFromDictionary) { | |
154 base::mac::ScopedCFTypeRef<CFMutableDictionaryRef> dict( | |
155 CFDictionaryCreateMutable(0, 0, | |
156 &kCFTypeDictionaryKeyCallBacks, | |
157 &kCFTypeDictionaryValueCallBacks)); | |
158 CFDictionarySetValue(dict.get(), CFSTR("key"), CFSTR("value")); | |
159 | |
160 EXPECT_TRUE(CFEqual(CFSTR("value"), | |
161 GetValueFromDictionary( | |
162 dict, CFSTR("key"), CFStringGetTypeID()))); | |
163 EXPECT_FALSE(GetValueFromDictionary(dict, CFSTR("key"), CFNumberGetTypeID())); | |
164 EXPECT_FALSE(GetValueFromDictionary( | |
165 dict, CFSTR("no-exist"), CFStringGetTypeID())); | |
166 } | |
167 | |
168 TEST_F(MacUtilTest, CopyNSImageToCGImage) { | |
169 scoped_nsobject<NSImage> nsImage( | |
170 [[NSImage alloc] initWithSize:NSMakeSize(20, 20)]); | |
171 [nsImage lockFocus]; | |
172 [[NSColor redColor] set]; | |
173 NSRect rect = NSZeroRect; | |
174 rect.size = [nsImage size]; | |
175 NSRectFill(rect); | |
176 [nsImage unlockFocus]; | |
177 | |
178 base::mac::ScopedCFTypeRef<CGImageRef> cgImage( | |
179 mac_util::CopyNSImageToCGImage(nsImage.get())); | |
180 EXPECT_TRUE(cgImage.get()); | |
181 } | |
182 | |
183 TEST_F(MacUtilTest, NSObjectRetainRelease) { | |
184 scoped_nsobject<NSArray> array([[NSArray alloc] initWithObjects:@"foo", nil]); | |
185 EXPECT_EQ(1U, [array retainCount]); | |
186 | |
187 mac_util::NSObjectRetain(array); | |
188 EXPECT_EQ(2U, [array retainCount]); | |
189 | |
190 mac_util::NSObjectRelease(array); | |
191 EXPECT_EQ(1U, [array retainCount]); | |
192 } | |
193 | |
194 } // namespace | |
195 | |
196 } // namespace mac_util | |
OLD | NEW |