blob: d182472381b621a376416e39719666b5cef51f05 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
TS_TEST_EXTENSION=
TS_TEST_EXTRA_SRCS_MASK=
TS_TEST_CONFIG_PATH=
TS_TEST_FOR_MOD=
TS_TEST_NM=
# We have to rename node_modules.tar to workspace_node_modules.tar,
# so TS_TEST_JEST module has it's own unique output.
# TS_TEST_JEST_FOR module has to output all files required for test run.
TS_TEST_JEST_CMD=$TOUCH_UNIT \
&& ${cwd:BINDIR} $MOVE_FILE ${input:TS_TEST_NM} ${output:"workspace_node_modules.tar"} \
${kv;hide:"p TSJEST"} ${kv;hide:"pc magenta"}
### @usage: TS_TEST_JEST_FOR(Path)
###
### Defines testing module with jest test runner.
###
### @example
###
### TS_TEST_JEST_FOR(path/to/module)
### TS_TEST_SRCS(../src)
### TS_TEST_CONFIG(../jest.config.js)
### END()
###
module TS_TEST_JEST_FOR: _TS_TEST_BASE {
.CMD=TS_TEST_JEST_CMD
# for multimodule peers we should choose NODE_MODULES
SET(PEERDIR_TAGS NODE_MODULES)
# compatibility with old TS_TEST_SRCS
SET(TS_TEST_EXTENSION test.(ts|tsx|js|jsx))
SET(TS_TEST_EXTRA_SRCS_MASK /**/__mocks__/*)
_PEERDIR_TS_RESOURCE(nodejs pnpm jest)
_TS_TEST_FOR_CONFIGURE(jest jest.config.js)
}
module _TS_TEST_BASE: _BARE_UNIT {
# ignore SRCS macro
.ALIASES=SRCS=_NOOP_MACRO
# use this parser to get module args in $MODULE_ARGS_RAW
.ARGS_PARSER=Raw
.NODE_TYPE=Program
# .fake tells builder to not materialize it in results
SET(MODULE_SUFFIX .ts_test.fake)
# include processor works only for TS tag
SET(MODULE_TAG TS)
# we read erm-packages.json during configuration, so we have to include it to configuration cache key
SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${ARCADIA_ROOT}/$ERM_PACKAGES_PATH)
# parse module args
_TS_TEST_FOR_ARGS($MODULE_ARGS_RAW)
# we don't want to have TS outputs for tests
DISABLE(TS_CONFIG_DEDUCE_OUT)
}
macro _TS_TEST_FOR_ARGS(FOR_MOD, RELATIVE?"${CURDIR}":"${ARCADIA_ROOT}") {
# we read testing modules' package.json during configuration,
# so we have to include it to configuration cache key
SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS $RELATIVE/$FOR_MOD/package.json)
_SET_TS_TEST_FOR_VARS($FOR_MOD)
}
macro _SETUP_EXTRACT_NODE_MODULES_RECIPE(FOR_PATH) {
DEPENDS(devtools/frontend_build_platform/nots/recipes/extract_node_modules)
USE_RECIPE(devtools/frontend_build_platform/nots/recipes/extract_node_modules/recipe $FOR_PATH workspace_node_modules.tar)
}
macro _SETUP_EXTRACT_PEER_TARS_RECIPE(FOR_PATH) {
DEPENDS(devtools/frontend_build_platform/nots/recipes/extract_peer_tars)
USE_RECIPE(devtools/frontend_build_platform/nots/recipes/extract_peer_tars/recipe $FOR_PATH)
}
### @usage: TS_TEST_CONFIG(Path)
###
### Macro sets the path to configuration file of the test runner.
###
### - Path - path to the config file.
macro TS_TEST_CONFIG(Path) {
SET(TS_TEST_CONFIG_PATH $Path)
}
_TS_TEST_SRCS_VALUE=
_TS_TEST_EXTRA_SRCS_VALUE=
### @usage: TS_TEST_SRCS(DIRS...)
###
### Macro to define directories where the test source files should be located.
###
### - DIRS... - directories.
macro TS_TEST_SRCS(DIRS...) {
_GLOB(_TS_TEST_SRCS_VALUE ${suf=/**/*.$TS_TEST_EXTENSION:DIRS})
SRCS($_TS_TEST_SRCS_VALUE)
_GLOB(_TS_TEST_EXTRA_SRCS_VALUE ${suf=$TS_TEST_EXTRA_SRCS_MASK:DIRS})
SRCS($_TS_TEST_EXTRA_SRCS_VALUE)
}
_TS_TEST_DATA_VALUE=
_TS_TEST_DATA_DIRS_RENAME_VALUE=
### @usage: TS_TEST_DATA([RENAME] GLOBS...)
###
### Macro to add tests data (i.e. snapshots) used in testing to a bindir from curdir.
### Creates symbolic links to directories of files found by the specified globs.
###
### Parameters:
### - RENAME - adds ability to rename paths for tests data from curdir to bindir.
### For example if your tested module located on "module" path and tests data in "module/tests_data".
### Then you can be able to rename "tests_data" folder to something else - `RENAME tests_data:example`.
### As a result in your bindir will be created folder - "module/example" which is a symbolic link on "module/tests_data" in curdir.
### It is possible to specify multiple renaming rules in the following format "dir1:dir2;dir3/foo:dir4/bar", where "dir1" and "dir3" folders in curdir.
### - GLOBS... - globs to tests data files, symbolic links will be created to their folders. For example - "tests_data/**/*".
macro TS_TEST_DATA(RENAME="", GLOBS...) {
_GLOB(_TS_TEST_DATA_VALUE $GLOBS)
SET(_TS_TEST_DATA_DIRS_RENAME_VALUE $RENAME)
}
|