package com.gzzm.lobster.tool.builtin;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class CodeExecToolTest {

    @Test
    public void extractFirstErrorSkipsNodeVersionFooter() {
        String stderr = "/work/entry.js:1\n"
                + "throw new Error('ppt failed')\n"
                + "^\n"
                + "\n"
                + "Error: ppt failed\n"
                + "    at Object.<anonymous> (/work/entry.js:1:7)\n"
                + "    at Module._compile (node:internal/modules/cjs/loader:1521:14)\n"
                + "\n"
                + "Node.js v20.20.2\n";

        assertEquals("Error: ppt failed", CodeExecTool.extractFirstError(stderr));
    }

    @Test
    public void extractFirstErrorSkipsNodeErrorObjectTail() {
        String stderr = "node:internal/modules/cjs/loader:1210\n"
                + "  throw err;\n"
                + "  ^\n"
                + "\n"
                + "Error: Cannot find module 'react'\n"
                + "Require stack:\n"
                + "- /work/entry.js\n"
                + "    at Module._resolveFilename (node:internal/modules/cjs/loader:1207:15)\n"
                + "    at Object.<anonymous> (/work/entry.js:2:15) {\n"
                + "  code: 'MODULE_NOT_FOUND',\n"
                + "  requireStack: [ '/work/entry.js' ]\n"
                + "}\n"
                + "\n"
                + "Node.js v20.20.2\n";

        assertEquals("Error: Cannot find module 'react'", CodeExecTool.extractFirstError(stderr));
    }
}
