Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-30301

JenkinsRule.WebClient.setThrowExceptionOnScriptError(false) generates a Javascript exception itself

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • core
    • None
    • Jenkins version: 1.580.3
      OS: Windows 7 Professional
      Java version: 1.8

       wrote an integration test for my post-build action aka Publisher following the guidelines in https://wiki.jenkins-ci.org/display/JENKINS/Unit+Test to test configuration round-trip.

      To prevent test from failing with Javascript scripts I set JenkinsRule.WebClient.setThrowExceptionOnScriptError(false). However, after this I got the following in my test output console:

      Sep 04, 2015 12:01:13 PM com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine handleJavaScriptException
      INFO: Caught script exception
      ======= EXCEPTION START ========
      EcmaError: lineNumber=[26] column=[0] lineSource=[          if (inputs[i].type == "checkbox" || inputs[i].type == "radio") {] name=[TypeError] sourceName=[http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js] message=[TypeError: Cannot call method "contains" of undefined (http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js#26)]
      com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "contains" of undefined (http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js#26)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:528)
      	at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:529)
      	at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:536)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:458)
      	at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:918)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:53)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:76)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl$ExecutingJobTracker.run(JavaScriptJobManagerImpl.java:98)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot call method "contains" of undefined (http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js#26)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3652)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3630)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3658)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3677)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3696)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2223)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2216)
      	at script.isModifyingButton(http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js:26)
      	at script.(http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js:57)
      	at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:879)
      	at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
      	at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:427)
      	at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:263)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3058)
      	at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:486)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$6.doRun(JavaScriptEngine.java:451)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:522)
      	... 14 more
      Enclosed exception: 
      net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot call method "contains" of undefined (http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js#26)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3652)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3630)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3658)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3677)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3696)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2223)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2216)
      	at script.isModifyingButton(http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js:26)
      	at script.(http://localhost:54301/jenkins/adjuncts/2bdd1129/lib/form/confirm.js:57)
      	at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:879)
      	at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
      	at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:427)
      	at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:263)
      	at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3058)
      	at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:486)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$6.doRun(JavaScriptEngine.java:451)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:522)
      	at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:529)
      	at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:536)
      	at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:458)
      	at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:918)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:53)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:76)
      	at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl$ExecutingJobTracker.run(JavaScriptJobManagerImpl.java:98)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at java.lang.Thread.run(Thread.java:745)
      == CALLING JAVASCRIPT ==
      
        function () {
            var configForm = document.getElementsByName("config");
            if (configForm.length > 0) {
                configForm = configForm[0];
            } else {
                configForm = document.getElementsByName("viewConfig")[0];
            }
            YAHOO.util.Event.on($(configForm), "submit", clearConfirm, this);
            var buttons = configForm.getElementsByTagName("button");
            var name;
            for (var i = 0; i < buttons.length; i++) {
                name = buttons[i].parentNode.parentNode.getAttribute("name");
                if (name == "Submit" || name == "Apply" || name == "OK") {
                    $(buttons[i]).on("click", function () {
                        needToConfirm = false;
                    });
                } else {
                    if (isModifyingButton(buttons[i])) {
                        $(buttons[i]).on("click", confirm);
                    }
                }
            }
            var inputs = configForm.getElementsByTagName("input");
            for (var i = 0; i < inputs.length; i++) {
                if (inputs[i].type == "checkbox" || inputs[i].type == "radio") {
                    $(inputs[i]).on("click", confirm);
                } else {
                    $(inputs[i]).on("input", confirm);
                }
            }
            inputs = configForm.getElementsByTagName("select");
            for (var i = 0; i < inputs.length; i++) {
                $(inputs[i]).on("change", confirm);
            }
            inputs = configForm.getElementsByTagName("textarea");
            for (var i = 0; i < inputs.length; i++) {
                $(inputs[i]).on("input", confirm);
            }
        }
      ======= EXCEPTION END ========
      

      This doesn't affect the test result, but is weird.
      With the mentioned line removed exception disappears.

            Unassigned Unassigned
            kshepitko Kirill Shepitko
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: