Skip to content

Commit c365db2

Browse files
committed
Add the node-lite test suite Vlad added into hermes-windows. The JSC bug fix in strict mode was actually found by the suite! The failing behavior was exercised by Tests/NodeApi/test/js-native-api/3_callbacks/test.js. New cmake targets emit a node-lite binary and a NodeApiTests binary, all currently enabled tests for currently supported NAPI v5 pass on Mac. Next step is to enable them for running in Android simulator.
1 parent f9e82e9 commit c365db2

208 files changed

Lines changed: 15531 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
add_subdirectory(UnitTests)
2+
add_subdirectory(NodeApi)
23
npm(install --silent)

Tests/NodeApi/.clang-format

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
Language: Cpp
3+
# BasedOnStyle: Google
4+
AccessModifierOffset: -1
5+
AlignAfterOpenBracket: Align
6+
AlignConsecutiveAssignments: false
7+
AlignConsecutiveDeclarations: false
8+
AlignEscapedNewlines: Right
9+
AlignOperands: true
10+
AlignTrailingComments: true
11+
AllowAllParametersOfDeclarationOnNextLine: true
12+
AllowShortBlocksOnASingleLine: false
13+
AllowShortCaseLabelsOnASingleLine: false
14+
AllowShortFunctionsOnASingleLine: Inline
15+
AllowShortIfStatementsOnASingleLine: true
16+
AllowShortLoopsOnASingleLine: true
17+
AlwaysBreakAfterDefinitionReturnType: None
18+
AlwaysBreakAfterReturnType: None
19+
AlwaysBreakBeforeMultilineStrings: false
20+
AlwaysBreakTemplateDeclarations: true
21+
BinPackArguments: false
22+
BinPackParameters: false
23+
BraceWrapping:
24+
AfterClass: false
25+
AfterControlStatement: false
26+
AfterEnum: false
27+
AfterFunction: false
28+
AfterNamespace: false
29+
AfterObjCDeclaration: false
30+
AfterStruct: false
31+
AfterUnion: false
32+
AfterExternBlock: false
33+
BeforeCatch: false
34+
BeforeElse: false
35+
IndentBraces: false
36+
SplitEmptyFunction: true
37+
SplitEmptyRecord: true
38+
SplitEmptyNamespace: true
39+
BreakBeforeBinaryOperators: None
40+
BreakBeforeBraces: Attach
41+
BreakBeforeInheritanceComma: false
42+
BreakBeforeTernaryOperators: true
43+
BreakConstructorInitializersBeforeComma: false
44+
BreakConstructorInitializers: BeforeColon
45+
BreakAfterJavaFieldAnnotations: false
46+
BreakStringLiterals: true
47+
ColumnLimit: 80
48+
CommentPragmas: '^ IWYU pragma:'
49+
CompactNamespaces: false
50+
ConstructorInitializerAllOnOneLineOrOnePerLine: true
51+
ConstructorInitializerIndentWidth: 4
52+
ContinuationIndentWidth: 4
53+
Cpp11BracedListStyle: true
54+
DerivePointerAlignment: false
55+
DisableFormat: false
56+
ExperimentalAutoDetectBinPacking: false
57+
FixNamespaceComments: true
58+
ForEachMacros:
59+
- foreach
60+
- Q_FOREACH
61+
- BOOST_FOREACH
62+
IncludeBlocks: Preserve
63+
IncludeCategories:
64+
- Regex: '^<ext/.*\.h>'
65+
Priority: 2
66+
- Regex: '^<.*\.h>'
67+
Priority: 1
68+
- Regex: '^<.*'
69+
Priority: 2
70+
- Regex: '.*'
71+
Priority: 3
72+
IncludeIsMainRegex: '([-_](test|unittest))?$'
73+
IndentCaseLabels: true
74+
IndentPPDirectives: None
75+
IndentWidth: 2
76+
IndentWrappedFunctionNames: false
77+
JavaScriptQuotes: Leave
78+
JavaScriptWrapImports: true
79+
KeepEmptyLinesAtTheStartOfBlocks: false
80+
MacroBlockBegin: ''
81+
MacroBlockEnd: ''
82+
MaxEmptyLinesToKeep: 1
83+
NamespaceIndentation: None
84+
ObjCBlockIndentWidth: 2
85+
ObjCSpaceAfterProperty: false
86+
ObjCSpaceBeforeProtocolList: false
87+
PenaltyBreakAssignment: 2
88+
PenaltyBreakBeforeFirstCallParameter: 1
89+
PenaltyBreakComment: 300
90+
PenaltyBreakFirstLessLess: 120
91+
PenaltyBreakString: 1000
92+
PenaltyExcessCharacter: 1000000
93+
PenaltyReturnTypeOnItsOwnLine: 200
94+
PointerAlignment: Left
95+
ReflowComments: true
96+
SortIncludes: true
97+
SortUsingDeclarations: true
98+
SpaceAfterCStyleCast: false
99+
SpaceAfterTemplateKeyword: true
100+
SpaceBeforeAssignmentOperators: true
101+
SpaceBeforeParens: ControlStatements
102+
SpaceInEmptyParentheses: false
103+
SpacesBeforeTrailingComments: 2
104+
SpacesInAngles: false
105+
SpacesInContainerLiterals: true
106+
SpacesInCStyleCastParentheses: false
107+
SpacesInParentheses: false
108+
SpacesInSquareBrackets: false
109+
Standard: Auto
110+
TabWidth: 8
111+
UseTab: Never

