diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelperTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelperTest.java new file mode 100644 index 000000000..7c0713651 --- /dev/null +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelperTest.java @@ -0,0 +1,81 @@ +package org.schabi.newpipe.extractor.services.youtube; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.schabi.newpipe.extractor.services.youtube.YoutubeDescriptionHelper.runsToHtml; + +import org.junit.jupiter.api.Test; +import org.schabi.newpipe.extractor.services.youtube.YoutubeDescriptionHelper.Run; + +import java.util.Comparator; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class YoutubeDescriptionHelperTest { + + private static void assertRunsToHtml(final String expectedHtml, + final List openers, + final List closers, + final String content) { + assertEquals( + expectedHtml, + runsToHtml( + openers.stream() + .sorted(Comparator.comparingInt(run -> run.pos)) + .collect(Collectors.toList()), + closers.stream() + .sorted(Comparator.comparingInt(run -> run.pos)) + .collect(Collectors.toList()), + content + ) + ); + } + + @Test + public void testNoRuns() { + assertRunsToHtml( + "abc *a* _c_

test  &", + List.of(), + List.of(), + "abc *a* _c_
\u00a0\n\u00a0test &" + ); + } + + @Test + public void testNormalRuns() { + assertRunsToHtml( + "hello nice test", + List.of(new Run("", "", 0), new Run("", "", 3), + new Run("", "", 11)), + List.of(new Run("", "", 9), new Run("", "", 6), + new Run("", "", 15)), + "hello nice test" + ); + } + + @Test + public void testOverlappingRuns() { + assertRunsToHtml( + "0123456789", + List.of(new Run("", "", 2), new Run("", "", 4)), + List.of(new Run("", "", 6), new Run("", "", 8)), + "0123456789" + ); + } + + @Test + public void testTransformingRuns() { + final Function tA = content -> "whatever"; + final Function tD + = content -> Integer.parseInt(content) % 2 == 0 ? "even" : "odd"; + + assertRunsToHtml( + "0whatever45odd89", + List.of(new Run("", "", 1, tA), new Run("", "", 2), + new Run("", "", 3), new Run("", "", 6, tD)), + List.of(new Run("", "", 4, tA), new Run("", "", 3), + new Run("", "", 5), new Run("", "", 8, tD)), + "0123456789" + ); + } +}