diff --git a/js_environment/frameworks/js_environment/src/source_map.cpp b/js_environment/frameworks/js_environment/src/source_map.cpp index 9b8e232f79..ddcae43c4a 100644 --- a/js_environment/frameworks/js_environment/src/source_map.cpp +++ b/js_environment/frameworks/js_environment/src/source_map.cpp @@ -278,7 +278,7 @@ MappingInfo SourceMap::Find(int32_t row, int32_t col, const SourceMapData& targe size_t realSourceIndex = std::min(REAL_SOURCE_INDEX, targetMap.sources_.size()); std::string sources = targetMap.sources_.substr(realSourceIndex, targetMap.sources_.size() - realSourceIndex - 1); - if (key.rfind(".js") != std::string::npos) { + if (key.rfind(".js") == key.size() - INDEX_THREE) { return MappingInfo { .row = row, .col = col, @@ -305,7 +305,9 @@ MappingInfo SourceMap::Find(int32_t row, int32_t col, const SourceMapData& targe } } - if (targetMap.afterPos_[res].afterRow != row && targetMap.afterPos_[res + 1].afterRow == row) { + if (res + 1 < static_cast(targetMap.afterPos_.size()) && + targetMap.afterPos_[res].afterRow != row && + targetMap.afterPos_[res + 1].afterRow == row) { res++; } diff --git a/js_environment/test/unittest/source_map_test/source_map_test.cpp b/js_environment/test/unittest/source_map_test/source_map_test.cpp index 2082b31d17..e62828c145 100644 --- a/js_environment/test/unittest/source_map_test/source_map_test.cpp +++ b/js_environment/test/unittest/source_map_test/source_map_test.cpp @@ -284,7 +284,7 @@ HWTEST_F(SourceMapTest, JsEnv_SourceMap_1200, Function | MediumTest | Level1) "IADnB;;uGAEoC,SAAS;uGACR,UAAU,CAAC,KAAK;;KALpD;;wGAImC,SAAS;wGACR,UAAU,CAAC,KAAK;;IADnD,CAAC,KAAK;IAxCR," "QAAA,CAwCS,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,KAAK;IAzCR,QAAA,CAyCS,aAAa,EAAE,UAAU,CAAmB;IAEnD;;YACE,MAAM;;;" "YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C," - "IAAI;QAFN,MAAM;KAIP\"\n" + "IAAI;QAFN,MAAM;KAIP\",\n" " \"entry-package-info\": \"entry|1.0.0\n" " }\n" "}"; @@ -317,6 +317,48 @@ HWTEST_F(SourceMapTest, JsEnv_SourceMap_1300, Function | MediumTest | Level1) GTEST_LOG_(INFO) << "JsEnv_SourceMap_1300 end"; } +/** + * @tc.number: JsEnv_SourceMap_1400 + * @tc.name: Find + * @tc.desc: Verifying Find succeeded. + */ +HWTEST_F(SourceMapTest, JsEnv_SourceMap_1400, Function | MediumTest | Level1) +{ + GTEST_LOG_(INFO) << "JsEnv_SourceMap_1400 start"; + std::string sourceMaps = "{\n" + " \"entry|entry|1.0.0|src/main/ets/pages/Index.ts\": {\n" + " \"version\": 3,\n" + " \"file\": \"Index.ets\",\n" + " \"sources\": [\n" + " \"entry/src/main/ets/pages/Index.ets\"\n" + " ],\n" + " \"names\": [],\n" + " \"mappings\": \";;;;IAuBW,aAAa,GAAE,SAAS;IACP,aAAa,GAAE,UAAU;;AAxBrD,MAAM,MAAM,UAAU;" + "IACpB,KAAK,IAAI;CACV;MAIM,uBAAuB;IAF9B;;6BAIoC,SAAS;uGACF,UAAU,CAAC,KAAK;;KAP1D;;6BAMmC," + "SAAS;wGACF,UAAU,CAAC,KAAK;;IADzD,CAAC,KAAK;IAAC,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,IAAI;IAAC," + "CAAC,KAAK;IAAC,aAAa,EAAE,UAAU,CAAmB;IAEzD;;YACE,MAAM;;;;;4CAEJ,oBAAoB,OAAC;wBACnB,aAAa,EAAE," + "IAAI,CAAC,aAAa;qBAClC;;;;4BADC,aAAa,EAAE,IAAI,CAAC,aAAa;;;;;;;;;;QAHrC,MAAM;KAMP;;;;;;;;;;;;;;;;" + "AAGH,MAAM,OAAQ,oBAAoB;IADlC;;;;;4DAGsC,SAAS;;sDACpC,eAAe;;;KALzB;;;;;;;;;;;;;;;;;;IAIC,kDAAwB,SAAS," + "EAAY;QAApC,aAAa;;;QAAb,aAAa,WAAE,SAAS;;;IACjC,oDAAyC,UAAU,EAAA;QAAzB,aAAa;;;QAAb,aAAa,WAAE,UAAU;;;" + "IAEnD;;YACE,MAAM,QAAC,EAAC,KAAK,EAAE,CAAC,EAAC;;;YACf,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;" + ";YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;;;4CACJ,YAAY,OAAC;wBACX,aAAa,EAAE,IAAI,CAAC,aAAa" + ";wBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;qBAClC;;;;4BAFC,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,aAAa,EAAE,IAAI,CAAC,aAAa" + ";;;;;;;wBADjC,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;;;;;QALrC,MAAM;KAQP;;;;;MAII,YAAY;" + "IADnB;;uGAEoC,SAAS;uGACR,UAAU,CAAC,KAAK;;KALpD;;wGAImC,SAAS;wGACR,UAAU,CAAC,KAAK;;IADnD,CAAC,KAAK;IAxCR," + "QAAA,CAwCS,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,KAAK;IAzCR,QAAA,CAyCS,aAAa,EAAE,UAAU,CAAmB;IAEnD;;YACE,MAAM;;;" + "YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C," + "IAAI;QAFN,MAAM;KAIP\",\n" + " \"entry-package-info\": \"entry|1.0.0\n" + " }\n" + "}"; + auto modSourceMap = std::make_shared(); + modSourceMap->SplitSourceMap(sourceMaps); + std::string stackStr = "at ChildComponenttest48 (entry|entry|1.0.0|src/main/ets/pages/Index.ts:179:5)"; + std::string stack = modSourceMap->TranslateBySourceMap(stackStr); + EXPECT_STREQ(stack.c_str(), "at ChildComponenttest48 entry (entry/src/main/ets/pages/Index.ets:45:5)\n"); + GTEST_LOG_(INFO) << "JsEnv_SourceMap_1400 end"; +} + /** * @tc.number: JsEnv_SourceMap_1500 * @tc.name: GetPosInfo