blob: 462ee8e9e76c4f20e0573b994c45d0a9155e789e [file] [log] [blame]
// Copyright 2019 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 "third_party/blink/renderer/core/streams/stream_promise_resolver.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
#include "third_party/blink/renderer/core/streams/stream_script_function.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
namespace blink {
namespace {
TEST(StreamPromiseResolverTest, Construct) {
V8TestingScope scope;
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
EXPECT_TRUE(promise->V8Promise(scope.GetIsolate())->IsPromise());
}
TEST(StreamPromiseResolverTest, Resolve) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
promise->Resolve(scope.GetScriptState(), v8::Null(isolate));
ASSERT_EQ(promise->State(isolate), v8::Promise::kFulfilled);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsNull());
}
TEST(StreamPromiseResolverTest, ResolveWithUndefined) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
promise->ResolveWithUndefined(scope.GetScriptState());
ASSERT_EQ(promise->State(isolate), v8::Promise::kFulfilled);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsUndefined());
}
TEST(StreamPromiseResolverTest, Reject) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
promise->Reject(scope.GetScriptState(), v8::Number::New(isolate, 2));
ASSERT_EQ(promise->State(isolate), v8::Promise::kRejected);
auto result = promise->V8Promise(isolate)->Result();
ASSERT_TRUE(result->IsNumber());
EXPECT_EQ(result.As<v8::Number>()->Value(), 2.0);
}
TEST(StreamPromiseResolverTest, RejectDoesNothingAfterResolve) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
promise->Resolve(scope.GetScriptState(), v8::Undefined(isolate));
promise->Reject(scope.GetScriptState(), v8::Null(isolate));
ASSERT_EQ(promise->State(isolate), v8::Promise::kFulfilled);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsUndefined());
}
TEST(StreamPromiseResolverTest, ResolveDoesNothingAfterReject) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
promise->Reject(scope.GetScriptState(), v8::Null(isolate));
promise->Resolve(scope.GetScriptState(), v8::Undefined(isolate));
ASSERT_EQ(promise->State(isolate), v8::Promise::kRejected);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsNull());
}
TEST(StreamPromiseResolverTest, GetScriptPromise) {
V8TestingScope scope;
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
ScriptPromise script_promise =
promise->GetScriptPromise(scope.GetScriptState());
EXPECT_FALSE(script_promise.IsEmpty());
}
TEST(StreamPromiseResolverTest, MarkAsHandled) {
V8TestingScope scope;
auto* promise =
MakeGarbageCollected<StreamPromiseResolver>(scope.GetScriptState());
auto* isolate = scope.GetIsolate();
promise->MarkAsHandled(isolate);
EXPECT_TRUE(promise->V8Promise(isolate)->HasHandler());
}
TEST(StreamPromiseResolverTest, CreateResolved) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise = StreamPromiseResolver::CreateResolved(scope.GetScriptState(),
v8::Null(isolate));
ASSERT_EQ(promise->State(isolate), v8::Promise::kFulfilled);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsNull());
}
TEST(StreamPromiseResolverTest, CreateResolvedWithUndefined) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise = StreamPromiseResolver::CreateResolvedWithUndefined(
scope.GetScriptState());
ASSERT_EQ(promise->State(isolate), v8::Promise::kFulfilled);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsUndefined());
}
TEST(StreamPromiseResolverTest, CreateRejected) {
V8TestingScope scope;
auto* isolate = scope.GetIsolate();
auto* promise = StreamPromiseResolver::CreateRejected(scope.GetScriptState(),
v8::Null(isolate));
ASSERT_EQ(promise->State(isolate), v8::Promise::kRejected);
EXPECT_TRUE(promise->V8Promise(isolate)->Result()->IsNull());
}
} // namespace
} // namespace blink