import { parseBrowserStack, getFunctionName } from '../stack-parsers'; describe('getFunctionName', () => { function aliceFunc() { const alice = 'Alice'; return alice; } const arrowFunc = () => { const arr = 'arr'; return arr; }; const claude = { writeCode: () => 'Hello world!', writeMoreCode() { return 'Hello another world!'; }, giveYouKeyboard() { return () => 'Hello world!'; }, controlHisFinger() { return this.writeCode; }, }; it('can correctly get function name', () => { function aliceFuncScope() { const alice = 'Alice'; return alice; } const arrowFuncScope = () => { const arr = 'arr'; return arr; }; const claudeScope = { writeCode: () => 'Hello world!', writeMoreCode() { return 'Hello another world!'; }, giveYouKeyboard() { return () => 'Hello world!'; }, controlHisFinger() { return this.writeCode; }, }; expect(getFunctionName(aliceFunc)).toBe('aliceFunc'); expect(getFunctionName(arrowFunc)).toBe('arrowFunc'); expect(getFunctionName(claude.writeCode)).toBe('writeCode'); expect(getFunctionName(claude.writeMoreCode)).toBe('writeMoreCode'); expect(getFunctionName(claude.giveYouKeyboard())).toBe(''); expect(getFunctionName(claude.controlHisFinger())).toBe('writeCode'); expect(getFunctionName(aliceFuncScope)).toBe('aliceFuncScope'); expect(getFunctionName(arrowFuncScope)).toBe('arrowFuncScope'); expect(getFunctionName(claudeScope.writeCode)).toBe('writeCode'); expect(getFunctionName(claudeScope.writeMoreCode)).toBe('writeMoreCode'); expect(getFunctionName(claudeScope.giveYouKeyboard())).toBe(''); expect(getFunctionName(claudeScope.controlHisFinger())).toBe('writeCode'); }); it('return DEFAULT_FUNCTION_NAME as expected when there is no function name', () => { expect(getFunctionName(undefined)).toBe(''); expect(getFunctionName(null)).toBe(''); expect(getFunctionName('asd')).toBe(''); expect(getFunctionName(233)).toBe(''); expect( getFunctionName({ wife: 'Alice', }), ).toBe(''); expect(getFunctionName(() => {})).toBe(''); }); }); describe('parseBrowserStack', () => { it('works ok', () => { expect( parseBrowserStack( '@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:165854\n@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:170252\nl@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:168668\no@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:167526\npromiseReactionJob@[native code]', ), ).toMatchSnapshot(); expect( parseBrowserStack( 'https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:165854\nhttps://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:170252\nl@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:168668\no@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:167526\npromiseReactionJob@[native code]', ), ).toMatchSnapshot(); expect( parseBrowserStack( "TypeError: Cannot read property 'parentNode' of null\nat zt (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-716ece68.e156974e.js:2:56052)\nat Proxy.trigger (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-716ece68.e156974e.js:2:60262)\nat Proxy.i.dispose (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-716ece68.e156974e.js:2:199662)\nat Proxy.initialize (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-53a4acda.eb64b7da.js:1:27108)\nat Proxy.handler (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-53a4acda.eb64b7da.js:1:25794)\nat To (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:139278)\nat Po (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:139394)\nat Array.v (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:143377)\nat Xo (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:141838)\nat U (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:118066)", ), ).toMatchSnapshot(); expect( parseBrowserStack( 'total_video_frames@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:165854\nhttps://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:170252\nl@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:168668\no@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:167526\npromiseReactionJob@[native code]', ), ).toMatchSnapshot(); expect( parseBrowserStack( '_needCleanupSourceBuffer@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:125271\nappendMediaSegment@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:123980\n@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:133485\n@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:4108\n@https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-99f3de3a.ac772521.js:2:117497\npromiseReactionJob@[native code]', ), ).toMatchSnapshot(); expect( parseBrowserStack( 'Error: currentPage not found\nat e.t.getPageInfo (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:195902)\nat e.t.getContext (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:650123)\nat e.t.report (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:650602)\nat e.t.reportCustom (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:650224)\nat n.value (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-common.e3c0d5d2.js:1:307683)\nat Proxy.handleClickTab (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-b1aea958.05b67fd6.js:1:2749)\nat onClick (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-b1aea958.05b67fd6.js:1:4440)\nat To (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:139278)\nat Po (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:139394)\nat HTMLDivElement.t (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:149757)', ), ).toMatchSnapshot(); expect( parseBrowserStack( `Error: ERR_ACTION_ACCESS_UNDEFINED: Are you trying to access this.someMutation() or this.someGetter inside an @Action?\nThat works only in dynamic modules.\nIf not dynamic use this.context.commit("mutationName", payload) and this.context.getters["getterName"]\nError: Could not perform action initTabs\n at t. (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:481346)\n at c (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:476833)\n at Object.throw (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:476137)\n at u (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:475767)\nTypeError: Cannot read property 'map' of undefined\n at Object. (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-common.e3c0d5d2.js:1:48111)\n at f (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:248556)\n at Generator._invoke (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:248344)\n at Generator.next (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:248981)\n at r (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:242112)\n at u (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:242315)\n at t. (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:481077)\n at c (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:476833)\n at Object.throw (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:476137)\n at u (https://res.wx.qq.com/t/wx_fed/finder/web/web-finder/res/js/chunk-vendors.5ad8c8ba.js:2:475767)`, ), ).toMatchSnapshot(); expect( parseBrowserStack( `TypeError: Cannot set properties of undefined (setting '_expanded')\n at a.onTableExpand (https://wego.weixin.oa.com/wego/wecubeweb/static/js/log-analysis.44f3aed4.js:8:26854)\n at Ct (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:16093)\n at a.n (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:19572)\n at Ct (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:16093)\n at a.e.$emit (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:34796)\n at a.toggleExpand (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:45:237470)\n at a.toggleExpand (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:45:255375)\n at Ct (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:16093)\n at HTMLDivElement.n (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:19572)\n at HTMLDivElement.o._wrapper (https://wego.weixin.oa.com/wego/wecubeweb/static/js/chunk-vendors.de75ec80.js:63:70963)\n@componentName: "component "\n@propsData: {"data":[{"biz_id":4994,"dw4_269_1":0,"dw4_269_2":0,"dw4_269_3":0,"dw4_269_4":0,"new_hi_dw4_269_1":0,"new_hi_dw4_269_2":0,"new_hi_dw4_269_3":0,"new_hi_dw4_269_4":291485571,"new_hit":0,"new_miss":0,"new_miss_dw4_269_1":0,"new_miss_dw4_269_2":0,"new_miss_dw4_269_3":0,"new_miss_dw4_269_4":0,"node_id":0,"report_host_role":0,"report_ip":"11.179.40.168","test_dw4_269_1":0,"test_dw4_269_2":0,"test_dw4_269_3":0,"test_dw4_269_4":291485571,"time":1646728750,"uin":759163821,"__index__":{"val":0}}],"columns":[{"type":"expand","width":30,"__id":"j1fUxR"},{"key":"time","title":"time","minWidth":170,"sortable":true,"sortType":"normal","__id":"UEw3lf"},{"key":"report_ip","title":"report_ip","minWidth":150,"sortable":false,"sortType":"normal","__id":"L0SL4V"},{"key":"dw4_269_1","title":"dw4_269_1","minWidth":125,"sortable":true,"sortType":"normal","__id":"xCXwMF"},{"key":"dw4_269_2","title":"dw4_269_2","minWidth":125,"sortable":true,"sortType":"normal","__id":"BasCTX"},{"key":"dw4_269_3","title":"dw4_269_3","minWidth":125,"sortable":true,"sortType":"normal","__id":"xdsrRL"},{"key":"dw4_269_4","title":"dw4_269_4","minWidth":125,"sortable":true,"sortType":"normal","__id":"9Ivezv"},{"key":"uin","title":"uin","minWidth":107,"sortable":true,"sortType":"normal","__id":"PH5AzL"},{"key":"node_id","title":"node_id","minWidth":103,"sortable":true,"sortType":"normal","__id":"foRR7c"},{"key":"test_dw4_269_1","title":"test_dw4_269_1","minWidth":155,"sortable":true,"sortType":"normal","__id":"lNCxkE"},{"key":"test_dw4_269_2","title":"test_dw4_269_2","minWidth":155,"sortable":true,"sortType":"normal","__id":"QhhWGm"},{"key":"test_dw4_269_3","title":"test_dw4_269_3","minWidth":155,"sortable":true,"sortType":"normal","__id":"DnAEg9"},{"key":"test_dw4_269_4","title":"test_dw4_269_4","minWidth":155,"sortable":true,"sortType":"normal","__id":"hPoMNx"},{"key":"new_hit","title":"new_hit","minWidth":101,"sortable":true,"sortType":"normal","__id":"unt72e"},{"key":"new_miss","title":"new_miss","minWidth":115,"sortable":true,"sortType":"normal","__id":"0IQrLP"},{"key":"new_hi_dw4_269_1","title":"new_hi_dw4_269_1","minWidth":176,"sortable":true,"sortType":"normal","__id":"PK5S5o"},{"key":"new_hi_dw4_269_2","title":"new_hi_dw4_269_2","minWidth":176,"sortable":true,"sortType":"normal","__id":"Q3cZfG"},{"key":"new_hi_dw4_269_3","title":"new_hi_dw4_269_3","minWidth":176,"sortable":true,"sortType":"normal","__id":"teRBOb"},{"key":"new_hi_dw4_269_4","title":"new_hi_dw4_269_4","minWidth":176,"sortable":true,"sortType":"normal","__id":"l6bOZR"},{"key":"new_miss_dw4_269_1","title":"new_miss_dw4_269_1","minWidth":194,"sortable":true,"sortType":"normal","__id":"ohwpYA"},{"key":"new_miss_dw4_269_2","title":"new_miss_dw4_269_2","minWidth":194,"sortable":true,"sortType":"normal","__id":"rNdFtN"},{"key":"new_miss_dw4_269_3","title":"new_miss_dw4_269_3","minWidth":194,"sortable":true,"sortType":"normal","__id":"fYLV7w"},{"key":"new_miss_dw4_269_4","title":"new_miss_dw4_269_4","minWidth":194,"sortable":true,"sortType":"normal","__id":"6QMUcW"}]}\n@lifecycleHook: "v-on handler"`, ), ).toMatchSnapshot(); expect( parseBrowserStack( 'eval code@\neval@[native code]\n./src/main.ts@https://channels.weixin.qq.com/js/index.js:2:29714\nQ@https://channels.weixin.qq.com/js/index.js:2:7566\nn@https://channels.weixin.qq.com/js/index.js:2:7788\n@https://channels.weixin.qq.com/js/index.js:2:46680\nQ@https://channels.weixin.qq.com/js/index.js:2:7566\nn@https://channels.weixin.qq.com/js/index.js:2:431\n@https://channels.weixin.qq.com/js/index.js:2:10003\nglobal code@https://channels.weixin.qq.com/js/index.js:2:10006', ), ).toMatchSnapshot(); }); });