Skip to content

Commit 97eeb6a

Browse files
committed
Tests for separate blocks, implement tight/loose
1 parent 03d2843 commit 97eeb6a

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

commonmark/src/main/java/org/commonmark/renderer/text/CoreTextContentNodeRenderer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,10 @@ public void visit(BlockQuote blockQuote) {
7474

7575
@Override
7676
public void visit(BulletList bulletList) {
77-
// TODO: isTight()
77+
textContent.pushTight(bulletList.isTight());
7878
listHolder = new BulletListHolder(listHolder, bulletList);
7979
visitChildren(bulletList);
80+
textContent.popTight();
8081
textContent.block();
8182
listHolder = listHolder.getParent();
8283
}
@@ -178,9 +179,10 @@ public void visit(ListItem listItem) {
178179

179180
@Override
180181
public void visit(OrderedList orderedList) {
181-
// TODO: isTight()
182+
textContent.pushTight(orderedList.isTight());
182183
listHolder = new OrderedListHolder(listHolder, orderedList);
183184
visitChildren(orderedList);
185+
textContent.popTight();
184186
textContent.block();
185187
listHolder = listHolder.getParent();
186188
}

commonmark/src/test/java/org/commonmark/test/TextContentRendererTest.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.commonmark.test;
22

3+
import org.commonmark.renderer.text.LineBreakRendering;
34
import org.commonmark.renderer.text.TextContentRenderer;
45
import org.commonmark.node.Node;
56
import org.commonmark.parser.Parser;
@@ -20,6 +21,7 @@ public void textContentText() {
2021

2122
s = "foo foo\n\nbar\nbar";
2223
assertCompact(s, "foo foo\nbar\nbar");
24+
assertSeparate(s, "foo foo\n\nbar\nbar");
2325
assertStripped(s, "foo foo bar bar");
2426
}
2527

@@ -38,6 +40,7 @@ public void textContentEmphasis() {
3840

3941
s = "foo\n***foo***\nbar\n\n***bar***";
4042
assertCompact(s, "foo\nfoo\nbar\nbar");
43+
assertSeparate(s, "foo\nfoo\nbar\n\nbar");
4144
assertStripped(s, "foo foo bar bar");
4245
}
4346

@@ -47,6 +50,7 @@ public void textContentQuotes() {
4750

4851
s = "foo\n>foo\nbar\n\nbar";
4952
assertCompact(s, "foo\n«foo\nbar»\nbar");
53+
assertSeparate(s, "foo\n\n«foo\nbar»\n\nbar");
5054
assertStripped(s, "foo «foo bar» bar");
5155
}
5256

@@ -72,35 +76,52 @@ public void textContentLists() {
7276

7377
s = "foo\n* foo\n* bar\n\nbar";
7478
assertCompact(s, "foo\n* foo\n* bar\nbar");
79+
assertSeparate(s, "foo\n\n* foo\n* bar\n\nbar");
7580
assertStripped(s, "foo foo bar bar");
7681

7782
s = "foo\n- foo\n- bar\n\nbar";
7883
assertCompact(s, "foo\n- foo\n- bar\nbar");
84+
assertSeparate(s, "foo\n\n- foo\n- bar\n\nbar");
7985
assertStripped(s, "foo foo bar bar");
8086

8187
s = "foo\n1. foo\n2. bar\n\nbar";
8288
assertCompact(s, "foo\n1. foo\n2. bar\nbar");
89+
assertSeparate(s, "foo\n\n1. foo\n2. bar\n\nbar");
8390
assertStripped(s, "foo 1. foo 2. bar bar");
8491

8592
s = "foo\n0) foo\n1) bar\n\nbar";
8693
assertCompact(s, "foo\n0) foo\n1) bar\nbar");
94+
assertSeparate(s, "foo\n0) foo\n\n1) bar\n\nbar");
8795
assertStripped(s, "foo 0) foo 1) bar bar");
8896

8997
s = "bar\n1. foo\n 1. bar\n2. foo";
9098
assertCompact(s, "bar\n1. foo\n 1. bar\n2. foo");
99+
assertSeparate(s, "bar\n\n1. foo\n 1. bar\n2. foo");
91100
assertStripped(s, "bar 1. foo 1. bar 2. foo");
92101

93102
s = "bar\n* foo\n - bar\n* foo";
94103
assertCompact(s, "bar\n* foo\n - bar\n* foo");
104+
assertSeparate(s, "bar\n\n* foo\n - bar\n* foo");
95105
assertStripped(s, "bar foo bar foo");
96106

97107
s = "bar\n* foo\n 1. bar\n 2. bar\n* foo";
98108
assertCompact(s, "bar\n* foo\n 1. bar\n 2. bar\n* foo");
109+
assertSeparate(s, "bar\n\n* foo\n 1. bar\n 2. bar\n* foo");
99110
assertStripped(s, "bar foo 1. bar 2. bar foo");
100111

101112
s = "bar\n1. foo\n * bar\n * bar\n2. foo";
102113
assertCompact(s, "bar\n1. foo\n * bar\n * bar\n2. foo");
114+
assertSeparate(s, "bar\n\n1. foo\n * bar\n * bar\n2. foo");
103115
assertStripped(s, "bar 1. foo bar bar 2. foo");
116+
117+
// For a loose list (not tight)
118+
s = "foo\n\n* bar\n\n* baz";
119+
// Compact ignores loose
120+
assertCompact(s, "foo\n* bar\n* baz");
121+
// Separate preserves it
122+
assertSeparate(s, "foo\n\n* bar\n\n* baz");
123+
assertStripped(s, "foo bar baz");
124+
104125
}
105126

106127
@Test
@@ -113,10 +134,12 @@ public void textContentCodeBlock() {
113134
String s;
114135
s = "foo\n```\nfoo\nbar\n```\nbar";
115136
assertCompact(s, "foo\nfoo\nbar\nbar");
137+
assertSeparate(s, "foo\n\nfoo\nbar\n\nbar");
116138
assertStripped(s, "foo foo bar bar");
117139

118140
s = "foo\n\n foo\n bar\nbar";
119141
assertCompact(s, "foo\nfoo\n bar\nbar");
142+
assertSeparate(s, "foo\n\nfoo\n bar\n\nbar");
120143
assertStripped(s, "foo foo bar bar");
121144
}
122145

@@ -126,14 +149,17 @@ public void textContentBreaks() {
126149

127150
s = "foo\nbar";
128151
assertCompact(s, "foo\nbar");
152+
assertSeparate(s, "foo\nbar");
129153
assertStripped(s, "foo bar");
130154

131155
s = "foo \nbar";
132156
assertCompact(s, "foo\nbar");
157+
assertSeparate(s, "foo\nbar");
133158
assertStripped(s, "foo bar");
134159

135160
s = "foo\n___\nbar";
136161
assertCompact(s, "foo\n***\nbar");
162+
assertSeparate(s, "foo\n\n***\n\nbar");
137163
assertStripped(s, "foo bar");
138164
}
139165

@@ -147,26 +173,37 @@ public void textContentHtml() {
147173
" </tr>\n" +
148174
"</table>";
149175
assertCompact(html, html);
176+
assertSeparate(html, html);
150177

151178
html = "foo <foo>foobar</foo> bar";
152-
assertCompact(html, html);
179+
assertAll(html, html);
153180
}
154181

155-
private TextContentRenderer defaultRenderer() {
182+
private TextContentRenderer compactRenderer() {
156183
return TextContentRenderer.builder().build();
157184
}
158185

186+
private TextContentRenderer separateBlocksRenderer() {
187+
return TextContentRenderer.builder().lineBreakRendering(LineBreakRendering.SEPARATE_BLOCKS).build();
188+
}
189+
159190
private TextContentRenderer strippedRenderer() {
160191
return TextContentRenderer.builder().stripNewlines(true).build();
161192
}
162193

163194
private Node parse(String source) {
164195
return Parser.builder().build().parse(source);
165196
}
166-
197+
167198
private void assertCompact(String source, String expected) {
168199
var doc = parse(source);
169-
var actualRendering = defaultRenderer().render(doc);
200+
var actualRendering = compactRenderer().render(doc);
201+
Asserts.assertRendering(source, expected, actualRendering);
202+
}
203+
204+
private void assertSeparate(String source, String expected) {
205+
var doc = parse(source);
206+
var actualRendering = separateBlocksRenderer().render(doc);
170207
Asserts.assertRendering(source, expected, actualRendering);
171208
}
172209

@@ -178,7 +215,7 @@ private void assertStripped(String source, String expected) {
178215

179216
private void assertAll(String source, String expected) {
180217
assertCompact(source, expected);
218+
assertSeparate(source, expected);
181219
assertStripped(source, expected);
182-
// TODO
183220
}
184221
}

0 commit comments

Comments
 (0)