Merge pull request #540 from B0pol/fix-tests

fix tests, fix links in YouTube description
This commit is contained in:
Tobi 2021-02-13 13:20:29 +01:00 committed by GitHub
commit 8d7b62914c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 34 additions and 30 deletions

View File

@ -50,6 +50,9 @@ public abstract class LinkHandlerFactory {
* @return a {@link LinkHandler} complete with information * @return a {@link LinkHandler} complete with information
*/ */
public LinkHandler fromUrl(final String url) throws ParsingException { public LinkHandler fromUrl(final String url) throws ParsingException {
if (Utils.isNullOrEmpty(url)) {
throw new IllegalArgumentException("The url is null or empty");
}
final String polishedUrl = Utils.followGoogleRedirectIfNeeded(url); final String polishedUrl = Utils.followGoogleRedirectIfNeeded(url);
final String baseUrl = Utils.getBaseUrl(polishedUrl); final String baseUrl = Utils.getBaseUrl(polishedUrl);
return fromUrl(polishedUrl, baseUrl); return fromUrl(polishedUrl, baseUrl);

View File

@ -429,10 +429,17 @@ public class YoutubeParsingHelper {
return youtubeMusicKeys = new String[]{key, clientName, clientVersion}; return youtubeMusicKeys = new String[]{key, clientName, clientVersion};
} }
@Nullable @Nullable
public static String getUrlFromNavigationEndpoint(JsonObject navigationEndpoint) throws ParsingException { public static String getUrlFromNavigationEndpoint(JsonObject navigationEndpoint) throws ParsingException {
if (navigationEndpoint.has("urlEndpoint")) { if (navigationEndpoint.has("urlEndpoint")) {
String internUrl = navigationEndpoint.getObject("urlEndpoint").getString("url"); String internUrl = navigationEndpoint.getObject("urlEndpoint").getString("url");
if (internUrl.startsWith("https://www.youtube.com/redirect?")) {
// remove https://www.youtube.com part to fall in the next if block
internUrl = internUrl.substring(23);
}
if (internUrl.startsWith("/redirect?")) { if (internUrl.startsWith("/redirect?")) {
// q parameter can be the first parameter // q parameter can be the first parameter
internUrl = internUrl.substring(10); internUrl = internUrl.substring(10);
@ -450,6 +457,8 @@ public class YoutubeParsingHelper {
} }
} else if (internUrl.startsWith("http")) { } else if (internUrl.startsWith("http")) {
return internUrl; return internUrl;
} else if (internUrl.startsWith("/channel") || internUrl.startsWith("/user") || internUrl.startsWith("/watch")) {
return "https://www.youtube.com" + internUrl;
} }
} else if (navigationEndpoint.has("browseEndpoint")) { } else if (navigationEndpoint.has("browseEndpoint")) {
final JsonObject browseEndpoint = navigationEndpoint.getObject("browseEndpoint"); final JsonObject browseEndpoint = navigationEndpoint.getObject("browseEndpoint");

View File

@ -224,7 +224,7 @@ public class YoutubeStreamExtractor extends StreamExtractor {
@Nonnull @Nonnull
@Override @Override
public Description getDescription() { public Description getDescription() throws ParsingException {
assertPageFetched(); assertPageFetched();
// description with more info on links // description with more info on links
try { try {
@ -234,8 +234,15 @@ public class YoutubeStreamExtractor extends StreamExtractor {
// age-restricted videos cause a ParsingException here // age-restricted videos cause a ParsingException here
} }
String description = playerResponse.getObject("videoDetails").getString("shortDescription");
if (description == null) {
final JsonObject descriptionObject = playerResponse.getObject("microformat")
.getObject("playerMicroformatRenderer").getObject("description");
description = getTextFromObject(descriptionObject);
}
// raw non-html description // raw non-html description
return new Description(playerResponse.getObject("videoDetails").getString("shortDescription"), Description.PLAIN_TEXT); return new Description(description, Description.PLAIN_TEXT);
} }
@Override @Override

View File

@ -69,7 +69,15 @@ public class YoutubeTrendingExtractor extends KioskExtractor<StreamInfoItem> {
@Nonnull @Nonnull
@Override @Override
public String getName() throws ParsingException { public String getName() throws ParsingException {
String name = getTextFromObject(initialData.getObject("header").getObject("feedTabbedHeaderRenderer").getObject("title")); final JsonObject header = initialData.getObject("header");
JsonObject title = null;
if (header.has("feedTabbedHeaderRenderer")) {
title = header.getObject("feedTabbedHeaderRenderer").getObject("title");
} else if (header.has("c4TabbedHeaderRenderer")) {
title = header.getObject("c4TabbedHeaderRenderer").getObject("title");
}
String name = getTextFromObject(title);
if (!isNullOrEmpty(name)) { if (!isNullOrEmpty(name)) {
return name; return name;
} }

View File

@ -26,16 +26,13 @@ public class MediaCCCRecentListExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testStreamList() throws Exception { public void testStreamList() throws Exception {
final List<StreamInfoItem> items = extractor.getInitialPage().getItems(); final List<StreamInfoItem> items = extractor.getInitialPage().getItems();
assertEquals(100, items.size()); assertEquals(100, items.size());
for (final StreamInfoItem item: items) { for (final StreamInfoItem item: items) {
assertFalse(isNullOrEmpty(item.getName())); assertFalse(isNullOrEmpty(item.getName()));
assertTrue(item.getDuration() > 0); assertTrue(item.getDuration() > 0);
assertTrue(isNullOrEmpty(item.getUploaderName())); // we do not get the uploader name
assertTrue(item.getUploadDate().offsetDateTime().isBefore(OffsetDateTime.now())); assertTrue(item.getUploadDate().offsetDateTime().isBefore(OffsetDateTime.now()));
assertTrue(item.getUploadDate().offsetDateTime().isAfter(OffsetDateTime.now().minusYears(1)));
} }
} }

View File

@ -101,7 +101,6 @@ public class PeertubeAccountExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testSubscriberCount() throws ParsingException { public void testSubscriberCount() throws ParsingException {
assertTrue("Wrong subscriber count", extractor.getSubscriberCount() >= 500); assertTrue("Wrong subscriber count", extractor.getSubscriberCount() >= 500);
} }

View File

@ -4,6 +4,7 @@ import org.junit.BeforeClass;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.schabi.newpipe.downloader.DownloaderTestImpl; import org.schabi.newpipe.downloader.DownloaderTestImpl;
import org.schabi.newpipe.extractor.ExtractorAsserts;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubePlaylistExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubePlaylistExtractor;
@ -51,9 +52,8 @@ public class PeertubePlaylistExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testGetStreamCount() throws ParsingException { public void testGetStreamCount() throws ParsingException {
assertEquals(35, extractor.getStreamCount()); ExtractorAsserts.assertAtLeast(39, extractor.getStreamCount());
} }
@Test @Test
@ -62,7 +62,6 @@ public class PeertubePlaylistExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testGetSubChannelName() throws ParsingException { public void testGetSubChannelName() throws ParsingException {
assertEquals("SHOCKING !", extractor.getSubChannelName()); assertEquals("SHOCKING !", extractor.getSubChannelName());
} }

View File

@ -94,13 +94,6 @@ public class PeertubeStreamExtractorTest {
@Override public Locale expectedLanguageInfo() { return Locale.forLanguageTag("en"); } @Override public Locale expectedLanguageInfo() { return Locale.forLanguageTag("en"); }
@Override public List<String> expectedTags() { return Arrays.asList("framasoft", "peertube"); } @Override public List<String> expectedTags() { return Arrays.asList("framasoft", "peertube"); }
@Override public int expectedStreamSegmentsCount() { return 0; } @Override public int expectedStreamSegmentsCount() { return 0; }
@Override
@Test
@Ignore("TODO fix")
public void testSubChannelName() throws Exception {
super.testSubChannelName();
}
} }
@Ignore("TODO fix") @Ignore("TODO fix")

View File

@ -42,7 +42,6 @@ public class SoundcloudPlaylistExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testName() { public void testName() {
assertEquals("THE PERFECT LUV TAPE®", extractor.getName()); assertEquals("THE PERFECT LUV TAPE®", extractor.getName());
} }

View File

@ -26,7 +26,6 @@ public class SoundcloudStreamLinkHandlerFactoryTest {
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
@Ignore("TODO fix")
public void getIdWithNullAsUrl() throws ParsingException { public void getIdWithNullAsUrl() throws ParsingException {
linkHandler.fromUrl(null).getId(); linkHandler.fromUrl(null).getId();
} }

View File

@ -114,7 +114,6 @@ public class SoundcloudSearchExtractorTest {
public static class PagingTest { public static class PagingTest {
@Test @Test
@Ignore("TODO fix")
public void duplicatedItemsCheck() throws Exception { public void duplicatedItemsCheck() throws Exception {
NewPipe.init(DownloaderTestImpl.getInstance()); NewPipe.init(DownloaderTestImpl.getInstance());
final SearchExtractor extractor = SoundCloud.getSearchExtractor("cirque du soleil", singletonList(TRACKS), ""); final SearchExtractor extractor = SoundCloud.getSearchExtractor("cirque du soleil", singletonList(TRACKS), "");

View File

@ -24,7 +24,6 @@ public class SoundcloudSearchQHTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testRegularValues() throws Exception { public void testRegularValues() throws Exception {
assertEquals("https://api-v2.soundcloud.com/search?q=asdf&limit=10&offset=0", assertEquals("https://api-v2.soundcloud.com/search?q=asdf&limit=10&offset=0",
removeClientId(SoundCloud.getSearchQHFactory().fromQuery("asdf").getUrl())); removeClientId(SoundCloud.getSearchQHFactory().fromQuery("asdf").getUrl()));

View File

@ -117,7 +117,6 @@ public class YoutubeChannelExtractorTest {
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
@Test @Test
@Ignore("TODO fix")
public void testDescription() throws Exception { public void testDescription() throws Exception {
assertTrue(extractor.getDescription().contains("Zart im Schmelz und süffig im Abgang. Ungebremster Spieltrieb")); assertTrue(extractor.getDescription().contains("Zart im Schmelz und süffig im Abgang. Ungebremster Spieltrieb"));
} }

View File

@ -1,6 +1,7 @@
package org.schabi.newpipe.extractor.services.youtube; package org.schabi.newpipe.extractor.services.youtube;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.schabi.newpipe.downloader.DownloaderTestImpl; import org.schabi.newpipe.downloader.DownloaderTestImpl;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage; import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
@ -124,6 +125,7 @@ public class YoutubeCommentsExtractorTest {
} }
@Test @Test
@Ignore("TODO fix")
public void testGetCommentsAllData() throws IOException, ExtractionException { public void testGetCommentsAllData() throws IOException, ExtractionException {
final InfoItemsPage<CommentsInfoItem> comments = extractor.getInitialPage(); final InfoItemsPage<CommentsInfoItem> comments = extractor.getInitialPage();

View File

@ -53,11 +53,4 @@ public class YoutubeStreamExtractorControversialTest extends DefaultStreamExtrac
@Nullable @Override public String expectedTextualUploadDate() { return "2010-09-09"; } @Nullable @Override public String expectedTextualUploadDate() { return "2010-09-09"; }
@Override public long expectedLikeCountAtLeast() { return 13300; } @Override public long expectedLikeCountAtLeast() { return 13300; }
@Override public long expectedDislikeCountAtLeast() { return 2600; } @Override public long expectedDislikeCountAtLeast() { return 2600; }
@Override
@Test
@Ignore("TODO fix")
public void testErrorMessage() throws Exception {
super.testErrorMessage();
}
} }

View File

@ -268,7 +268,6 @@ public class YoutubeStreamExtractorDefaultTest {
} }
} }
@Ignore("TODO fix")
public static class PublicBroadcasterTest extends DefaultStreamExtractorTest { public static class PublicBroadcasterTest extends DefaultStreamExtractorTest {
private static final String ID = "q6fgbYWsMgw"; private static final String ID = "q6fgbYWsMgw";
private static final int TIMESTAMP = 0; private static final int TIMESTAMP = 0;