Skip to content

Commit 99270bb

Browse files
committed
Merge branch 'trunk' of github.com:wordpress-mobile/AztecEditor-Android into build/update-min-sdk-version-to-24
� Conflicts: � aztec/src/test/kotlin/org/wordpress/aztec/PreformatTest.kt
2 parents 3383dbb + b3b8092 commit 99270bb

File tree

4 files changed

+527
-496
lines changed

4 files changed

+527
-496
lines changed

aztec/src/main/kotlin/org/wordpress/aztec/formatting/BlockFormatter.kt

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,21 +1116,11 @@ class BlockFormatter(editor: AztecText,
11161116
val lineStart = (0 until i).sumOf { lines[it].length + 1 }
11171117
val lineEnd = lineStart + lines[i].length
11181118

1119-
if (lineStart >= lineEnd) {
1119+
if (lineStart > lineEnd) {
11201120
continue
11211121
}
11221122

1123-
/**
1124-
* lineStart >= selStart && selEnd >= lineEnd // single line, current entirely selected OR
1125-
* multiple lines (before and/or after), current entirely selected
1126-
* lineStart <= selEnd && selEnd <= lineEnd // single line, current partially or entirely selected OR
1127-
* multiple lines (after), current partially or entirely selected
1128-
* lineStart <= selStart && selStart <= lineEnd // single line, current partially or entirely selected OR
1129-
* multiple lines (before), current partially or entirely selected
1130-
*/
1131-
if ((lineStart >= selStart && selEnd >= lineEnd)
1132-
|| (selEnd in lineStart..lineEnd)
1133-
|| (selStart in lineStart..lineEnd)) {
1123+
if (lineStart <= selectionEnd && lineEnd >= selectionStart) {
11341124
list.add(i)
11351125
}
11361126
}
@@ -1149,12 +1139,15 @@ class BlockFormatter(editor: AztecText,
11491139
val start = (0 until index).sumOf { lines[it].length + 1 }
11501140
val end = start + lines[index].length
11511141

1152-
if (start >= end) {
1142+
if (start > end) {
11531143
return false
11541144
}
11551145

11561146
val spans = editableText.getSpans(start, end, AztecPreformatSpan::class.java)
1157-
return spans.isNotEmpty()
1147+
return spans.any {
1148+
val spanEnd = editableText.getSpanEnd(it)
1149+
spanEnd != start || editableText[spanEnd] != '\n'
1150+
}
11581151
}
11591152

11601153
private fun switchListType(listTypeToSwitchTo: ITextFormat, start: Int = selectionStart, end: Int = selectionEnd, attrs: AztecAttributes = AztecAttributes()) {

aztec/src/main/kotlin/org/wordpress/aztec/toolbar/AztecToolbar.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -725,8 +725,6 @@ class AztecToolbar : FrameLayout, IAztecToolbar, OnMenuItemClickListener {
725725
headingMenu?.menu?.findItem(R.id.heading_4)?.isChecked == true -> AztecTextFormat.FORMAT_HEADING_4
726726
headingMenu?.menu?.findItem(R.id.heading_5)?.isChecked == true -> AztecTextFormat.FORMAT_HEADING_5
727727
headingMenu?.menu?.findItem(R.id.heading_6)?.isChecked == true -> AztecTextFormat.FORMAT_HEADING_6
728-
// TODO: Uncomment when Preformat is to be added back as a feature
729-
// else if (headingMenu?.menu?.findItem(R.id.preformat)?.isChecked!!) return AztecTextFormat.FORMAT_PREFORMAT
730728
else -> null
731729
}
732730

aztec/src/test/kotlin/org/wordpress/aztec/HeadingTest.kt

Lines changed: 120 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import org.wordpress.aztec.TestUtils.safeAppend
1414
import org.wordpress.aztec.TestUtils.safeLength
1515
import org.wordpress.aztec.source.SourceViewEditText
1616
import org.wordpress.aztec.toolbar.AztecToolbar
17+
import org.wordpress.aztec.toolbar.ToolbarAction
18+
import org.wordpress.aztec.toolbar.ToolbarItems
1719

1820
/**
1921
* Testing heading behaviour.
@@ -28,8 +30,7 @@ class HeadingTest {
2830
lateinit var menuHeading1: MenuItem
2931
lateinit var menuHeading2: MenuItem
3032
lateinit var menuParagraph: MenuItem
31-
// TODO: Uncomment when Preformat is to be added back as a feature
32-
// lateinit var menuPreformat: MenuItem
33+
lateinit var buttonPreformat: ToggleButton
3334

3435
/**
3536
* Initialize variables.
@@ -42,14 +43,29 @@ class HeadingTest {
4243
sourceText = SourceViewEditText(activity)
4344
sourceText.setCalypsoMode(false)
4445
toolbar = AztecToolbar(activity)
46+
toolbar.setToolbarItems(ToolbarItems.BasicLayout(
47+
ToolbarAction.HEADING,
48+
ToolbarAction.PREFORMAT,
49+
ToolbarAction.LIST,
50+
ToolbarAction.QUOTE,
51+
ToolbarAction.BOLD,
52+
ToolbarAction.ITALIC,
53+
ToolbarAction.LINK,
54+
ToolbarAction.UNDERLINE,
55+
ToolbarAction.STRIKETHROUGH,
56+
ToolbarAction.ALIGN_LEFT,
57+
ToolbarAction.ALIGN_CENTER,
58+
ToolbarAction.ALIGN_RIGHT,
59+
ToolbarAction.HORIZONTAL_RULE,
60+
ToolbarAction.HTML
61+
))
4562
toolbar.setEditor(editText, sourceText)
4663
buttonQuote = toolbar.findViewById<ToggleButton>(R.id.format_bar_button_quote)
4764
menuHeading = toolbar.getHeadingMenu() as PopupMenu
4865
menuHeading1 = menuHeading.menu.getItem(1)
4966
menuHeading2 = menuHeading.menu.getItem(2)
5067
menuParagraph = menuHeading.menu.getItem(0)
51-
// TODO: Uncomment when Preformat is to be added back as a feature
52-
// menuPreformat = menuHeading.menu.getItem(7)
68+
buttonPreformat = toolbar.findViewById<ToggleButton>(R.id.format_bar_button_pre)
5369
activity.setContentView(editText)
5470
}
5571

@@ -62,15 +78,14 @@ class HeadingTest {
6278
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
6379
}
6480

65-
// TODO: Uncomment when Preformat is to be added back as a feature
66-
// @Test
67-
// @Throws(Exception::class)
68-
// fun applyPreformatToSingleLine() {
69-
// safeAppend(editText, "Preformat")
70-
// toolbar.onMenuItemClick(menuPreformat)
71-
// Assert.assertEquals("<pre>Preformat</pre>", editText.toHtml())
72-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
73-
// }
81+
@Test
82+
@Throws(Exception::class)
83+
fun applyPreformatToSingleLine() {
84+
safeAppend(editText, "Preformat")
85+
buttonPreformat.performClick()
86+
Assert.assertEquals("<pre>Preformat</pre>", editText.toHtml())
87+
Assert.assertTrue(buttonPreformat.isChecked)
88+
}
7489

7590
@Test
7691
@Throws(Exception::class)
@@ -82,16 +97,15 @@ class HeadingTest {
8297
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
8398
}
8499

85-
// TODO: Uncomment when Preformat is to be added back as a feature
86-
// @Test
87-
// @Throws(Exception::class)
88-
// fun applyPreformatToPartiallySelectedText() {
89-
// safeAppend(editText, "Preformat")
90-
// editText.setSelection(1, editText.length() - 2)
91-
// toolbar.onMenuItemClick(menuPreformat)
92-
// Assert.assertEquals("<pre>Preformat</pre>", editText.toHtml())
93-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
94-
// }
100+
@Test
101+
@Throws(Exception::class)
102+
fun applyPreformatToPartiallySelectedText() {
103+
safeAppend(editText, "Preformat")
104+
editText.setSelection(1, editText.length() - 2)
105+
buttonPreformat.performClick()
106+
Assert.assertEquals("<pre>Preformat</pre>", editText.toHtml())
107+
Assert.assertTrue(buttonPreformat.isChecked)
108+
}
95109

96110
@Test
97111
@Throws(Exception::class)
@@ -105,18 +119,17 @@ class HeadingTest {
105119
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
106120
}
107121

108-
// TODO: Uncomment when Preformat is to be added back as a feature
109-
// @Test
110-
// @Throws(Exception::class)
111-
// fun applyPreformatToSelectedMultilineText() {
112-
// safeAppend(editText, "First line")
113-
// safeAppend(editText, "\n")
114-
// safeAppend(editText, "Second line")
115-
// editText.setSelection(3, editText.length() - 3)
116-
// toolbar.onMenuItemClick(menuPreformat)
117-
// Assert.assertEquals("<pre>First line<br>Second line</pre>", editText.toHtml())
118-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
119-
// }
122+
@Test
123+
@Throws(Exception::class)
124+
fun applyPreformatToSelectedMultilineText() {
125+
safeAppend(editText, "First line")
126+
safeAppend(editText, "\n")
127+
safeAppend(editText, "Second line")
128+
editText.setSelection(3, editText.length() - 3)
129+
buttonPreformat.performClick()
130+
Assert.assertEquals("<pre>First line<br>Second line</pre>", editText.toHtml())
131+
Assert.assertTrue(buttonPreformat.isChecked)
132+
}
120133

121134
@Test
122135
@Throws(Exception::class)
@@ -128,16 +141,15 @@ class HeadingTest {
128141
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
129142
}
130143

131-
// TODO: Uncomment when Preformat is to be added back as a feature
132-
// @Test
133-
// @Throws(Exception::class)
134-
// fun prependTextToPreformat() {
135-
// safeAppend(editText, "Preformat")
136-
// toolbar.onMenuItemClick(menuPreformat)
137-
// editText.text.insert(0, "inserted")
138-
// Assert.assertEquals("<pre>insertedPreformat</pre>", editText.toHtml())
139-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
140-
// }
144+
@Test
145+
@Throws(Exception::class)
146+
fun prependTextToPreformat() {
147+
safeAppend(editText, "Preformat")
148+
buttonPreformat.performClick()
149+
editText.text.insert(0, "inserted")
150+
Assert.assertEquals("<pre>insertedPreformat</pre>", editText.toHtml())
151+
Assert.assertTrue(buttonPreformat.isChecked)
152+
}
141153

142154
@Test
143155
@Throws(Exception::class)
@@ -246,16 +258,15 @@ class HeadingTest {
246258
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_2, toolbar.getSelectedHeadingMenuItem())
247259
}
248260

249-
// TODO: Uncomment when Preformat is to be added back as a feature
250-
// @Test
251-
// @Throws(Exception::class)
252-
// fun changeHeadingToPreformatOfSingleLine() {
253-
// editText.fromHtml("<h1 foo=\"bar\">Text</h1>")
254-
// toolbar.onMenuItemClick(menuHeading1)
255-
// toolbar.onMenuItemClick(menuPreformat)
256-
// Assert.assertEquals("<pre foo=\"bar\">Text</pre>", editText.toHtml())
257-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
258-
// }
261+
@Test
262+
@Throws(Exception::class)
263+
fun changeHeadingToPreformatOfSingleLine() {
264+
editText.fromHtml("<h1 foo=\"bar\">Text</h1>")
265+
toolbar.onMenuItemClick(menuHeading1)
266+
buttonPreformat.performClick()
267+
Assert.assertEquals("<pre foo=\"bar\">Text</pre>", editText.toHtml())
268+
Assert.assertTrue(buttonPreformat.isChecked)
269+
}
259270

260271
@Test
261272
@Throws(Exception::class)
@@ -267,19 +278,18 @@ class HeadingTest {
267278
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_2, toolbar.getSelectedHeadingMenuItem())
268279
}
269280

270-
// TODO: Uncomment when Preformat is to be added back as a feature
271-
// @Test
272-
// @Throws(Exception::class)
273-
// fun changeHeadingToParagraphToPreformatOfSelectedMultilineText() {
274-
// editText.fromHtml("<h1 foo=\"bar\">Heading 1</h1><pre>Preformat</pre>")
275-
// editText.setSelection(0, safeLength(editText))
276-
// toolbar.onMenuItemClick(menuParagraph)
277-
// Assert.assertEquals("Heading 1<br>Preformat", editText.toHtml())
278-
// Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
279-
// toolbar.onMenuItemClick(menuPreformat)
280-
// Assert.assertEquals("<pre>Heading 1<br>Preformat</pre>", editText.toHtml())
281-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
282-
// }
281+
@Test
282+
@Throws(Exception::class)
283+
fun changeHeadingToParagraphToPreformatOfSelectedMultilineText() {
284+
editText.fromHtml("<h1 foo=\"bar\">Heading 1</h1><pre>Preformat</pre>")
285+
editText.setSelection(0, safeLength(editText))
286+
toolbar.onMenuItemClick(menuParagraph)
287+
Assert.assertEquals("Heading 1<br>Preformat", editText.toHtml())
288+
Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
289+
buttonPreformat.performClick()
290+
Assert.assertEquals("<pre>Heading 1<br>Preformat</pre>", editText.toHtml())
291+
Assert.assertTrue(buttonPreformat.isChecked)
292+
}
283293

284294
@Test
285295
@Throws(Exception::class)
@@ -300,15 +310,14 @@ class HeadingTest {
300310
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
301311
}
302312

303-
// TODO: Uncomment when Preformat is to be added back as a feature
304-
// @Test
305-
// @Throws(Exception::class)
306-
// fun applyPreformatToTextInsideQuote() {
307-
// editText.fromHtml("<blockquote>Quote</blockquote>")
308-
// toolbar.onMenuItemClick(menuPreformat)
309-
// Assert.assertEquals("<blockquote><pre>Quote</pre></blockquote>", editText.toHtml())
310-
// Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
311-
// }
313+
@Test
314+
@Throws(Exception::class)
315+
fun applyPreformatToTextInsideQuote() {
316+
editText.fromHtml("<blockquote>Quote</blockquote>")
317+
buttonPreformat.performClick()
318+
Assert.assertEquals("<pre><blockquote>Quote</blockquote></pre>", editText.toHtml())
319+
Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
320+
}
312321

313322
@Test
314323
@Throws(Exception::class)
@@ -335,15 +344,14 @@ class HeadingTest {
335344
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
336345
}
337346

338-
// TODO: Uncomment when Preformat is to be added back as a feature
339-
// @Test
340-
// @Throws(Exception::class)
341-
// fun applyPreformatToQuote() {
342-
// editText.fromHtml("<blockquote>Quote</blockquote>")
343-
// toolbar.onMenuItemClick(menuPreformat)
344-
// Assert.assertEquals("<blockquote><pre>Quote</pre></blockquote>", editText.toHtml())
345-
// Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
346-
// }
347+
@Test
348+
@Throws(Exception::class)
349+
fun applyPreformatToQuote() {
350+
editText.fromHtml("<blockquote>Quote</blockquote>")
351+
buttonPreformat.performClick()
352+
Assert.assertEquals("<pre><blockquote>Quote</blockquote></pre>", editText.toHtml())
353+
Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
354+
}
347355

348356
@Test
349357
@Throws(Exception::class)
@@ -356,20 +364,19 @@ class HeadingTest {
356364
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
357365
}
358366

359-
// TODO: Uncomment when Preformat is to be added back as a feature
360-
// @Test
361-
// @Throws(Exception::class)
362-
// fun applyPreformatToTextSurroundedByLists() {
363-
// editText.fromHtml("<ol><li>Ordered</li></ol>Preformat<ol><li>Ordered</li></ol>")
364-
// val mark = editText.text.indexOf("format")
365-
// editText.setSelection(mark)
366-
// toolbar.onMenuItemClick(menuPreformat)
367-
// Assert.assertEquals("<ol><li>Ordered</li></ol><pre>Preformat</pre><ol><li>Ordered</li></ol>", editText.toHtml())
368-
//// TODO: Correct heading menu selection. This is incorrect. Preformat should be selected.
369-
//// https://github.com/wordpress-mobile/AztecEditor-Android/issues/317
370-
//// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
371-
// Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
372-
// }
367+
@Test
368+
@Throws(Exception::class)
369+
fun applyPreformatToTextSurroundedByLists() {
370+
editText.fromHtml("<ol><li>Ordered</li></ol>Preformat<ol><li>Ordered</li></ol>")
371+
val mark = editText.text.indexOf("format")
372+
editText.setSelection(mark)
373+
buttonPreformat.performClick()
374+
Assert.assertEquals("<ol><li>Ordered</li></ol><pre>Preformat</pre><ol><li>Ordered</li></ol>", editText.toHtml())
375+
// TODO: Correct heading menu selection. This is incorrect. Preformat should be selected.
376+
// https://github.com/wordpress-mobile/AztecEditor-Android/issues/317
377+
// Assert.assertTrue(buttonPreformat.isChecked)
378+
Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
379+
}
373380

374381
@Test
375382
@Throws(Exception::class)
@@ -382,17 +389,16 @@ class HeadingTest {
382389
Assert.assertEquals(AztecTextFormat.FORMAT_HEADING_1, toolbar.getSelectedHeadingMenuItem())
383390
}
384391

385-
// TODO: Uncomment when Preformat is to be added back as a feature
386-
// @Test
387-
// @Throws(Exception::class)
388-
// fun applyPreformatToTextSurroundedByQuotes() {
389-
// editText.fromHtml("<blockquote>Quote</blockquote>Preformat<blockquote>Quote</blockquote>")
390-
// val mark = editText.text.indexOf("format")
391-
// editText.setSelection(mark)
392-
// toolbar.onMenuItemClick(menuPreformat)
393-
// Assert.assertEquals("<blockquote>Quote</blockquote><pre>Preformat</pre><blockquote>Quote</blockquote>", editText.toHtml())
394-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
395-
// }
392+
@Test
393+
@Throws(Exception::class)
394+
fun applyPreformatToTextSurroundedByQuotes() {
395+
editText.fromHtml("<blockquote>Quote</blockquote>Preformat<blockquote>Quote</blockquote>")
396+
val mark = editText.text.indexOf("format")
397+
editText.setSelection(mark)
398+
buttonPreformat.performClick()
399+
Assert.assertEquals("<blockquote>Quote</blockquote><pre>Preformat</pre><blockquote>Quote</blockquote>", editText.toHtml())
400+
Assert.assertTrue(buttonPreformat.isChecked)
401+
}
396402

397403
@Test
398404
@Throws(Exception::class)
@@ -496,10 +502,9 @@ class HeadingTest {
496502
editText.setSelection(cursor)
497503
Assert.assertEquals(AztecTextFormat.FORMAT_PARAGRAPH, toolbar.getSelectedHeadingMenuItem())
498504

499-
// TODO: Uncomment when Preformat is to be added back as a feature
500-
// cursor = editText.text.indexOf("format")
501-
// editText.setSelection(cursor)
502-
// Assert.assertEquals(AztecTextFormat.FORMAT_PREFORMAT, toolbar.getSelectedHeadingMenuItem())
505+
cursor = editText.text.indexOf("format")
506+
editText.setSelection(cursor)
507+
Assert.assertTrue(buttonPreformat.isChecked)
503508
}
504509

505510
/**

0 commit comments

Comments
 (0)