// Copyright (c) 2011 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 "base/mac/scoped_nsobject.h"
#include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
#include "chrome/browser/ui/cocoa/fullscreen_window.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"

@interface PerformCloseUIItem : NSObject<NSValidatedUserInterfaceItem>
@end

@implementation PerformCloseUIItem
- (SEL)action {
  return @selector(performClose:);
}

- (NSInteger)tag {
  return 0;
}
@end

class FullscreenWindowTest : public CocoaTest {
};

TEST_F(FullscreenWindowTest, Basics) {
  base::scoped_nsobject<FullscreenWindow> window;
  window.reset([[FullscreenWindow alloc] init]);

  EXPECT_EQ([NSScreen mainScreen], [window screen]);
  EXPECT_TRUE([window canBecomeKeyWindow]);
  EXPECT_TRUE([window canBecomeMainWindow]);
  EXPECT_EQ(NSBorderlessWindowMask, [window styleMask]);
  EXPECT_TRUE(NSEqualRects([[NSScreen mainScreen] frame], [window frame]));
  EXPECT_FALSE([window isReleasedWhenClosed]);
}

TEST_F(FullscreenWindowTest, CanPerformClose) {
  base::scoped_nsobject<FullscreenWindow> window;
  window.reset([[FullscreenWindow alloc] init]);

  base::scoped_nsobject<PerformCloseUIItem> item;
  item.reset([[PerformCloseUIItem alloc] init]);

  EXPECT_TRUE([window validateUserInterfaceItem:item.get()]);
}