Tests/NodeApi/CMakeLists.txt

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
set(NODE_API_TEST_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
2+
3+
option(JSR_NODE_API_BUILD_NATIVE_TESTS "Build Node-API native addon test modules" OFF)
4+
5+
if(JSR_NODE_API_BUILD_NATIVE_TESTS)
6+
set(JSR_NODE_API_NATIVE_TEST_DIRS
7+
2_function_arguments
8+
3_callbacks
9+
4_object_factory
10+
5_function_factory
11+
)
12+
endif()
13+
14+
function(node_api_copy_test_sources TARGET_NAME)
15+
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
16+
COMMAND ${CMAKE_COMMAND} -E copy_directory
17+
${NODE_API_TEST_ROOT}/test
18+
$<TARGET_FILE_DIR:${TARGET_NAME}>/test
19+
COMMENT "Copying Node-API test assets for ${TARGET_NAME}"
20+
)
21+
endfunction()
22+
23+
if(APPLE)
24+
set(NODE_LITE_PLATFORM_SRC node_lite_mac.cpp)
25+
set(NODE_LITE_CHILD_PROCESS_SRC child_process_mac.cpp)
26+
elseif(WIN32)
27+
set(NODE_LITE_PLATFORM_SRC node_lite_windows.cpp)
28+
set(NODE_LITE_CHILD_PROCESS_SRC child_process.cpp)
29+
else()
30+
set(NODE_LITE_PLATFORM_SRC node_lite_mac.cpp)
31+
set(NODE_LITE_CHILD_PROCESS_SRC child_process_mac.cpp)
32+
message(WARNING "Node-API node_lite platform not yet customized for ${CMAKE_SYSTEM_NAME}; using POSIX defaults.")
33+
endif()
34+
35+
add_executable(node_lite
36+
${NODE_LITE_CHILD_PROCESS_SRC}
37+
child_process.h
38+
compat.h
39+
js_runtime_api.cpp
40+
js_runtime_api.h
41+
node_lite.cpp
42+
node_lite.h
43+
node_lite_jsruntimehost.cpp
44+
${NODE_LITE_PLATFORM_SRC}
45+
string_utils.cpp
46+
string_utils.h
47+
)
48+
49+
target_include_directories(node_lite
50+
PRIVATE
51+
${NODE_API_TEST_ROOT}
52+
${NODE_API_TEST_ROOT}/include
53+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Shared
54+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Engine/${NAPI_JAVASCRIPT_ENGINE}
55+
${CMAKE_SOURCE_DIR}/Core/Node-API/Source
56+
)
57+
58+
target_compile_definitions(node_lite
59+
PRIVATE
60+
NODE_API_EXPERIMENTAL_NO_WARNING
61+
)
62+
63+
target_link_libraries(node_lite
64+
PRIVATE
65+
napi
66+
)
67+
68+
node_api_copy_test_sources(node_lite)
69+
70+
add_executable(NodeApiTests
71+
${NODE_LITE_CHILD_PROCESS_SRC}
72+
child_process.h
73+
string_utils.cpp
74+
string_utils.h
75+
test_basics.cpp
76+
test_main.cpp
77+
test_main.h
78+
)
79+
80+
target_include_directories(NodeApiTests
81+
PRIVATE
82+
${NODE_API_TEST_ROOT}
83+
${NODE_API_TEST_ROOT}/include
84+
)
85+
86+
target_link_libraries(NodeApiTests
87+
PRIVATE
88+
gtest_main
89+
)
90+
91+
node_api_copy_test_sources(NodeApiTests)
92+
93+
add_dependencies(NodeApiTests node_lite)
94+
95+
add_custom_target(NodeApiModules)
96+
97+
if(JSR_NODE_API_BUILD_NATIVE_TESTS)
98+
list(JOIN JSR_NODE_API_NATIVE_TEST_DIRS "," NODE_API_NATIVE_TESTS_STRING)
99+
target_compile_definitions(node_lite
100+
PRIVATE
101+
NODE_API_TESTS_HAVE_NATIVE_MODULES=1
102+
NODE_API_AVAILABLE_NATIVE_TESTS=\"${NODE_API_NATIVE_TESTS_STRING}\"
103+
)
104+
target_compile_definitions(NodeApiTests
105+
PRIVATE
106+
NODE_API_TESTS_HAVE_NATIVE_MODULES=1
107+
NODE_API_AVAILABLE_NATIVE_TESTS=\"${NODE_API_NATIVE_TESTS_STRING}\"
108+
)
109+
endif()
110+
111+
function(add_node_api_module MODULE_TARGET)
112+
cmake_parse_arguments(PARSE_ARGV 0 ARG "" "" "SOURCES;DEFINES")
113+
114+
get_filename_component(FOLDER_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
115+
116+
if(NOT "${MODULE_TARGET}" STREQUAL "${FOLDER_NAME}")
117+
set(MODULE_TARGET "${FOLDER_NAME}_${MODULE_TARGET}")
118+
endif()
119+
120+
add_library(${MODULE_TARGET} MODULE)
121+
target_sources(${MODULE_TARGET} PRIVATE ${ARG_SOURCES})
122+
target_include_directories(${MODULE_TARGET}
123+
PRIVATE
124+
${NODE_API_TEST_ROOT}/include
125+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Shared
126+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Shared/napi
127+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Engine/${NAPI_JAVASCRIPT_ENGINE}
128+
${CMAKE_SOURCE_DIR}/Core/Node-API/Include/Engine/${NAPI_JAVASCRIPT_ENGINE}/napi
129+
)
130+
131+
target_compile_definitions(${MODULE_TARGET}
132+
PRIVATE
133+
NODE_API_EXPERIMENTAL_NO_WARNING
134+
NODE_GYP_MODULE_NAME=\"${FOLDER_NAME}\"
135+
${ARG_DEFINES}
136+
)
137+
138+
if(APPLE)
139+
target_link_options(${MODULE_TARGET}
140+
PRIVATE
141+
"-undefined" "dynamic_lookup"
142+
)
143+
endif()
144+
145+
set(MODULE_OUTPUT_DIR
146+
${CMAKE_CURRENT_BINARY_DIR}/build/$<IF:$<CONFIG:Debug>,Debug,Release>)
147+
set_target_properties(${MODULE_TARGET}
148+
PROPERTIES
149+
PREFIX ""
150+
SUFFIX ".node"
151+
ARCHIVE_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}
152+
LIBRARY_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}
153+
RUNTIME_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}
154+
)
155+
156+
add_dependencies(NodeApiModules ${MODULE_TARGET})
157+
158+
add_custom_command(TARGET ${MODULE_TARGET} POST_BUILD
159+
COMMAND ${CMAKE_COMMAND} -E make_directory
160+
$<TARGET_FILE_DIR:node_lite>/test/js-native-api/${FOLDER_NAME}/build
161+
COMMAND ${CMAKE_COMMAND} -E copy_directory
162+
${CMAKE_CURRENT_BINARY_DIR}/build
163+
$<TARGET_FILE_DIR:node_lite>/test/js-native-api/${FOLDER_NAME}/build
164+
COMMAND ${CMAKE_COMMAND} -E make_directory
165+
$<TARGET_FILE_DIR:NodeApiTests>/test/js-native-api/${FOLDER_NAME}/build
166+
COMMAND ${CMAKE_COMMAND} -E copy_directory
167+
${CMAKE_CURRENT_BINARY_DIR}/build
168+
$<TARGET_FILE_DIR:NodeApiTests>/test/js-native-api/${FOLDER_NAME}/build
169+
COMMENT "Copying Node-API module ${MODULE_TARGET} outputs"
170+
)
171+
endfunction()
172+
173+
add_dependencies(NodeApiTests NodeApiModules)
174+
175+
add_subdirectory(test)

0 commit comments

Comments
 (0)