// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web/web_state/ui/crw_html_element_fetch_request.h"
#import "base/time/time.h"
#import "ios/web/js_features/context_menu/context_menu_constants.h"
#import "ios/web/public/ui/context_menu_params.h"
#import "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
#import "testing/platform_test.h"
namespace web {
using CRWHTMLElementFetchRequestTest = PlatformTest;
// Tests that `creationTime` is set at CRWHTMLElementFetchRequest object
// creation.
TEST_F(CRWHTMLElementFetchRequestTest, CreationTime) {
CRWHTMLElementFetchRequest* request =
[[CRWHTMLElementFetchRequest alloc] initWithFoundElementHandler:nil];
base::TimeDelta delta = base::TimeTicks::Now() - request.creationTime;
// Validate that `request.creationTime` is "now", but only use second
// precision to avoid performance induced test flake.
EXPECT_GT(1, delta.InSeconds());
}
// Tests that `runHandlerWithResponse:` runs the handler from the object's
// initializer with the expected `response`.
TEST_F(CRWHTMLElementFetchRequestTest, RunHandler) {
__block bool handler_called = false;
__block web::ContextMenuParams received_params;
void (^handler)(const web::ContextMenuParams&) =
^(const web::ContextMenuParams& params) {
handler_called = true;
received_params = params;
};
CRWHTMLElementFetchRequest* request =
[[CRWHTMLElementFetchRequest alloc] initWithFoundElementHandler:handler];
web::ContextMenuParams params = web::ContextMenuParams();
params.text = @"text";
[request runHandlerWithResponse:params];
EXPECT_TRUE(handler_called);
EXPECT_NSEQ(params.text, received_params.text);
}
// Tests that `runHandlerWithResponse:` does not run the handler from the
// object's initializer if `invalidate` has been called.
TEST_F(CRWHTMLElementFetchRequestTest, Invalidate) {
__block bool handler_called = false;
void (^handler)(const web::ContextMenuParams&) =
^(const web::ContextMenuParams& params) {
handler_called = true;
};
CRWHTMLElementFetchRequest* request =
[[CRWHTMLElementFetchRequest alloc] initWithFoundElementHandler:handler];
[request invalidate];
[request runHandlerWithResponse:web::ContextMenuParams()];
EXPECT_FALSE(handler_called);
}
} // namespace web