Skip to content

Commit 179c38c

Browse files
Merge pull request #59 from coffeemakr/bugfix-test-urls-and-relative-fix
Add more tests and fix 2 bugs
2 parents a75137b + 978a33f commit 179c38c

22 files changed

Lines changed: 206 additions & 162 deletions
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.schabi.newpipe.extractor.services.soundcloud;
2+
3+
import com.grack.nanojson.JsonObject;
4+
5+
import javax.annotation.Nonnull;
6+
7+
public class SoundcloudExtractorHelper {
8+
9+
private static final String HTTP = "http://";
10+
private static final String HTTPS = "https://";
11+
12+
13+
private static String replaceHttpWithHttps(final String url) {
14+
if(!url.isEmpty() && url.startsWith(HTTP)) {
15+
return HTTPS + url.substring(HTTP.length());
16+
}
17+
return url;
18+
}
19+
20+
@Nonnull
21+
static String getUploaderUrl(JsonObject object) {
22+
String url = object.getObject("user").getString("permalink_url", "");
23+
return replaceHttpWithHttps(url);
24+
}
25+
26+
@Nonnull
27+
static String getAvatarUrl(JsonObject object) {
28+
String url = object.getObject("user", new JsonObject()).getString("avatar_url", "");
29+
return replaceHttpWithHttps(url);
30+
}
31+
32+
public static String getUploaderName(JsonObject object) {
33+
return object.getObject("user").getString("username", "");
34+
}
35+
}

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudPlaylistExtractor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.grack.nanojson.JsonParser;
55
import com.grack.nanojson.JsonParserException;
66
import org.schabi.newpipe.extractor.Downloader;
7-
import org.schabi.newpipe.extractor.NewPipe;
87
import org.schabi.newpipe.extractor.StreamingService;
98
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
109
import org.schabi.newpipe.extractor.exceptions.ParsingException;
@@ -69,17 +68,17 @@ public String getBannerUrl() {
6968

7069
@Override
7170
public String getUploaderUrl() {
72-
return playlist.getObject("user").getString("permalink_url", "");
71+
return SoundcloudExtractorHelper.getUploaderUrl(playlist);
7372
}
7473

7574
@Override
7675
public String getUploaderName() {
77-
return playlist.getObject("user").getString("username", "");
76+
return SoundcloudExtractorHelper.getUploaderName(playlist);
7877
}
7978

8079
@Override
8180
public String getUploaderAvatarUrl() {
82-
return playlist.getObject("user", new JsonObject()).getString("avatar_url", "");
81+
return SoundcloudExtractorHelper.getAvatarUrl(playlist);
8382
}
8483

8584
@Override

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,19 @@ public long getDislikeCount() {
102102
@Nonnull
103103
@Override
104104
public String getUploaderUrl() {
105-
return track.getObject("user").getString("permalink_url", "");
105+
return SoundcloudExtractorHelper.getUploaderUrl(track);
106106
}
107107

108108
@Nonnull
109109
@Override
110110
public String getUploaderName() {
111-
return track.getObject("user").getString("username", "");
111+
return SoundcloudExtractorHelper.getUploaderName(track);
112112
}
113113

114114
@Nonnull
115115
@Override
116116
public String getUploaderAvatarUrl() {
117-
return track.getObject("user", new JsonObject()).getString("avatar_url", "");
117+
return SoundcloudExtractorHelper.getAvatarUrl(track);
118118
}
119119

120120
@Override

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubePlaylistExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ public String getUploaderName() throws ParsingException {
265265

266266
@Override
267267
public String getUploaderUrl() throws ParsingException {
268-
return getUploaderLink().attr("href");
268+
return getUploaderLink().attr("abs:href");
269269
}
270270

271271
@Override

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamInfoItemExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public String getUploaderUrl() throws ParsingException {
100100
try {
101101
return item.select("div[class=\"yt-lockup-byline\"]").first()
102102
.select("a").first()
103-
.attr("href");
103+
.attr("abs:href");
104104
} catch (Exception e){}
105105

106106
// try this if the first didn't work

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeTrendingExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public String getName() throws ParsingException {
110110
@Override
111111
public String getUploaderUrl() throws ParsingException {
112112
try {
113-
String link = getUploaderLink().attr("href");
113+
String link = getUploaderLink().attr("abs:href");
114114
if (link.isEmpty()) {
115115
throw new IllegalArgumentException("is empty");
116116
}

src/test/java/org/schabi/newpipe/extractor/ExtractorAsserts.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.schabi.newpipe.extractor;
22

3+
import javax.annotation.Nonnull;
34
import java.net.MalformedURLException;
45
import java.net.URL;
56
import java.util.List;
67

8+
import static org.junit.Assert.assertEquals;
9+
710
public class ExtractorAsserts {
811
public static void assertEmptyErrors(String message, List<Throwable> errors) {
912
if(!errors.isEmpty()) {
@@ -14,11 +17,21 @@ public static void assertEmptyErrors(String message, List<Throwable> errors) {
1417
}
1518
}
1619

17-
public static void assertIsValidUrl(String url) {
20+
@Nonnull
21+
private static URL urlFromString(String url) {
1822
try {
19-
new URL(url);
23+
return new URL(url);
2024
} catch (MalformedURLException e) {
2125
throw new AssertionError("Invalid url: " + url, e);
2226
}
2327
}
28+
29+
public static void assertIsValidUrl(String url) {
30+
urlFromString(url);
31+
}
32+
33+
public static void assertIsSecureUrl(String urlToCheck) {
34+
URL url = urlFromString(urlToCheck);
35+
assertEquals("Protocol of URL is not secure", "https", url.getProtocol());
36+
}
2437
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.schabi.newpipe.extractor.services.soundcloud;
2+
3+
import org.junit.Test;
4+
import org.schabi.newpipe.extractor.InfoItem;
5+
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
6+
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem;
7+
import org.schabi.newpipe.extractor.search.SearchResult;
8+
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
9+
import org.schabi.newpipe.extractor.stream.StreamType;
10+
11+
import static org.junit.Assert.*;
12+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
13+
14+
public abstract class BaseSoundcloudSearchTest {
15+
16+
protected static SearchResult result;
17+
18+
@Test
19+
public void testResultList() {
20+
assertFalse("Got empty result list", result.resultList.isEmpty());
21+
for(InfoItem infoItem: result.resultList) {
22+
assertIsSecureUrl(infoItem.getUrl());
23+
assertIsSecureUrl(infoItem.getThumbnailUrl());
24+
assertFalse(infoItem.getName().isEmpty());
25+
assertFalse("Name is probably a URI: " + infoItem.getName(),
26+
infoItem.getName().contains("://"));
27+
if(infoItem instanceof StreamInfoItem) {
28+
// test stream item
29+
StreamInfoItem streamInfoItem = (StreamInfoItem) infoItem;
30+
assertIsSecureUrl(streamInfoItem.getUploaderUrl());
31+
assertFalse(streamInfoItem.getUploadDate().isEmpty());
32+
assertFalse(streamInfoItem.getUploaderName().isEmpty());
33+
assertEquals(StreamType.AUDIO_STREAM, streamInfoItem.getStreamType());
34+
} else if(infoItem instanceof ChannelInfoItem) {
35+
// Nothing special to check?
36+
} else if(infoItem instanceof PlaylistInfoItem) {
37+
// test playlist item
38+
assertTrue(infoItem.getUrl().contains("/sets/"));
39+
long streamCount = ((PlaylistInfoItem) infoItem).getStreamCount();
40+
assertTrue(streamCount > 0);
41+
} else {
42+
fail("Unknown infoItem type: " + infoItem);
43+
}
44+
}
45+
}
46+
47+
@Test
48+
public void testResultErrors() {
49+
assertNotNull(result.errors);
50+
if (!result.errors.isEmpty()) {
51+
for (Throwable error : result.errors) {
52+
error.printStackTrace();
53+
}
54+
}
55+
assertTrue(result.errors.isEmpty());
56+
}
57+
}

src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChannelExtractorTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
99

1010
import static org.junit.Assert.*;
11+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1112
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
1213

1314
/**
@@ -43,7 +44,7 @@ public void testGetDescription() throws Exception {
4344

4445
@Test
4546
public void testGetAvatarUrl() throws Exception {
46-
assertTrue(extractor.getAvatarUrl().contains("https://"));
47+
assertIsSecureUrl(extractor.getAvatarUrl());
4748
}
4849

4950
@Test

src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudPlaylistExtractorTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.schabi.newpipe.extractor.playlist.PlaylistExtractor;
99

1010
import static org.junit.Assert.*;
11+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1112
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
1213

1314
/**
@@ -42,12 +43,13 @@ public void testGetName() throws Exception {
4243

4344
@Test
4445
public void testGetThumbnailUrl() throws Exception {
45-
assertTrue(extractor.getThumbnailUrl(), extractor.getThumbnailUrl().contains("https://"));
46+
assertIsSecureUrl(extractor.getThumbnailUrl());
4647
}
4748

4849
@Test
4950
public void testGetUploaderUrl() throws Exception {
50-
assertEquals(extractor.getUploaderUrl(), "http://soundcloud.com/liluzivert");
51+
assertIsSecureUrl(extractor.getUploaderUrl());
52+
assertEquals(extractor.getUploaderUrl(), "https://soundcloud.com/liluzivert");
5153
}
5254

5355
@Test
@@ -57,7 +59,7 @@ public void testGetUploaderName() throws Exception {
5759

5860
@Test
5961
public void testGetUploaderAvatarUrl() throws Exception {
60-
assertTrue(extractor.getUploaderAvatarUrl(), extractor.getUploaderAvatarUrl().contains("https://"));
62+
assertIsSecureUrl(extractor.getUploaderAvatarUrl());
6163
}
6264

6365
@Test

0 commit comments

Comments
 (0)