Skip to content

Commit

Permalink
Merge pull request #143 from gered/null-function-arguments
Browse files Browse the repository at this point in the history
fix NullPointerException thrown when calling functions accepting varargs...
  • Loading branch information
jmelo-lyncode committed Jun 18, 2014
2 parents ee375bf + 610f291 commit c6d84ea
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.lyncode.jtwig.acceptance.functions;

import com.lyncode.jtwig.acceptance.AbstractJtwigTest;
import org.junit.Test;

import static com.lyncode.jtwig.util.SyntacticSugar.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;

public class NullVarArgsTest extends AbstractJtwigTest {
@Test
public void canExecuteWithNullVarArgsPassed() throws Exception {
when(jtwigRenders(template("{{ concat('foo', 'bar', null) }}")));
then(theRenderedTemplate(), is(equalTo("foobar")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ private boolean canResolveParameterByPosition(Class<?> type, GivenParameters tem
if (!resolvedParameter.hasValue()) return true;
else {
Object parameterObject = resolvedParameter.get();
if (type.isAssignableFrom(parameterObject.getClass()))
if (parameterObject != null && type.isAssignableFrom(parameterObject.getClass()))
return true;
return parameterConverter.canConvert(parameterObject, type);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.lyncode.jtwig.functions.parameters.GivenParameters;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;

Expand Down Expand Up @@ -50,6 +51,25 @@ public void shouldNotWorkWithWrongNumberOfArguments() throws Exception {
underTest.get("test", parameters("one", "two")).execute();
}

@Test
public void varArgsFunctionShouldWorkWithNullArg() throws Exception {
TestClass test = new TestClass();
underTest.store(test);
assertEquals(1, underTest.get("varargs_test", parameters(new Object[]{null})).execute());
assertEquals(2, underTest.get("varargs_test", parameters(new Object[]{"foo", null})).execute());
assertEquals(2, underTest.get("varargs_test", parameters(new Object[]{null, "bar"})).execute());
}

@Test
public void varArgsOverloadFunctionsShouldWorkWithNullArg() throws Exception {
TestClass test = new TestClass();
underTest.store(test);
assertEquals("strings: 2", underTest.get("varargs_overload", parameters(new Object[]{"foo", "bar"})).execute());
assertEquals("ints: 2", underTest.get("varargs_overload", parameters(new Object[]{1, 2})).execute());
assertEquals("strings: 2", underTest.get("varargs_overload", parameters(new Object[]{"foo", null})).execute());
assertEquals("ints: 2", underTest.get("varargs_overload", parameters(new Object[]{42, null})).execute());
}

private GivenParameters parameters(Object... parameters) {
return new GivenParameters().add(parameters);
}
Expand All @@ -63,5 +83,20 @@ public String test (@Parameter String input) {
public String test (@Parameter Object input) {
return input.toString();
}

@JtwigFunction(name = "varargs_test")
public int varArgsTest(@Parameter Object... args) {
return args.length;
}

@JtwigFunction(name = "varargs_overload")
public String varArgsOverloadWithInts(@Parameter Integer... args) {
return String.format("ints: %d", args.length);
}

@JtwigFunction(name = "varargs_overload")
public String varArgsOverloadWithStrings(@Parameter String... args) {
return String.format("strings: %d", args.length);
}
}
}

0 comments on commit c6d84ea

Please sign in to comment.