Skip to content

Commit 331812e

Browse files
committed
Add tests & Fix NullPointerException
Fix NullPointerException when no arguments are provided to a Function or a Term.
1 parent d07742d commit 331812e

File tree

11 files changed

+255
-153
lines changed

11 files changed

+255
-153
lines changed

src/main/java/net/quickwrite/fluent4j/ast/placeable/base/FluentFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public FluentFunction(final String functionName, final FluentArgs arguments) {
2727
throw new FluentParseException("The callee has to be an upper-case identifier or a term");
2828
}
2929

30-
this.arguments = arguments;
30+
this.arguments = arguments != null ? arguments : FluentArgs.EMPTY_ARGS;
3131
}
3232

3333
/**
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package net.quickwrite.fluent4j;
2+
3+
import net.quickwrite.fluent4j.builder.FluentArgsBuilder;
4+
import net.quickwrite.fluent4j.util.bundle.FluentBundle;
5+
import org.junit.Before;
6+
import org.junit.Test;
7+
import org.junit.jupiter.api.Assertions;
8+
9+
import java.io.IOException;
10+
11+
public class TestReferenceExpressions {
12+
private FluentBundle bundle;
13+
14+
@Before
15+
public void setUp() throws IOException {
16+
this.bundle = GetFileHelper.getFluentBundle("reference_expressions.ftl");
17+
}
18+
19+
@Test
20+
public void testIfExceptions() {
21+
Assertions.assertTrue(bundle.hasExceptions());
22+
}
23+
24+
@Test
25+
public void testMessageReferencePlaceable() {
26+
Assertions.assertEquals("{msg}", GetFileHelper.getMessage(bundle, "message-reference-placeable"));
27+
}
28+
29+
@Test
30+
public void testTermReferencePlaceable() {
31+
Assertions.assertEquals("{-term}", GetFileHelper.getMessage(bundle, "term-reference-placeable"));
32+
}
33+
34+
@Test
35+
public void testVariableReferencePlaceable() {
36+
Assertions.assertEquals("{$var}", GetFileHelper.getMessage(bundle, "variable-reference-placeable"));
37+
}
38+
39+
@Test
40+
public void testVariableReferenceSelector() {
41+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "variable-reference-selector"));
42+
}
43+
44+
@Test
45+
public void testValidMessageReferencePlaceable() {
46+
Assertions.assertEquals("Valid Message", GetFileHelper.getMessage(bundle, "valid-message-reference-placeable"));
47+
}
48+
49+
@Test
50+
public void testValidTermReferencePlaceable() {
51+
Assertions.assertEquals("Valid Term", GetFileHelper.getMessage(bundle, "valid-term-reference-placeable"));
52+
}
53+
54+
@Test
55+
public void testValidVariableReferencePlaceable() {
56+
Assertions.assertEquals("Value",
57+
bundle.getMessage("valid-variable-reference-placeable",
58+
new FluentArgsBuilder().set("var", "Value").build()
59+
).orElseThrow()
60+
);
61+
}
62+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package net.quickwrite.fluent4j;
2+
3+
import net.quickwrite.fluent4j.util.bundle.FluentBundle;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import org.junit.jupiter.api.Assertions;
7+
8+
import java.io.IOException;
9+
10+
public class TestSelectExpressions {
11+
private FluentBundle bundle;
12+
13+
@Before
14+
public void setUp() throws IOException {
15+
this.bundle = GetFileHelper.getFluentBundle("select_expressions.ftl");
16+
}
17+
18+
@Test
19+
public void testIfExceptions() {
20+
Assertions.assertTrue(bundle.hasExceptions());
21+
}
22+
23+
@Test
24+
public void testNewMessages() {
25+
Assertions.assertEquals("Other", GetFileHelper.getMessage(bundle, "new-messages"));
26+
}
27+
28+
@Test
29+
public void testValidSelectorTermAttribute() {
30+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "valid-selector-term-attribute"));
31+
}
32+
33+
@Test
34+
public void testEmptyVariant() {
35+
Assertions.assertEquals("", GetFileHelper.getMessage(bundle, "empty-variant"));
36+
}
37+
38+
@Test
39+
public void testReducedWhitespace() {
40+
Assertions.assertEquals("", GetFileHelper.getMessage(bundle, "reduced-whitespace"));
41+
}
42+
43+
@Test
44+
public void testNestedSelect() {
45+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "nested-select"));
46+
}
47+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package net.quickwrite.fluent4j;
2+
3+
import net.quickwrite.fluent4j.util.bundle.FluentBundle;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import org.junit.jupiter.api.Assertions;
7+
8+
import java.io.IOException;
9+
10+
public class TestSparseEntries {
11+
private FluentBundle bundle;
12+
13+
@Before
14+
public void setUp() throws IOException {
15+
this.bundle = GetFileHelper.getFluentBundle("sparse_entries.ftl");
16+
}
17+
18+
@Test
19+
public void testIfExceptions() {
20+
Assertions.assertFalse(bundle.hasExceptions());
21+
}
22+
23+
@Test
24+
public void testKey01() {
25+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key01"));
26+
}
27+
28+
@Test
29+
public void testKey02() {
30+
Assertions.assertEquals("", GetFileHelper.getMessage(bundle, "key02"));
31+
}
32+
33+
@Test
34+
public void testKey03() {
35+
Assertions.assertEquals("""
36+
Value
37+
Continued
38+
39+
40+
Over multiple
41+
Lines""",
42+
GetFileHelper.getMessage(bundle, "key03")
43+
);
44+
}
45+
46+
@Test
47+
public void testKey05() {
48+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key05"));
49+
}
50+
51+
@Test
52+
public void testKey06() {
53+
Assertions.assertEquals("One", GetFileHelper.getMessage(bundle, "key06"));
54+
}
55+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package net.quickwrite.fluent4j;
2+
3+
import net.quickwrite.fluent4j.util.bundle.FluentBundle;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import org.junit.jupiter.api.Assertions;
7+
8+
import java.io.IOException;
9+
10+
public class TestTab {
11+
private FluentBundle bundle;
12+
13+
@Before
14+
public void setUp() throws IOException {
15+
this.bundle = GetFileHelper.getFluentBundle("tab.ftl");
16+
}
17+
18+
@Test
19+
public void testIfExceptions() {
20+
Assertions.assertTrue(bundle.hasExceptions());
21+
}
22+
23+
@Test
24+
public void testKey01() {
25+
Assertions.assertEquals("\tValue 01", GetFileHelper.getMessage(bundle, "key01"));
26+
}
27+
28+
@Test
29+
public void testKey03() {
30+
Assertions.assertEquals("", GetFileHelper.getMessage(bundle, "key03"));
31+
}
32+
33+
@Test
34+
public void testKey04() {
35+
Assertions.assertEquals("This line is indented by 4 spaces,", GetFileHelper.getMessage(bundle, "key04"));
36+
}
37+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package net.quickwrite.fluent4j;
2+
3+
import net.quickwrite.fluent4j.util.bundle.FluentBundle;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import org.junit.jupiter.api.Assertions;
7+
8+
import java.io.IOException;
9+
10+
public class TestTermParameters {
11+
private FluentBundle bundle;
12+
13+
@Before
14+
public void setUp() throws IOException {
15+
this.bundle = GetFileHelper.getFluentBundle("term_parameters.ftl");
16+
}
17+
18+
@Test
19+
public void testIfExceptions() {
20+
Assertions.assertFalse(bundle.hasExceptions());
21+
}
22+
23+
@Test
24+
public void testKey01() {
25+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key01"));
26+
}
27+
28+
@Test
29+
public void testKey02() {
30+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key02"));
31+
}
32+
33+
@Test
34+
public void testKey03() {
35+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key03"));
36+
}
37+
38+
@Test
39+
public void testKey04() {
40+
Assertions.assertEquals("Value", GetFileHelper.getMessage(bundle, "key04"));
41+
}
42+
}

src/test/resources/input/placeables.ftl

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/test/resources/input/reference_expressions.ftl

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ message-reference-placeable = {msg}
44
term-reference-placeable = {-term}
55
variable-reference-placeable = {$var}
66
7-
# Function references are invalid outside of call expressions.
8-
# This parses as a valid MessageReference.
9-
function-reference-placeable = {FUN}
10-
11-
127
## Reference expressions in selectors.
138

149
variable-reference-selector = {$var ->
@@ -23,8 +18,11 @@ message-reference-selector = {msg ->
2318
term-reference-selector = {-term ->
2419
*[key] Value
2520
}
26-
# ERROR Function references are invalid outside of call expressions, and this
27-
# parses as a MessageReference which isn't a valid selector.
28-
function-expression-selector = {FUN ->
29-
*[key] Value
30-
}
21+
22+
## Check if valid references work
23+
valid-message-reference-placeable = {valid-msg}
24+
valid-term-reference-placeable = {-valid-term}
25+
valid-variable-reference-placeable = {$var}
26+
27+
valid-msg = Valid Message
28+
-valid-term = Valid Term

src/test/resources/input/select_expressions.ftl

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,19 @@ new-messages =
66
77
valid-selector-term-attribute =
88
{ -term.case ->
9-
*[key] value
9+
*[key] Value
1010
}
1111
1212
# ERROR Term values are not valid selectors
1313
invalid-selector-term-value =
1414
{ -term ->
15-
*[key] value
15+
*[key] Value
1616
}
1717
1818
# ERROR CallExpressions on Terms are similar to TermReferences
1919
invalid-selector-term-variant =
2020
{ -term(case: "nominative") ->
21-
*[key] value
22-
}
23-
24-
# ERROR Nested expressions are not valid selectors
25-
invalid-selector-nested-expression =
26-
{ { 3 } ->
27-
*[key] default
28-
}
29-
30-
# ERROR Select expressions are not valid selectors
31-
invalid-selector-select-expression =
32-
{ { $sel ->
33-
*[key] value
34-
} ->
35-
*[key] default
21+
*[key] Value
3622
}
3723
3824
empty-variant =

0 commit comments

Comments
 (0)