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

Unified Diff: chrome/browser/cocoa/window_size_autosaver_unittest.mm

Issue 536086: Mac: Save/restore task manager window pos and size. (Closed)
Patch Set: comments Created 10 years, 11 months 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
Index: chrome/browser/cocoa/window_size_autosaver_unittest.mm
diff --git a/chrome/browser/cocoa/window_size_autosaver_unittest.mm b/chrome/browser/cocoa/window_size_autosaver_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..e5460d44e94d50d2c006d180ab97fee162e55720
--- /dev/null
+++ b/chrome/browser/cocoa/window_size_autosaver_unittest.mm
@@ -0,0 +1,157 @@
+// Copyright (c) 2009 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 <Cocoa/Cocoa.h>
+
+#import "chrome/browser/cocoa/window_size_autosaver.h"
+
+#include "base/scoped_nsobject.h"
+#include "chrome/browser/cocoa/browser_test_helper.h"
+#import "chrome/browser/cocoa/cocoa_test_helper.h"
+#include "chrome/common/pref_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+class WindowSizeAutosaverTest : public CocoaTest {
+ virtual void SetUp() {
+ CocoaTest::SetUp();
+ path_ = L"WindowSizeAutosaverTest";
+ window_ =
+ [[NSWindow alloc] initWithContentRect:NSMakeRect(100, 101, 150, 151)
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ browser_helper_.profile()->GetPrefs()->RegisterDictionaryPref(path_);
+ }
+
+ virtual void TearDown() {
+ [window_ close];
+ CocoaTest::TearDown();
+ }
+
+ public:
+ BrowserTestHelper browser_helper_;
+ NSWindow* window_;
+ const wchar_t* path_;
+};
+
+TEST_F(WindowSizeAutosaverTest, RestoresAndSavesPos) {
+ PrefService* pref = browser_helper_.profile()->GetPrefs();
+ ASSERT_TRUE(pref != NULL);
+
+ // Check to make sure there is no existing pref for window placement.
+ ASSERT_TRUE(pref->GetDictionary(path_) == NULL);
+
+ // Ask the window to save its position, then check that a preference
+ // exists. We're technically passing in a pointer to the user prefs
+ // and not the local state prefs, but a PrefService* is a
+ // PrefService*, and this is a unittest.
+
+ {
+ NSRect frame = [window_ frame];
+ // Empty state, shouldn't restore:
+ scoped_nsobject<WindowSizeAutosaver> sizeSaver([[WindowSizeAutosaver alloc]
+ initWithWindow:window_
+ prefService:pref
+ path:path_
+ state:kSaveWindowPos]);
+ EXPECT_EQ(NSMinX(frame), NSMinX([window_ frame]));
+ EXPECT_EQ(NSMinY(frame), NSMinY([window_ frame]));
+ EXPECT_EQ(NSWidth(frame), NSWidth([window_ frame]));
+ EXPECT_EQ(NSHeight(frame), NSHeight([window_ frame]));
+
+ // Move and resize window, should store position but not size.
+ [window_ setFrame:NSMakeRect(300, 310, 50, 52) display:NO];
+ }
+
+ // Another window movement -- shouldn't be recorded.
+ [window_ setFrame:NSMakeRect(400, 420, 160, 162) display:NO];
+
+ {
+ // Should restore last stored position, but not size.
+ scoped_nsobject<WindowSizeAutosaver> sizeSaver([[WindowSizeAutosaver alloc]
+ initWithWindow:window_
+ prefService:pref
+ path:path_
+ state:kSaveWindowPos]);
+ EXPECT_EQ(300, NSMinX([window_ frame]));
+ EXPECT_EQ(310, NSMinY([window_ frame]));
+ EXPECT_EQ(160, NSWidth([window_ frame]));
+ EXPECT_EQ(162, NSHeight([window_ frame]));
+ }
+
+ // ...and it should be in the profile, too.
+ EXPECT_TRUE(pref->GetDictionary(path_) != NULL);
+ int x, y;
+ DictionaryValue* windowPref = pref->GetMutableDictionary(path_);
+ EXPECT_FALSE(windowPref->GetInteger(L"left", &x));
+ EXPECT_FALSE(windowPref->GetInteger(L"right", &x));
+ EXPECT_FALSE(windowPref->GetInteger(L"top", &x));
+ EXPECT_FALSE(windowPref->GetInteger(L"bottom", &x));
+ ASSERT_TRUE(windowPref->GetInteger(L"x", &x));
+ ASSERT_TRUE(windowPref->GetInteger(L"y", &y));
+ EXPECT_EQ(300, x);
+ EXPECT_EQ(310, y);
+}
+
+TEST_F(WindowSizeAutosaverTest, RestoresAndSavesRect) {
+ PrefService* pref = browser_helper_.profile()->GetPrefs();
+ ASSERT_TRUE(pref != NULL);
+
+ // Check to make sure there is no existing pref for window placement.
+ ASSERT_TRUE(pref->GetDictionary(path_) == NULL);
+
+ // Ask the window to save its position, then check that a preference
+ // exists. We're technically passing in a pointer to the user prefs
+ // and not the local state prefs, but a PrefService* is a
+ // PrefService*, and this is a unittest.
+
+ {
+ NSRect frame = [window_ frame];
+ // Empty state, shouldn't restore:
+ scoped_nsobject<WindowSizeAutosaver> sizeSaver([[WindowSizeAutosaver alloc]
+ initWithWindow:window_
+ prefService:pref
+ path:path_
+ state:kSaveWindowRect]);
+ EXPECT_EQ(NSMinX(frame), NSMinX([window_ frame]));
+ EXPECT_EQ(NSMinY(frame), NSMinY([window_ frame]));
+ EXPECT_EQ(NSWidth(frame), NSWidth([window_ frame]));
+ EXPECT_EQ(NSHeight(frame), NSHeight([window_ frame]));
+
+ // Move and resize window, should store
+ [window_ setFrame:NSMakeRect(300, 310, 50, 52) display:NO];
+ }
+
+ // Another window movement -- shouldn't be recorded.
+ [window_ setFrame:NSMakeRect(400, 420, 160, 162) display:NO];
+
+ {
+ // Should restore last stored size
+ scoped_nsobject<WindowSizeAutosaver> sizeSaver([[WindowSizeAutosaver alloc]
+ initWithWindow:window_
+ prefService:pref
+ path:path_
+ state:kSaveWindowRect]);
+ EXPECT_EQ(300, NSMinX([window_ frame]));
+ EXPECT_EQ(310, NSMinY([window_ frame]));
+ EXPECT_EQ(50, NSWidth([window_ frame]));
+ EXPECT_EQ(52, NSHeight([window_ frame]));
+ }
+
+ // ...and it should be in the profile, too.
+ EXPECT_TRUE(pref->GetDictionary(path_) != NULL);
+ int x1, y1, x2, y2;
+ DictionaryValue* windowPref = pref->GetMutableDictionary(path_);
+ EXPECT_FALSE(windowPref->GetInteger(L"x", &x1));
+ EXPECT_FALSE(windowPref->GetInteger(L"y", &x1));
+ ASSERT_TRUE(windowPref->GetInteger(L"left", &x1));
+ ASSERT_TRUE(windowPref->GetInteger(L"right", &x2));
+ ASSERT_TRUE(windowPref->GetInteger(L"top", &y1));
+ ASSERT_TRUE(windowPref->GetInteger(L"bottom", &y2));
+ EXPECT_EQ(300, x1);
+ EXPECT_EQ(310, y1);
+ EXPECT_EQ(300 + 50, x2);
+ EXPECT_EQ(310 + 52, y2);
+}

Powered by Google App Engine
This is Rietveld 408576698