11package org .commonmark .test ;
22
3+ import org .commonmark .renderer .text .LineBreakRendering ;
34import org .commonmark .renderer .text .TextContentRenderer ;
45import org .commonmark .node .Node ;
56import org .commonmark .parser .Parser ;
@@ -20,6 +21,7 @@ public void textContentText() {
2021
2122 s = "foo foo\n \n bar\n bar" ;
2223 assertCompact (s , "foo foo\n bar\n bar" );
24+ assertSeparate (s , "foo foo\n \n bar\n bar" );
2325 assertStripped (s , "foo foo bar bar" );
2426 }
2527
@@ -38,6 +40,7 @@ public void textContentEmphasis() {
3840
3941 s = "foo\n ***foo***\n bar\n \n ***bar***" ;
4042 assertCompact (s , "foo\n foo\n bar\n bar" );
43+ assertSeparate (s , "foo\n foo\n bar\n \n bar" );
4144 assertStripped (s , "foo foo bar bar" );
4245 }
4346
@@ -47,6 +50,7 @@ public void textContentQuotes() {
4750
4851 s = "foo\n >foo\n bar\n \n bar" ;
4952 assertCompact (s , "foo\n «foo\n bar»\n bar" );
53+ assertSeparate (s , "foo\n \n «foo\n bar»\n \n bar" );
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 \n bar" ;
7478 assertCompact (s , "foo\n * foo\n * bar\n bar" );
79+ assertSeparate (s , "foo\n \n * foo\n * bar\n \n bar" );
7580 assertStripped (s , "foo foo bar bar" );
7681
7782 s = "foo\n - foo\n - bar\n \n bar" ;
7883 assertCompact (s , "foo\n - foo\n - bar\n bar" );
84+ assertSeparate (s , "foo\n \n - foo\n - bar\n \n bar" );
7985 assertStripped (s , "foo foo bar bar" );
8086
8187 s = "foo\n 1. foo\n 2. bar\n \n bar" ;
8288 assertCompact (s , "foo\n 1. foo\n 2. bar\n bar" );
89+ assertSeparate (s , "foo\n \n 1. foo\n 2. bar\n \n bar" );
8390 assertStripped (s , "foo 1. foo 2. bar bar" );
8491
8592 s = "foo\n 0) foo\n 1) bar\n \n bar" ;
8693 assertCompact (s , "foo\n 0) foo\n 1) bar\n bar" );
94+ assertSeparate (s , "foo\n 0) foo\n \n 1) bar\n \n bar" );
8795 assertStripped (s , "foo 0) foo 1) bar bar" );
8896
8997 s = "bar\n 1. foo\n 1. bar\n 2. foo" ;
9098 assertCompact (s , "bar\n 1. foo\n 1. bar\n 2. foo" );
99+ assertSeparate (s , "bar\n \n 1. foo\n 1. bar\n 2. 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\n 1. foo\n * bar\n * bar\n 2. foo" ;
102113 assertCompact (s , "bar\n 1. foo\n * bar\n * bar\n 2. foo" );
114+ assertSeparate (s , "bar\n \n 1. foo\n * bar\n * bar\n 2. 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 ```\n foo\n bar\n ```\n bar" ;
115136 assertCompact (s , "foo\n foo\n bar\n bar" );
137+ assertSeparate (s , "foo\n \n foo\n bar\n \n bar" );
116138 assertStripped (s , "foo foo bar bar" );
117139
118140 s = "foo\n \n foo\n bar\n bar" ;
119141 assertCompact (s , "foo\n foo\n bar\n bar" );
142+ assertSeparate (s , "foo\n \n foo\n bar\n \n bar" );
120143 assertStripped (s , "foo foo bar bar" );
121144 }
122145
@@ -126,14 +149,17 @@ public void textContentBreaks() {
126149
127150 s = "foo\n bar" ;
128151 assertCompact (s , "foo\n bar" );
152+ assertSeparate (s , "foo\n bar" );
129153 assertStripped (s , "foo bar" );
130154
131155 s = "foo \n bar" ;
132156 assertCompact (s , "foo\n bar" );
157+ assertSeparate (s , "foo\n bar" );
133158 assertStripped (s , "foo bar" );
134159
135160 s = "foo\n ___\n bar" ;
136161 assertCompact (s , "foo\n ***\n bar" );
162+ assertSeparate (s , "foo\n \n ***\n \n bar" );
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