package net.sf.eclipsefp.haskell.ui.internal.editors.haskell.text; import junit.framework.TestCase; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.source.ICharacterPairMatcher; public class HaskellCharacterPairMatcher_Test extends TestCase { private ICharacterPairMatcher fMatcher; // interface methods of TestCase //////////////////////////////// @Override protected void setUp() throws Exception { fMatcher = new HaskellCharacterPairMatcher(); } // test cases ///////////// public void testMatchesGivenClosingParentheses() { assertMatches(6, 6, "qsort (a:as) = ", 12); assertAnchor(ICharacterPairMatcher.RIGHT); } public void testMatchesGivenOpeningParentheses() { assertMatches(6, 6, "qsort (a:as) = ", 7); assertAnchor(ICharacterPairMatcher.LEFT); } public void testMatchesGivenOpeningBrackets() { assertMatches(23, 3, "qsort (a:as) = left ++ [x] ++ right", 24); assertAnchor(ICharacterPairMatcher.LEFT); } public void testMatchesGivenClosingBraces() { assertMatches(23, 5, "module QuickSort where { \n}", 28); assertAnchor(ICharacterPairMatcher.RIGHT); } public void testMatchesNestedParentheses() { assertMatches(12, 13, "fat n = n * (fat (n - 1))", 13); assertMatches(12, 13, "fat n = n * (fat (n - 1))", 25); assertMatches(17, 7, "fat n = n * (fat (n - 1))", 18); assertMatches(17, 7, "fat n = n * (fat (n - 1))", 24); } public void testMatchesMixedPairs() { assertMatches(0, 16, "[(12), (13 + 1)]", 1); assertMatches(1, 4, "[(12), (13 + 1)]", 2); assertMatches(7, 8, "[(12), (13 + 1)]", 15); } public void testAcceptsOffsetZero() { IDocument doc = createDocument(""); assertNull(fMatcher.match(doc, 0)); } public void testDoNotMatchArbitrayChar() { IDocument doc = createDocument("qsort (a:as) = "); assertNull(fMatcher.match(doc, 4)); } // helping functions //////////////////// private void assertMatches(final int expectedOffset, final int expectedLength, final String contents, final int start) { IDocument doc = createDocument(contents); IRegion actual = fMatcher.match(doc, start); assertNotNull(actual); assertTrue("expected [" + expectedOffset + ", " + expectedLength + "] but was [" + actual.getOffset() + ", " + actual.getLength() + "]", expectedOffset == actual.getOffset() && expectedLength == actual.getLength()); } private void assertAnchor(final int expectedAnchor) { assertEquals(expectedAnchor, fMatcher.getAnchor()); } private IDocument createDocument(final String contents) { return new Document(contents); } }