MethodsTest.java

package com.thoughtworks.qdox;

import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.JavaParameter;
import com.thoughtworks.qdox.model.JavaSource;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.StringReader;

public class MethodsTest {

    private JavaProjectBuilder builder = new JavaProjectBuilder();

    @Test
    public void testSupportsJava5VarArgsParameter()
    {
        JavaMethod javaMethod = buildMethod( "void doStuff(AThing param1, BThing... param2);" );

        JavaParameter standardParam = javaMethod.getParameterByName( "param1" );
        JavaParameter varArgsParam = javaMethod.getParameterByName( "param2" );

        Assertions.assertFalse(standardParam.isVarArgs(), "param1 should NOT be var args");
        Assertions.assertTrue(varArgsParam.isVarArgs(), "param2 should be var args");
    }

    @Test
    public void testVarArgsParametersAreAlsoArrays()
    {
        JavaMethod javaMethod = buildMethod( "void doStuff(AThing param1, BThing[] param2, CThing... param3);" );

        JavaClass standardType = javaMethod.getParameterByName( "param1" ).getJavaClass();
        JavaClass arrayType = javaMethod.getParameterByName( "param2" ).getJavaClass();
        JavaClass varArgsType = javaMethod.getParameterByName( "param3" ).getJavaClass();

        Assertions.assertFalse(standardType.isArray(), "param1 should NOT be array");
        Assertions.assertTrue(arrayType.isArray(), "param2 should be array");
        Assertions.assertFalse(varArgsType.isArray(), "param3 should NOT be array");
    }

    @Test
    public void testSupportDefaultMethods()
    {
        JavaMethod javaMethod = buildMethod( "default String additionalStuff() { return \"\"; }" );
        Assertions.assertTrue(javaMethod.isDefault());
    }

    @Test
    public void testVarArgsIncludedInToString()
    {
        JavaMethod javaMethod = buildMethod( "void doStuff(AThing param1, BThing... param2);" );

        Assertions.assertEquals("void doStuff(AThing param1, BThing... param2);\n", javaMethod.getCodeBlock());
    }

    private JavaMethod buildMethod( String methodSource )
    {
        String source = "interface Something { " + methodSource + " }";
        JavaSource javaSource = builder.addSource( new StringReader( source ) );
        JavaClass javaClass = javaSource.getClasses().get( 0 );
        JavaMethod javaMethod = javaClass.getMethods().get( 0 );
        return javaMethod;
    }
}