/*=============================================================================# # Copyright (c) 2015-2016 David Green and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # David Green - initial API and implementation in Mylyn # Stephan Wahlbrink (WalWare.de) #=============================================================================*/ package de.walware.docmlet.wikitext.internal.commonmark.core; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import de.walware.jcommons.collections.ImCollections; import de.walware.jcommons.collections.ImList; import com.google.common.base.Strings; public class TextSegmentTest { @Rule public final ExpectedException thrown = ExpectedException.none(); public TextSegmentTest() { } @Test public void requiresLines() { thrown.expect(NullPointerException.class); new TextSegment((ImList<Line>) null); } @Test public void getText() { assertEquals("", new TextSegment(ImCollections.<Line>newList()).getText()); assertEquals("one\ntwo", new TextSegment(createLines("one\r\ntwo")).getText()); assertEquals("one\ntwo\nthree", new TextSegment(createLines("one\r\ntwo\nthree")).getText()); } @Test public void offsetOf() { TextSegment segment = new TextSegment(createLines("one\r\ntwo\r\nthree four")); String text = segment.getText(); assertEquals(0, segment.offsetOf(text.indexOf("one"))); assertEquals(5, segment.offsetOf(text.indexOf("two"))); assertEquals(3, segment.offsetOf(text.indexOf("two") - 1)); assertEquals(10, segment.offsetOf(text.indexOf("three"))); assertEquals(8, segment.offsetOf(text.indexOf("three") - 1)); assertEquals(16, segment.offsetOf(text.indexOf("four"))); } @Test public void toTextOffset() { TextSegment segment = new TextSegment(ImCollections.newList( new Line(1, 10, 0, "abc", "\n"), new Line(2, 15, 0, "def", "\n") )); assertEquals(0, segment.toTextOffset(10)); assertEquals(2, segment.toTextOffset(12)); assertEquals(4, segment.toTextOffset(15)); assertEquals(6, segment.toTextOffset(17)); try { segment.toTextOffset(19); fail("expected exception"); } catch (IllegalArgumentException e) { // expected } try { segment.toTextOffset(9); fail("expected exception"); } catch (IllegalArgumentException e) { // expected } } @Test public void getLineAtOffset() { ImList<Line> lines= ImCollections.newList( new Line(1, 10, 0, "abc", "\n"), new Line(2, 15, 0, "def", "\n") ); TextSegment segment = new TextSegment(lines); assertEquals(lines.get(0), segment.getLineAtOffset(0)); assertEquals(lines.get(0), segment.getLineAtOffset(3)); assertEquals(lines.get(1), segment.getLineAtOffset(4)); assertEquals(lines.get(1), segment.getLineAtOffset(6)); } @Test public void toStringTest() { assertEquals("TextSegment{text=one\\ntwo\\nthree four}", new TextSegment(createLines("one\ntwo\r\nthree four")).toString()); assertEquals("TextSegment{text=01234567890123456789...}", new TextSegment(createLines(Strings.repeat("0123456789", 10))).toString()); } private LineSequence createLines(String content) { return LineSequence.create(content); } }