Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cfxjs_engine_unittest.cpp
Go to the documentation of this file.
1
// Copyright 2018 The PDFium Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#
include
"fxjs/cfxjs_engine.h"
6
7
#
include
<
memory
>
8
9
#
include
"fxjs/cjs_object.h"
10
#
include
"testing/fxv8_unittest.h"
11
#
include
"testing/gtest/include/gtest/gtest.h"
12
#
include
"v8/include/v8-context.h"
13
#
include
"v8/include/v8-isolate.h"
14
15
class
FXJSEngineUnitTest
:
public
FXV8UnitTest
{
16
public
:
17
FXJSEngineUnitTest
() =
default
;
18
~
FXJSEngineUnitTest
()
override
=
default
;
19
20
// FXV8UnitTest:
21
void
SetUp
()
override
{
22
FXV8UnitTest
::
SetUp
();
23
FXJS_Initialize(1,
isolate
());
24
engine_ = std::make_unique<CFXJS_Engine>(isolate());
25
}
26
void
TearDown
()
override
{
FXJS_Release
(
)
; }
27
28
CFXJS_Engine
*
engine
()
const
{
return
engine_.get(); }
29
30
private
:
31
std::unique_ptr<CFXJS_Engine> engine_;
32
};
33
34
static
bool
perm_created
=
false
;
35
static
bool
perm_destroyed
=
false
;
36
static
bool
temp_created
=
false
;
37
static
bool
temp_destroyed
=
false
;
38
39
TEST_F
(
FXJSEngineUnitTest
,
GC
) {
40
// Reset variables since there might be multiple iterations.
41
perm_created
=
false
;
42
perm_destroyed
=
false
;
43
temp_created
=
false
;
44
temp_destroyed
=
false
;
45
46
v8::Isolate::Scope isolate_scope(isolate());
47
v8::HandleScope handle_scope(isolate());
48
49
// Object: 1
50
engine()->DefineObj(
51
"perm"
,
FXJSOBJTYPE_DYNAMIC
,
52
[](
CFXJS_Engine
* pEngine, v8::Local<v8::Object> obj,
53
v8::Local<v8::Object> proxy) {
54
pEngine->SetBinding(obj,
std
::make_unique<
CJS_Object
>(proxy,
nullptr
));
55
perm_created
=
true
;
56
},
57
[](v8::Local<v8::Object> obj) {
58
perm_destroyed
=
true
;
59
CFXJS_Engine::SetBinding(obj,
nullptr
);
60
});
61
62
// Object: 2
63
engine()->DefineObj(
64
"temp"
,
FXJSOBJTYPE_DYNAMIC
,
65
[](
CFXJS_Engine
* pEngine, v8::Local<v8::Object> obj,
66
v8::Local<v8::Object> proxy) {
67
pEngine->SetBinding(obj,
std
::make_unique<
CJS_Object
>(proxy,
nullptr
));
68
temp_created
=
true
;
69
},
70
[](v8::Local<v8::Object> obj) {
71
temp_destroyed
=
true
;
72
CFXJS_Engine::SetBinding(obj,
nullptr
);
73
});
74
75
engine()->InitializeEngine();
76
77
v8::Context::Scope context_scope(engine()->GetV8Context());
78
v8::Local<v8::Object> perm =
79
engine()->NewFXJSBoundObject(1, FXJSOBJTYPE_DYNAMIC);
80
EXPECT_FALSE(perm.IsEmpty());
81
EXPECT_TRUE(
perm_created
);
82
EXPECT_FALSE(
perm_destroyed
);
83
84
{
85
v8::HandleScope inner_handle_scope(isolate());
86
v8::Local<v8::Object> temp =
87
engine()->NewFXJSBoundObject(2, FXJSOBJTYPE_DYNAMIC);
88
EXPECT_FALSE(temp.IsEmpty());
89
EXPECT_TRUE(
temp_created
);
90
EXPECT_FALSE(
temp_destroyed
);
91
}
92
93
std
::optional<
IJS_Runtime
::
JS_Error
> err = engine()->Execute(L"gc();");
94
EXPECT_FALSE(err);
95
96
EXPECT_TRUE(
perm_created
);
97
EXPECT_FALSE(
perm_destroyed
);
98
EXPECT_TRUE(
temp_created
);
99
// TODO(tsepez): temp_destroyed should be true, but it isnt.
100
// EXPECT_TRUE(temp_destroyed);
101
102
engine()->ReleaseEngine();
103
EXPECT_TRUE(
perm_created
);
104
EXPECT_TRUE(
perm_destroyed
);
105
EXPECT_TRUE(
temp_created
);
106
EXPECT_TRUE(
temp_destroyed
);
107
}
FXJS_Release
void FXJS_Release()
Definition
cfxjs_engine.cpp:339
FXJSOBJTYPE_DYNAMIC
@ FXJSOBJTYPE_DYNAMIC
Definition
cfxjs_engine.h:35
TEST_F
TEST_F(FXJSEngineUnitTest, GC)
Definition
cfxjs_engine_unittest.cpp:39
temp_created
static bool temp_created
Definition
cfxjs_engine_unittest.cpp:36
temp_destroyed
static bool temp_destroyed
Definition
cfxjs_engine_unittest.cpp:37
perm_created
static bool perm_created
Definition
cfxjs_engine_unittest.cpp:34
perm_destroyed
static bool perm_destroyed
Definition
cfxjs_engine_unittest.cpp:35
CFXJS_Engine
Definition
cfxjs_engine.h:112
CJS_Object
Definition
cjs_object.h:35
FXJSEngineUnitTest
Definition
cfxjs_engine_unittest.cpp:15
FXJSEngineUnitTest::engine
CFXJS_Engine * engine() const
Definition
cfxjs_engine_unittest.cpp:28
FXJSEngineUnitTest::TearDown
void TearDown() override
Definition
cfxjs_engine_unittest.cpp:26
FXJSEngineUnitTest::~FXJSEngineUnitTest
~FXJSEngineUnitTest() override=default
FXJSEngineUnitTest::SetUp
void SetUp() override
Definition
cfxjs_engine_unittest.cpp:21
FXJSEngineUnitTest::FXJSEngineUnitTest
FXJSEngineUnitTest()=default
FXV8UnitTest
Definition
fxv8_unittest.h:19
FXV8UnitTest::isolate
v8::Isolate * isolate() const
Definition
fxv8_unittest.h:30
FXV8UnitTest::SetUp
void SetUp() override
Definition
fxv8_unittest.cpp:20
IJS_Runtime
Definition
ijs_runtime.h:24
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
IJS_Runtime::JS_Error
Definition
ijs_runtime.h:26
qtwebengine
src
3rdparty
chromium
third_party
pdfium
fxjs
cfxjs_engine_unittest.cpp
Generated on
for Qt by
1.18.0