blob: a6a87a1f6d64bbc718fe569dd7496ad0f9983462 [file] [log] [blame]
// Copyright 2015 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 "ios/chrome/browser/ui/keyboard/hardware_keyboard_watcher.h"
#include "base/mac/scoped_nsobject.h"
#include "base/test/histogram_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
void PostKeyboardWillChangeNotification(CGRect beginFrame, CGRect endFrame) {
[[NSNotificationCenter defaultCenter]
postNotificationName:UIKeyboardWillChangeFrameNotification
object:nil
userInfo:@{
UIKeyboardFrameBeginUserInfoKey :
[NSValue valueWithCGRect:beginFrame],
UIKeyboardFrameEndUserInfoKey :
[NSValue valueWithCGRect:endFrame],
}];
}
typedef PlatformTest HardwareKeyboardWatcherTest;
TEST_F(HardwareKeyboardWatcherTest, AccessoryViewNotInHierarchy_NoHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[mockView stub] andReturn:nil];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectZero, CGRectZero);
PostKeyboardWillChangeNotification(CGRectInfinite, CGRectInfinite);
histogram_tester.ExpectTotalCount("Omnibox.HardwareKeyboardModeEnabled", 0);
}
TEST_F(HardwareKeyboardWatcherTest, EmptyBeginFrame_SoftwareKeyboardHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[[mockView stub] andReturn:[[UIApplication sharedApplication] keyWindow]]
window];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectZero, CGRectInfinite);
histogram_tester.ExpectUniqueSample("Omnibox.HardwareKeyboardModeEnabled",
false, 1);
}
TEST_F(HardwareKeyboardWatcherTest, EmptyEndFrame_SoftwareKeyboardHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[[mockView stub] andReturn:[[UIApplication sharedApplication] keyWindow]]
window];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectInfinite, CGRectZero);
histogram_tester.ExpectUniqueSample("Omnibox.HardwareKeyboardModeEnabled",
false, 1);
}
TEST_F(HardwareKeyboardWatcherTest,
KeyboardFullyOnScreen_SoftwareKeyboardHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[[mockView stub] andReturn:[[UIApplication sharedApplication] keyWindow]]
window];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectMake(0, 0, 100, 100),
CGRectMake(0, 100, 100, 100));
histogram_tester.ExpectUniqueSample("Omnibox.HardwareKeyboardModeEnabled",
false, 1);
}
TEST_F(HardwareKeyboardWatcherTest,
KeyboardFullyOffScreen_SoftwareKeyboardHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[[mockView stub] andReturn:[[UIApplication sharedApplication] keyWindow]]
window];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectMake(0, -100, 100, 100),
CGRectMake(0, 0, 100, 100));
histogram_tester.ExpectUniqueSample("Omnibox.HardwareKeyboardModeEnabled",
false, 1);
}
TEST_F(HardwareKeyboardWatcherTest,
KeyboardPartiallyOnScreen_SoftwareKeyboardHistogram) {
base::HistogramTester histogram_tester;
id mockView = [OCMockObject niceMockForClass:[UIView class]];
[[[mockView stub] andReturn:[[UIApplication sharedApplication] keyWindow]]
window];
base::scoped_nsobject<HardwareKeyboardWatcher> watcher(
[[HardwareKeyboardWatcher alloc] initWithAccessoryView:mockView]);
PostKeyboardWillChangeNotification(CGRectMake(0, -50, 100, 100),
CGRectMake(0, 0, 100, 100));
histogram_tester.ExpectUniqueSample("Omnibox.HardwareKeyboardModeEnabled",
true, 1);
}
} // namespace