|
3 | 3 | import com.cedricziel.idea.fluid.lang.psi.*; |
4 | 4 | import com.intellij.psi.PsiElement; |
5 | 5 | import com.intellij.psi.PsiFile; |
| 6 | +import com.intellij.psi.util.PsiTreeUtil; |
6 | 7 | import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; |
7 | 8 |
|
8 | 9 | public class ParserTest extends LightCodeInsightFixtureTestCase { |
@@ -43,12 +44,36 @@ public void testCanDetectBooleanLiterals() { |
43 | 44 | assertParentElementAtCaretMatchesType("{foo -> f:fo(foo: <caret>false)}", FluidBooleanLiteral.class); |
44 | 45 | } |
45 | 46 |
|
| 47 | + public void testCanParseArrays() { |
| 48 | + // Array Keys are discoverable |
| 49 | + assertParentElementAtCaretMatchesType("{fo<caret>o : bar}", FluidArrayKey.class); |
| 50 | + assertParentElementAtCaretMatchesType("{'fo<caret>o' : bar}", FluidArrayKey.class, 2); |
| 51 | + assertParentElementAtCaretMatchesType("{\"fo<caret>o\" : bar}", FluidArrayKey.class, 2); |
| 52 | + |
| 53 | + // keys can be string literals |
| 54 | + assertParentElementAtCaretMatchesType("{'fo<caret>o' : bar}", FluidStringLiteral.class); |
| 55 | + assertParentElementAtCaretMatchesType("{\"fo<caret>o\" : bar}", FluidStringLiteral.class); |
| 56 | + |
| 57 | + // array values can be literals or field chains |
| 58 | + assertParentElementAtCaretMatchesType("{foo : b<caret>ar}", FluidFieldChain.class); |
| 59 | + assertParentElementAtCaretMatchesType("{foo : b<caret>ar}", FluidArrayValue.class, 3); |
| 60 | + assertParentElementAtCaretMatchesType("{foo : 'b<caret>ar'}", FluidArrayValue.class, 2); |
| 61 | + assertParentElementAtCaretMatchesType("{foo : \"b<caret>ar\"}", FluidArrayValue.class, 2); |
| 62 | + } |
| 63 | + |
46 | 64 | private void assertParentElementAtCaretMatchesType(String content, Class expected) { |
| 65 | + assertParentElementAtCaretMatchesType(content, expected, 1); |
| 66 | + } |
| 67 | + |
| 68 | + private void assertParentElementAtCaretMatchesType(String content, Class expected, int levelsUp) { |
47 | 69 | PsiFile psiFile = myFixture.configureByText("foo.fluid", content); |
48 | 70 | int offset = myFixture.getEditor().getCaretModel().getOffset(); |
49 | 71 |
|
50 | 72 | PsiElement elementAt = psiFile.findElementAt(offset); |
| 73 | + for (int i = 0; i< levelsUp; i++) { |
| 74 | + elementAt = elementAt.getParent(); |
| 75 | + } |
51 | 76 |
|
52 | | - assertInstanceOf(elementAt.getParent(), expected); |
| 77 | + assertInstanceOf(elementAt, expected); |
53 | 78 | } |
54 | 79 | } |
0 commit comments