summaryrefslogtreecommitdiff
path: root/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java
blob: 2c56b71cc615fae4a6f28e2b610f6877c5e1363a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package de.test.antennapod.util.playback;

import android.content.Context;
import android.test.InstrumentationTestCase;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.Date;
import java.util.List;

import de.danoeh.antennapod.core.feed.Chapter;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.Timeline;

/**
 * Test class for timeline
 */
public class TimelineTest extends InstrumentationTestCase {

    private Context context;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        context = getInstrumentation().getTargetContext();
    }

    private Playable newTestPlayable(List<Chapter> chapters, String shownotes) {
        FeedItem item = new FeedItem(0, "Item", "item-id", "http://example.com/item", new Date(), true, null);
        item.setChapters(chapters);
        item.setContentEncoded(shownotes);
        FeedMedia media = new FeedMedia(item, "http://example.com/episode", 100, "audio/mp3");
        media.setDuration(Integer.MAX_VALUE);
        item.setMedia(media);
        return media;
    }

    public void testProcessShownotesAddTimecodeHHMMSSNoChapters() throws Exception {
        final String timeStr = "10:11:12";
        final long time = 3600 * 1000 * 10 + 60 * 1000 * 11 + 12 * 1000;

        Playable p = newTestPlayable(null, "<p> Some test text with a timecode " + timeStr + " here.</p>");
        Timeline t = new Timeline(context, p);
        String res = t.processShownotes(true);
        checkLinkCorrect(res, new long[]{time}, new String[]{timeStr});
    }

    public void testProcessShownotesAddTimecodeHHMMNoChapters() throws Exception {
        final String timeStr = "10:11";
        final long time = 3600 * 1000 * 10 + 60 * 1000 * 11;

        Playable p = newTestPlayable(null, "<p> Some test text with a timecode " + timeStr + " here.</p>");
        Timeline t = new Timeline(context, p);
        String res = t.processShownotes(true);
        checkLinkCorrect(res, new long[]{time}, new String[]{timeStr});
    }

    public void testProcessShownotesAddTimecodeParentheses() throws Exception {
        final String timeStr = "10:11";
        final long time = 3600 * 1000 * 10 + 60 * 1000 * 11;

        Playable p = newTestPlayable(null, "<p> Some test text with a timecode (" + timeStr + ") here.</p>");
        Timeline t = new Timeline(context, p);
        String res = t.processShownotes(true);
        checkLinkCorrect(res, new long[]{time}, new String[]{timeStr});
    }

    public void testProcessShownotesAddTimecodeBrackets() throws Exception {
        final String timeStr = "10:11";
        final long time = 3600 * 1000 * 10 + 60 * 1000 * 11;

        Playable p = newTestPlayable(null, "<p> Some test text with a timecode [" + timeStr + "] here.</p>");
        Timeline t = new Timeline(context, p);
        String res = t.processShownotes(true);
        checkLinkCorrect(res, new long[]{time}, new String[]{timeStr});
    }

    public void testProcessShownotesAddTimecodeAngleBrackets() throws Exception {
        final String timeStr = "10:11";
        final long time = 3600 * 1000 * 10 + 60 * 1000 * 11;

        Playable p = newTestPlayable(null, "<p> Some test text with a timecode <" + timeStr + "> here.</p>");
        Timeline t = new Timeline(context, p);
        String res = t.processShownotes(true);
        checkLinkCorrect(res, new long[]{time}, new String[]{timeStr});
    }

    private void checkLinkCorrect(String res, long[] timecodes, String[] timecodeStr) {
        assertNotNull(res);
        Document d = Jsoup.parse(res);
        Elements links = d.body().getElementsByTag("a");
        int countedLinks = 0;
        for (Element link : links) {
            String href = link.attributes().get("href");
            String text = link.text();
            if (href.startsWith("antennapod://")) {
                assertTrue(href.endsWith(String.valueOf(timecodes[countedLinks])));
                assertEquals(timecodeStr[countedLinks], text);
                countedLinks++;
                assertTrue("Contains too many links: " + countedLinks + " > " + timecodes.length, countedLinks <= timecodes.length);
            }
        }
        assertEquals(timecodes.length, countedLinks);
    }

    public void testIsTimecodeLink() throws Exception {
        assertFalse(Timeline.isTimecodeLink(null));
        assertFalse(Timeline.isTimecodeLink("http://antennapod/timecode/123123"));
        assertFalse(Timeline.isTimecodeLink("antennapod://timecode/"));
        assertFalse(Timeline.isTimecodeLink("antennapod://123123"));
        assertFalse(Timeline.isTimecodeLink("antennapod://timecode/123123a"));
        assertTrue(Timeline.isTimecodeLink("antennapod://timecode/123"));
        assertTrue(Timeline.isTimecodeLink("antennapod://timecode/1"));
    }

    public void testGetTimecodeLinkTime() throws Exception {
        assertEquals(-1, Timeline.getTimecodeLinkTime(null));
        assertEquals(-1, Timeline.getTimecodeLinkTime("http://timecode/123"));
        assertEquals(123, Timeline.getTimecodeLinkTime("antennapod://timecode/123"));

    }
}