Search in sources :

Example 1 with Function

use of org.apache.jmeter.functions.Function in project jmeter by apache.

the class FunctionHelper method stateChanged.

@Override
public void stateChanged(ChangeEvent event) {
    try {
        Arguments args = new Arguments();
        Function function = CompoundVariable.getFunctionClass(functionList.getText()).newInstance();
        List<String> argumentDesc = function.getArgumentDesc();
        for (String help : argumentDesc) {
            //$NON-NLS-1$
            args.addArgument(help, "");
        }
        parameterPanel.configure(args);
        parameterPanel.revalidate();
        getContentPane().remove(parameterPanel);
        this.pack();
        getContentPane().add(parameterPanel, BorderLayout.CENTER);
        this.pack();
        this.validate();
        resultTextArea.setText("");
        this.repaint();
    } catch (InstantiationException | IllegalAccessException e) {
    }
}
Also used : Function(org.apache.jmeter.functions.Function) Arguments(org.apache.jmeter.config.Arguments)

Example 2 with Function

use of org.apache.jmeter.functions.Function in project jmeter by apache.

the class FunctionParser method makeFunction.

/**
     * Compile a string into a function or SimpleVariable.
     *
     * Called by {@link #compileString(String)} when that has detected "${".
     *
     * Calls {@link CompoundVariable#getNamedFunction(String)} if it detects:
     * '(' - start of parameter list
     * '}' - end of function call
     *
     * @param reader points to input after the "${"
     * @return the function or variable object (or a String)
     * @throws InvalidVariableException when evaluation of variables fail
     */
Object makeFunction(StringReader reader) throws InvalidVariableException {
    char[] current = new char[1];
    // TODO - why use space?
    char previous = ' ';
    StringBuilder buffer = new StringBuilder();
    Object function;
    try {
        while (reader.read(current) == 1) {
            if (current[0] == '\\') {
                if (reader.read(current) == 0) {
                    break;
                }
                previous = ' ';
                buffer.append(current[0]);
            } else if (current[0] == '(' && previous != ' ') {
                String funcName = buffer.toString();
                function = CompoundVariable.getNamedFunction(funcName);
                if (function instanceof Function) {
                    ((Function) function).setParameters(parseParams(reader));
                    if (reader.read(current) == 0 || current[0] != '}') {
                        // set to start of string
                        reader.reset();
                        char[] cb = new char[100];
                        int nbRead = reader.read(cb);
                        throw new InvalidVariableException("Expected } after " + funcName + " function call in " + new String(cb, 0, nbRead));
                    }
                    if (function instanceof TestStateListener) {
                        StandardJMeterEngine.register((TestStateListener) function);
                    }
                    return function;
                } else {
                    // Function does not exist, so treat as per missing variable
                    buffer.append(current[0]);
                }
            } else if (current[0] == '}') {
                // variable, or function with no parameter list
                function = CompoundVariable.getNamedFunction(buffer.toString());
                if (function instanceof Function) {
                    // ensure that setParameters() is called.
                    ((Function) function).setParameters(new LinkedList<CompoundVariable>());
                }
                buffer.setLength(0);
                return function;
            } else {
                buffer.append(current[0]);
                previous = current[0];
            }
        }
    } catch (IOException e) {
        log.error("Error parsing function: {}", buffer, e);
        return null;
    }
    log.warn("Probably an invalid function string: {}", buffer);
    return buffer.toString();
}
Also used : Function(org.apache.jmeter.functions.Function) InvalidVariableException(org.apache.jmeter.functions.InvalidVariableException) TestStateListener(org.apache.jmeter.testelement.TestStateListener) IOException(java.io.IOException)

Aggregations

Function (org.apache.jmeter.functions.Function)2 IOException (java.io.IOException)1 Arguments (org.apache.jmeter.config.Arguments)1 InvalidVariableException (org.apache.jmeter.functions.InvalidVariableException)1 TestStateListener (org.apache.jmeter.testelement.TestStateListener)1