From 0e72d849a1cc288a9847ae583bfda4b6a18a0df7 Mon Sep 17 00:00:00 2001 From: Nazarov Konstantin Date: Tue, 8 Nov 2022 17:31:46 +0300 Subject: [PATCH] fix cmake dependencies for tests --- tests/CMakeLists.txt | 2 +- tests/disassembler/CMakeLists.txt | 45 +++++-------------- .../disassembler/disasm_test_lit_ecma.cpp.in | 28 ++++++++++++ tests/disassembler/sources/lit.js | 2 +- 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 106def2f8..765883ee5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -274,7 +274,7 @@ function(compile_file_ecma) add_custom_command(OUTPUT "${ARG_OUTPUT_FILE}" COMMENT "Run es2panda for ${ARG_FILE}" COMMAND ${es2panda_bin} --opt-level 0 --output ${ARG_OUTPUT_FILE} "${ARG_FILE}" - DEPENDS es2panda "${ARG_FILE}" + DEPENDS ${es2panda_target} "${ARG_FILE}" WORKING_DIRECTORY "${ARG_WORKING_DIR}") else() # Compile assembly file diff --git a/tests/disassembler/CMakeLists.txt b/tests/disassembler/CMakeLists.txt index eb9a022a1..8b584cd1b 100644 --- a/tests/disassembler/CMakeLists.txt +++ b/tests/disassembler/CMakeLists.txt @@ -11,8 +11,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +if (NOT PANDA_TARGET_ARM32) + # disasm_bin directory -set(DISASM_BIN_DIR ${PANDA_BINARY_ROOT}/disassembler/bin) +set(DISASM_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}) # disasm_tests directory set(DISASM_ECMA_TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sources) @@ -24,7 +26,7 @@ panda_add_gtest( NAME disasm_tests_ecma SOURCES - ${LITERALS_TEST_ECMA_SRC} + ${LITERALS_TEST_ECMA_SRC} LIBRARIES arkdisassembler INCLUDE_DIRS @@ -33,37 +35,10 @@ panda_add_gtest( ${PANDA_SANITIZERS_LIST} ) -function(ecma_compile_pre_build) - set(options) - set(singleValueArgs TARGET FILE_SRC FILE_DST) - set(multiValueArgs) - - cmake_parse_arguments(CPB "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) - - if (NOT DEFINED CPB_TARGET) - message(FATAL_ERROR "TARGET argument is missing") - endif() - - if (NOT DEFINED CPB_FILE_SRC) - message(FATAL_ERROR "FILE_SRC argument is missing") - endif() - - if (NOT DEFINED CPB_FILE_DST) - message(FATAL_ERROR "FILE_DST argument is missing") - endif() - - add_custom_command(OUTPUT "${CPB_FILE_DST}" - COMMENT "Compiling ${CPB_FILE_SRC} ( ${CPB_TARGET} ) in c_p_b function" - COMMAND ${es2panda_bin} "${CPB_FILE_SRC}" --output "${CPB_FILE_DST}" - DEPENDS "${CPB_FILE_SRC}" ${es2panda_target}) - - add_custom_target(${CPB_TARGET} - COMMENT "reached ${CPB_TARGET}" - DEPENDS "${CPB_FILE_DST}") -endfunction() - -ecma_compile_pre_build(TARGET disasm_binaries_ecma_lit - FILE_SRC ${DISASM_ECMA_TESTS_DIR}/lit.js - FILE_DST ${DISASM_BIN_DIR}/lit.bc) +set(DISASM_LIT_BINARY ${DISASM_BIN_DIR}/lit.bc) +set(DISASM_LIT_SRC ${DISASM_ECMA_TESTS_DIR}/lit.js) +compile_file_ecma(FILE ${DISASM_LIT_SRC} OUTPUT_FILE ${DISASM_LIT_BINARY} WORKING_DIR ${DISASM_BIN_DIR}) +add_custom_target(disasm_tests_binaries DEPENDS ${DISASM_LIT_BINARY}) +add_dependencies(disasm_tests_ecma disasm_tests_binaries) -add_dependencies(disasm_tests_ecma disasm_binaries_ecma_lit) +endif() diff --git a/tests/disassembler/disasm_test_lit_ecma.cpp.in b/tests/disassembler/disasm_test_lit_ecma.cpp.in index 5204c2ed4..6e6a51121 100644 --- a/tests/disassembler/disasm_test_lit_ecma.cpp.in +++ b/tests/disassembler/disasm_test_lit_ecma.cpp.in @@ -23,6 +23,17 @@ using namespace panda::disasm; +static inline std::string ExtractArrayBody(const std::string &text, const std::string &header) +{ + auto beg = text.find(header); + auto end = text.find('}', beg); + + assert(beg != std::string::npos); + assert(end != std::string::npos); + + return text.substr(beg + header.length(), end - (beg + header.length())); +} + TEST(instructions_test, test_lit_ecma) { Disassembler d {}; @@ -32,6 +43,23 @@ TEST(instructions_test, test_lit_ecma) d.Serialize(ss); EXPECT_TRUE(ss.str().find(".language ECMAScript") != std::string::npos); + + auto array_body = ExtractArrayBody(ss.str(), ".array array_0 {\n"); + + std::string line; + std::stringstream arr {array_body}; + std::getline(arr, line); + EXPECT_EQ("\tpanda.JSString \"1\"", line); + std::getline(arr, line); + EXPECT_EQ("\ti32 1", line); + std::getline(arr, line); + EXPECT_EQ("\tpanda.JSString \"2\"", line); + std::getline(arr, line); + EXPECT_EQ("\tf64 1.2", line); + std::getline(arr, line); + EXPECT_EQ("\tpanda.JSString \"43\"", line); + std::getline(arr, line); + EXPECT_EQ("\tpanda.JSString \"some val\"", line); } #undef DISASM_BIN_DIR diff --git a/tests/disassembler/sources/lit.js b/tests/disassembler/sources/lit.js index bfdccfb3d..679cb67d4 100644 --- a/tests/disassembler/sources/lit.js +++ b/tests/disassembler/sources/lit.js @@ -13,4 +13,4 @@ * limitations under the License. */ -print({"a": "b"}) +print({ 1: 1, "2": 1.2, 43: "some val" }) -- Gitee