Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-12-16 22:18:26 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-12-17 18:14:29 +0300
commit6d4838a22cb542f89de9593e0c984d4c5c9dbe1b (patch)
tree9679678bd31ec42b33ae56ad98e2921f8274b295
parent85052118971741c5fb144ed4a43773f7578586f9 (diff)
Cover more test cases for Markdown formatting
Signed-off-by: Stefan Niedermann <info@niedermann.it>
-rw-r--r--markdown/src/androidTest/java/it/niedermann/android/markdown/MarkwonMarkdownUtilTest.java32
-rw-r--r--markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java25
2 files changed, 32 insertions, 25 deletions
diff --git a/markdown/src/androidTest/java/it/niedermann/android/markdown/MarkwonMarkdownUtilTest.java b/markdown/src/androidTest/java/it/niedermann/android/markdown/MarkwonMarkdownUtilTest.java
index b7557c116..8489bba98 100644
--- a/markdown/src/androidTest/java/it/niedermann/android/markdown/MarkwonMarkdownUtilTest.java
+++ b/markdown/src/androidTest/java/it/niedermann/android/markdown/MarkwonMarkdownUtilTest.java
@@ -129,9 +129,9 @@ public class MarkwonMarkdownUtilTest extends TestCase {
assertEquals("Lorem **ipsum** dolor sit amet.", builder.toString());
// Remove bold
-// builder = new StringBuilder("Lorem **ipsum** dolor sit amet.");
-// assertEquals(11, MarkwonMarkdownUtil.togglePunctuation(builder, 7, 12, "**"));
-// assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
+ builder = new StringBuilder("Lorem **ipsum** dolor sit amet.");
+ assertEquals(11, MarkwonMarkdownUtil.togglePunctuation(builder, 8, 13, "**"));
+ assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
// Add strike
builder = new StringBuilder("Lorem ipsum dolor sit amet.");
@@ -139,9 +139,9 @@ public class MarkwonMarkdownUtilTest extends TestCase {
assertEquals("Lorem ~~ipsum~~ dolor sit amet.", builder.toString());
// Remove strike
-// builder = new StringBuilder("Lorem ~~ipsum~~ dolor sit amet.");
-// assertEquals(11, MarkwonMarkdownUtil.togglePunctuation(builder, 7, 12, "~~"));
-// assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
+ builder = new StringBuilder("Lorem ~~ipsum~~ dolor sit amet.");
+ assertEquals(11, MarkwonMarkdownUtil.togglePunctuation(builder, 8, 13, "~~"));
+ assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
// Add italic at first position
builder = new StringBuilder("Lorem ipsum dolor sit amet.");
@@ -149,9 +149,9 @@ public class MarkwonMarkdownUtilTest extends TestCase {
assertEquals("*Lorem* ipsum dolor sit amet.", builder.toString());
// Remove italic from first position
-// builder = new StringBuilder("*Lorem* ipsum dolor sit amet.");
-// assertEquals(5, MarkwonMarkdownUtil.togglePunctuation(builder, 1, 6, "*"));
-// assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
+ builder = new StringBuilder("*Lorem* ipsum dolor sit amet.");
+ assertEquals(5, MarkwonMarkdownUtil.togglePunctuation(builder, 1, 6, "*"));
+ assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
// Add italic at last position
builder = new StringBuilder("Lorem ipsum dolor sit amet.");
@@ -159,21 +159,21 @@ public class MarkwonMarkdownUtilTest extends TestCase {
assertEquals("Lorem ipsum dolor sit *amet.*", builder.toString());
// Remove italic from last position
-// builder = new StringBuilder("Lorem ipsum dolor sit *amet.*");
-// assertEquals(27, MarkwonMarkdownUtil.togglePunctuation(builder, 23, 28, "*"));
-// assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
+ builder = new StringBuilder("Lorem ipsum dolor sit *amet.*");
+ assertEquals(27, MarkwonMarkdownUtil.togglePunctuation(builder, 23, 28, "*"));
+ assertEquals("Lorem ipsum dolor sit amet.", builder.toString());
// Special use-case: toggle from italic to bold and back
// Toggle italic on bold text
// builder = new StringBuilder("Lorem **ipsum** dolor sit amet.");
-// assertEquals(13, MarkwonMarkdownUtil.togglePunctuation(builder, 8, 13, "*"));
-// assertEquals("Lorem *ipsum* dolor sit amet.", builder.toString());
+// assertEquals(17, MarkwonMarkdownUtil.togglePunctuation(builder, 8, 13, "*"));
+// assertEquals("Lorem ***ipsum*** dolor sit amet.", builder.toString());
// Toggle bold on italic text
// builder = new StringBuilder("Lorem *ipsum* dolor sit amet.");
-// assertEquals(15, MarkwonMarkdownUtil.togglePunctuation(builder, 7, 12, "**"));
-// assertEquals("Lorem **ipsum** dolor sit amet.", builder.toString());
+// assertEquals(17, MarkwonMarkdownUtil.togglePunctuation(builder, 7, 12, "**"));
+// assertEquals("Lorem ***ipsum*** dolor sit amet.", builder.toString());
}
public void testInsertLink() {
diff --git a/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java b/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java
index d5053f804..465ec678a 100644
--- a/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java
+++ b/markdown/src/main/java/it/niedermann/android/markdown/markwon/MarkwonMarkdownUtil.java
@@ -120,16 +120,18 @@ public class MarkwonMarkdownUtil {
public static int togglePunctuation(@NonNull StringBuilder builder, int selectionStart, int selectionEnd, @NonNull String punctuation) {
switch (punctuation) {
case "**":
+ case "__":
case "*":
+ case "_":
case "~~": {
- final boolean hasAlreadyMarkdown = hasAlreadyMarkdown(builder.toString(), selectionStart, selectionEnd, punctuation);
- if (hasAlreadyMarkdown) {
+ final boolean selectionIsSurroundedByPunctuation = selectionIsSurroundedByPunctuation(builder.toString(), selectionStart, selectionEnd, punctuation);
+ if (selectionIsSurroundedByPunctuation) {
removeMarkdown(builder, selectionStart, selectionEnd, punctuation);
} else {
builder.insert(selectionEnd, punctuation);
builder.insert(selectionStart, punctuation);
}
- return hasAlreadyMarkdown ? selectionEnd - punctuation.length() : selectionEnd + punctuation.length() * 2;
+ return selectionIsSurroundedByPunctuation ? selectionEnd - punctuation.length() : selectionEnd + punctuation.length() * 2;
}
default:
throw new UnsupportedOperationException("This kind of punctuation is not yet supported: " + punctuation);
@@ -167,14 +169,19 @@ public class MarkwonMarkdownUtil {
: selectionEnd + 3;
}
- private static boolean hasAlreadyMarkdown(@Nullable CharSequence text, int start, int end, String punctuation) {
- return text != null && (start > punctuation.length() && punctuation.contentEquals(text.subSequence(start - punctuation.length(), start)) &&
- text.length() > end + punctuation.length() && punctuation.contentEquals(text.subSequence(end, end + punctuation.length())));
+ private static boolean selectionIsSurroundedByPunctuation(@NonNull CharSequence text, int start, int end, @NonNull String punctuation) {
+ if (text.length() < end + punctuation.length()) {
+ return false;
+ }
+ if (start - punctuation.length() < 0 || end + punctuation.length() > text.length()) {
+ return false;
+ }
+ return punctuation.contentEquals(text.subSequence(start - punctuation.length(), start))
+ && punctuation.contentEquals(text.subSequence(end, end + punctuation.length()));
}
- private static void removeMarkdown(StringBuilder ssb, int start, int end, String punctuation) {
- // FIXME disabled, because it does not work properly and might cause data loss
+ private static void removeMarkdown(@NonNull StringBuilder ssb, int start, int end, @NonNull String punctuation) {
+ ssb.delete(end, end + punctuation.length());
ssb.delete(start - punctuation.length(), start);
- ssb.delete(end - punctuation.length(), end);
}
}