<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      https://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">

  <import file="../../../antunit-base.xml" />

  <description>
    In which we test interesting aspects of scripting.
    The targeted language is javascript; this lets us run without
    additions on Java6+.
  </description>

  <condition property="prereqs-ok">
    <and>
      <!-- Starting Java 15, there's no "javascript" script engine (not even nashorn) bundled in JRE -->
      <javaversion atmost="14"/>
      <or>
        <and>
          <available classname="org.apache.bsf.BSFManager" />
          <available classname="org.apache.bsf.engines.javascript.JavaScriptEngine" />
        </and>
        <available classname="javax.script.ScriptEngineManager" />
      </or>
    </and>
  </condition>

  <!-- auto doesn't verify the language is supported and selects BSF
       even if the JavaScriptEngine is not there -->
  <condition property="script.manager" value="javax">
    <and>
      <not>
        <available classname="org.apache.bsf.engines.javascript.JavaScriptEngine" />
      </not>
      <isset property="prereqs-ok"/>
    </and>
  </condition>
  <property name="script.manager" value="auto" />

  <string id="script.code">
    self.log("Ant version =${ant.version}");
    project.setNewProperty("property","live");
  </string>

  <presetdef name="js">
    <scriptdef language="javascript" name="scripttest" manager="${script.manager}">
      <!-- optional property attribute-->
      <attribute name="property" />
    </scriptdef>
  </presetdef>

  <property name="prop" value='self.log("Ant version =${ant.version}");project.setNewProperty("property","live");' />

  <presetdef name="assertPropSet">
    <au:assertPropertyEquals name="property" value="live" />
  </presetdef>


  <!--purely to test that everything works -->
  <target name="testInline" if="prereqs-ok">
    <js>self.log("Hello");</js>
    <scripttest />
  </target>

  <target name="testStringResource" if="prereqs-ok">
    <js>
      <string value='self.log("Ant version =${ant.version}");' />
    </js>
    <scripttest />
  </target>

  <target name="testStringResourceRef" if="prereqs-ok">
    <js>
      <string refid="script.code" />
    </js>
    <scripttest />
    <assertPropSet />
  </target>

  <target name="testStringResourceInline" if="prereqs-ok">
    <js>
      <string>
        self.log("Ant version =${ant.version}");
        project.setNewProperty("property","live");
      </string>
    </js>
    <scripttest />
    <assertPropSet />
  </target>

  <target name="testPropertyResource" if="prereqs-ok">
    <js>
      <propertyresource name="prop" />
    </js>
    <scripttest />
    <assertPropSet />
  </target>

  <target name="testMixedResources" if="prereqs-ok">
    <js>
      <string refid="script.code" />
      <propertyresource name="prop" />
      <string>
        project.setNewProperty("property2","live");
      </string>
    </js>
    <scripttest />
    <assertPropSet name="property2" />
  </target>

  <target name="testExceptionNesting" description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47509" if="prereqs-ok">
    <scriptdef name="quickfail" language="javascript">
      <![CDATA[
            self.fail("I failed!");
      ]]>
    </scriptdef>
    <au:expectfailure message="I failed!">
      <quickfail />
    </au:expectfailure>
  </target>
</project>
