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

Unified Diff: ios/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue_unittest.mm

Issue 2921833002: [iOS Clean] Created OverlayService.
Patch Set: self review Created 3 years, 7 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: ios/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue_unittest.mm
diff --git a/ios/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue_unittest.mm b/ios/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..e73de3e67914edcffe077ddbd12ac2cdda3bce8d
--- /dev/null
+++ b/ios/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue_unittest.mm
@@ -0,0 +1,125 @@
+// Copyright 2017 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/clean/chrome/browser/ui/web_contents/overlays/web_overlay_queue.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+#import "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
+#import "ios/clean/chrome/browser/ui/commands/web_overlay_commands.h"
+#import "ios/web/public/test/fakes/test_web_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest_mac.h"
+#include "testing/platform_test.h"
+
+// Test overlay coordinator subclass.
+@interface TestWebOverlayCoordinator : WebOverlayCoordinator
+// Whether the completion block has been cancelled.
+@property(nonatomic, readonly) BOOL completionWasCancelled;
+// The coordinator on which this has been started.
+@property(nonatomic, readonly) BrowserCoordinator* webCoordinator;
+@end
+
+@implementation TestWebOverlayCoordinator
+@synthesize completionWasCancelled = _completionWasCancelled;
+@synthesize webCoordinator = _webCoordinator;
+
+- (void)cancelWebKitCompletion {
+ _completionWasCancelled = YES;
+}
+
+- (void)startOverlayingWebCoordinator:(BrowserCoordinator*)webCoordinator {
+ _webCoordinator = webCoordinator;
+}
+
+@end
+
+// Test overlay scheduler subclass.
+@interface TestWebOverlayScheduler : NSObject<WebOverlaySchedulerCommands>
+@property(nonatomic, readonly) web::WebState* nextWebState;
+@end
+
+@implementation TestWebOverlayScheduler
+@synthesize nextWebState = _nextWebState;
+
+- (void)scheduleWebOverlayForWebState:(web::WebState*)webState {
+ _nextWebState = webState;
+}
+- (void)webOverlayWasStoppedForWebState:(web::WebState*)webState {
+}
+- (void)cancelWebOverlaysForWebState:(web::WebState*)webState {
+}
+@end
+
+class WebOverlayQueueTest : public PlatformTest {
+ public:
+ WebOverlayQueueTest()
+ : PlatformTest(), scheduler_([[TestWebOverlayScheduler alloc] init]) {
+ WebOverlayQueue::CreateForWebState(&web_state_, scheduler_);
+ }
+
+ web::WebState* web_state() { return &web_state_; }
+
+ WebOverlayQueue* queue() {
+ return WebOverlayQueue::FromWebState(&web_state_);
+ }
+
+ TestWebOverlayScheduler* scheduler() { return scheduler_; }
+
+ private:
+ web::TestWebState web_state_;
+ base::scoped_nsobject<TestWebOverlayScheduler> scheduler_;
+};
+
+// Tests that adding an overlay to the queue updates state accordingly and
+// dispatches a |-scheduleWebOverlayForWebState:| command.
+TEST_F(WebOverlayQueueTest, AddOverlay) {
+ TestWebOverlayCoordinator* overlay =
+ [[TestWebOverlayCoordinator alloc] initWithWebState:web_state()];
+ queue()->AddWebOverlay(overlay);
+ EXPECT_TRUE(queue()->HasQueuedOverlays());
+ EXPECT_FALSE(queue()->IsShowingOverlay());
+ EXPECT_EQ(web_state(), scheduler().nextWebState);
+}
+
+// Tests that starting an overlay updates state and starts the queued overlay.
+TEST_F(WebOverlayQueueTest, StartOverlay) {
+ TestWebOverlayCoordinator* overlay =
+ [[TestWebOverlayCoordinator alloc] initWithWebState:web_state()];
+ queue()->AddWebOverlay(overlay);
+ BrowserCoordinator* web_coordinator = [[BrowserCoordinator alloc] init];
+ queue()->StartNextOverlay(web_coordinator);
+ EXPECT_TRUE(queue()->IsShowingOverlay());
+ EXPECT_EQ(web_coordinator, overlay.webCoordinator);
+}
+
+// Tests that WebOverlayWasStopped() updates state properly.
+TEST_F(WebOverlayQueueTest, OverlayWasStopped) {
+ TestWebOverlayCoordinator* overlay =
+ [[TestWebOverlayCoordinator alloc] initWithWebState:web_state()];
+ queue()->AddWebOverlay(overlay);
+ BrowserCoordinator* web_coordinator = [[BrowserCoordinator alloc] init];
+ queue()->StartNextOverlay(web_coordinator);
+ queue()->WebOverlayWasStopped(overlay);
+ EXPECT_FALSE(queue()->HasQueuedOverlays());
+ EXPECT_FALSE(queue()->IsShowingOverlay());
+}
+
+// Tests that CancelOverlays() cancels all queued overlays for a WebState.
+TEST_F(WebOverlayQueueTest, CancelOverlays) {
+ TestWebOverlayCoordinator* overlay0 =
+ [[TestWebOverlayCoordinator alloc] initWithWebState:web_state()];
+ TestWebOverlayCoordinator* overlay1 =
+ [[TestWebOverlayCoordinator alloc] initWithWebState:web_state()];
+ queue()->AddWebOverlay(overlay0);
+ queue()->AddWebOverlay(overlay1);
+ queue()->CancelOverlays();
+ EXPECT_FALSE(queue()->HasQueuedOverlays());
+ EXPECT_FALSE(queue()->IsShowingOverlay());
+ EXPECT_TRUE(overlay0.completionWasCancelled);
+ EXPECT_TRUE(overlay1.completionWasCancelled);
+}

Powered by Google App Engine
This is Rietveld 408576698