@NonNull public CharSequence text() { // @since 2.0.0 redirects this call to `#spannableStringBuilder()` return spannableStringBuilder(); }
@Test public void spans_reversed() { // resulting SpannableStringBuilder should have spans reversed final Object[] spans = { 0, 1, 2 }; for (Object span : spans) { builder.append(span.toString(), span); } final SpannableStringBuilder spannableStringBuilder = builder.spannableStringBuilder(); final Object[] actual = spannableStringBuilder.getSpans(0, builder.length(), Object.class); for (int start = 0, length = spans.length, end = length - 1; start < length; start++, end--) { assertEquals(spans[start], actual[end]); } }
@Test public void append_spanned_reversed() { // #append is called with reversed spanned content -> spans should be added as-are final SpannableBuilder spannableBuilder = new SpannableBuilder(); for (int i = 0; i < 3; i++) { spannableBuilder.append(String.valueOf(i), i); } assertTrue(builder.getSpans(0, builder.length()).isEmpty()); builder.append(spannableBuilder.spannableStringBuilder()); final SpannableStringBuilder spannableStringBuilder = builder.spannableStringBuilder(); final Object[] spans = spannableStringBuilder.getSpans(0, spannableStringBuilder.length(), Object.class); assertEquals(3, spans.length); for (int i = 0, length = spans.length; i < length; i++) { // in the end order should be as we expect in order to properly render it // (no matter if reversed is used or not) assertEquals(length - 1 - i, spans[i]); } }
@Test public void append_spanned_normal() { // #append is called with regular Spanned content -> spans should be added in reverse final SpannableStringBuilder ssb = new SpannableStringBuilder(); for (int i = 0; i < 3; i++) { ssb.append(String.valueOf(i)); ssb.setSpan(i, i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } assertTrue(builder.getSpans(0, builder.length()).isEmpty()); builder.append(ssb); assertEquals("012", builder.toString()); // this one would return normal order as spans are reversed here // final List<SpannableBuilder.Span> spans = builder.getSpans(0, builder.length()); final SpannableStringBuilder spannableStringBuilder = builder.spannableStringBuilder(); final Object[] spans = spannableStringBuilder.getSpans(0, builder.length(), Object.class); assertEquals(3, spans.length); for (int i = 0, length = spans.length; i < length; i++) { assertEquals(length - 1 - i, spans[i]); } }
append(builder, "# Footer 1\n", new Object()); final Object[] spans = builder.spannableStringBuilder().getSpans(start, end, Object.class);
@Test public void test() { final TestData data = TestDataReader.readTest(file); final SpannableConfiguration configuration = configuration(data.config()); final SpannableBuilder builder = new SpannableBuilder(); final SpannableMarkdownVisitor visitor = new SpannableMarkdownVisitor(configuration, builder); final Node node = Markwon.createParser().parse(data.input()); node.accept(visitor); final SpannableStringBuilder stringBuilder = builder.spannableStringBuilder(); final TestValidator validator = TestValidator.create(file); int index = 0; for (TestNode testNode : data.output()) { index = validator.validate(stringBuilder, index, testNode); } // assert that the whole thing is processed assertEquals("`" + stringBuilder + "`", stringBuilder.length(), index); final Object[] spans = stringBuilder.getSpans(0, stringBuilder.length(), Object.class); final int length = spans != null ? spans.length : 0; assertEquals(Arrays.toString(spans), validator.processedSpanNodesCount(), length); }