/*
 * 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
 *
 * http://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.
 */

package org.apache.jmeter.functions.gui

import org.apache.jmeter.config.Argument
import org.apache.jmeter.config.Arguments

import spock.lang.IgnoreIf
import spock.lang.Specification
import spock.lang.Unroll

@Unroll
class FunctionHelperSpec extends Specification {

    @IgnoreIf({ System.properties['java.awt.headless'] as boolean })
    def "construct correct call string for parameters #parameters"() {
        setup:
            def functionHelper = new FunctionHelper()
        when:
            def args = new Arguments()
            args.setArguments(parameters.collect { new Argument("dummy${it}", it) })
        then:
            functionHelper.buildFunctionCallString(functionName, args).toString() == combined
        where:
            functionName | parameters                         | combined
            "fname"      | []                                 | "\${fname}"
            "fname"      | ["a"]                              | "\${fname(a)}"
            "fname"      | ["a,b"]                            | "\${fname(a\\,b)}"
            "fname"      | ["a,b,c"]                          | "\${fname(a\\,b\\,c)}"
            "fname"      | ["a", "b"]                         | "\${fname(a,b)}"
            "fname"      | ["a,b", "c"]                       | "\${fname(a\\,b,c)}"
            "fname"      | ["\\\${f(a,b)}"]                   | "\${fname(\\\${f(a\\,b)})}"
            "fname"      | ["\${f(a,b)},c,\${g(d,e)}", "h"]   | "\${fname(\${f(a,b)}\\,c\\,\${g(d,e)},h)}"
            "fname"      | ["a,\${f(b,\${g(c,d)},e)},f", "h"] | "\${fname(a\\,\${f(b,\${g(c,d)},e)}\\,f,h)}"
    }
}
