Added tests

This commit is contained in:
Thomas Szatmary 2022-10-26 13:35:12 +11:00
parent b5bb05da18
commit 699b408639
3 changed files with 170 additions and 78 deletions

View File

@ -1,5 +1,8 @@
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidioURL;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeURL;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
@ -13,95 +16,28 @@ import org.schabi.newpipe.extractor.utils.Utils;
public final class YoutubeMusicTrendingLinkHandlerFactory extends ListLinkHandlerFactory {
private static final YoutubeMusicTrendingLinkHandlerFactory INSTANCE =
new YoutubeMusicTrendingLinkHandlerFactory();
public YoutubeMusicTrendingLinkHandlerFactory() {
}
public static YoutubeMusicTrendingLinkHandlerFactory getInstance() {
return INSTANCE;
}
@Override
public String getUrl(final String id, final List<String> contentFilters,
public String getUrl(final String id,
final List<String> contentFilters,
final String sortFilter) {
return "https://www.youtube.com/feed/trending?bp=4gINGgt5dG1hX2NoYXJ0cw%3D%3D";
return "https://www.youtube.com/feed/trending/music";
}
@Override
public String getId(final String url) throws ParsingException {
try {
final URL urlObj = Utils.stringToURL(url);
if (!Utils.isHTTP(urlObj) || !(YoutubeParsingHelper.isYoutubeURL(urlObj)
|| YoutubeParsingHelper.isInvidioURL(urlObj))) {
throw new ParsingException("the url given is not a YouTube-URL");
}
final String path = urlObj.getPath();
if (!path.equals("/watch") && !path.equals("/playlist") && !path.equals("/feed/trending")) {
throw new ParsingException("the url given is neither a video nor a playlist URL");
}
final String listID = Utils.getQueryValue(urlObj, "list");
if (listID == null) {
throw new ParsingException("the URL given does not include a playlist");
}
if (!listID.matches("[a-zA-Z0-9_-]{10,}")) {
throw new ParsingException(
"the list-ID given in the URL does not match the list pattern");
}
if (YoutubeParsingHelper.isYoutubeChannelMixId(listID)
&& Utils.getQueryValue(urlObj, "v") == null) {
// Video id can't be determined from the channel mix id.
// See YoutubeParsingHelper#extractVideoIdFromMixId
throw new ContentNotSupportedException(
"Channel Mix without a video id are not supported");
}
return listID;
} catch (final Exception exception) {
throw new ParsingException("Error could not parse URL: " + exception.getMessage(),
exception);
}
public String getId(final String url) {
return "Trending";
}
@Override
public boolean onAcceptUrl(final String url) {
final URL urlObj;
try {
getId(url);
} catch (final ParsingException e) {
urlObj = Utils.stringToURL(url);
} catch (final MalformedURLException e) {
return false;
}
return true;
}
/**
* If it is a mix (auto-generated playlist) URL, return a {@link LinkHandler} where the URL is
* like {@code https://youtube.com/watch?v=videoId&list=playlistId}
* <p>Otherwise use super</p>
*/
@Override
public ListLinkHandler fromUrl(final String url) throws ParsingException {
try {
final URL urlObj = Utils.stringToURL(url);
final String listID = Utils.getQueryValue(urlObj, "list");
if (listID != null && YoutubeParsingHelper.isYoutubeMixId(listID)) {
String videoID = Utils.getQueryValue(urlObj, "v");
if (videoID == null) {
videoID = YoutubeParsingHelper.extractVideoIdFromMixId(listID);
}
final String newUrl = "https://www.youtube.com/feed/trending?bp=4gINGgt5dG1hX2NoYXJ0cw%3D%3D";
return new ListLinkHandler(new LinkHandler(url, newUrl, listID));
}
} catch (final MalformedURLException exception) {
throw new ParsingException("Error could not parse URL: " + exception.getMessage(),
exception);
}
return super.fromUrl(url);
final String urlPath = urlObj.getPath();
return Utils.isHTTP(urlObj) && (isYoutubeURL(urlObj) || isInvidioURL(urlObj))
&& urlPath.equals("/feed/trending/music");
}
}

View File

@ -0,0 +1,69 @@
package org.schabi.newpipe.extractor.services.youtube;
/*
* Created by Christian Schabesberger on 12.08.17.
*
* Copyright (C) Christian Schabesberger 2017 <chris.schabesberger@mailbox.org>
* YoutubeTrendingKioskInfoTest.java is part of NewPipe.
*
* NewPipe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NewPipe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
*/
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.schabi.newpipe.downloader.DownloaderFactory;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.kiosk.KioskInfo;
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
/**
* Test for {@link KioskInfo}
*/
public class YoutubeMusicTrendingKioskInfoTest {
private static final String RESOURCE_PATH = DownloaderFactory.RESOURCE_PATH + "kiosk";
static KioskInfo kioskInfo;
@BeforeAll
public static void setUp()
throws Exception {
YoutubeTestsUtils.ensureStateless();
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH));
LinkHandlerFactory LinkHandlerFactory = ((StreamingService) YouTube).getKioskList().getListLinkHandlerFactoryByType("Trending");
kioskInfo = KioskInfo.getInfo(YouTube, LinkHandlerFactory.fromId("Trending").getUrl());
}
@Test
public void getStreams() {
assertFalse(kioskInfo.getRelatedItems().isEmpty());
}
@Test
public void getId() {
assertTrue(kioskInfo.getId().equals("Trending Music")
|| kioskInfo.getId().equals("Trends"));
}
@Test
public void getName() {
assertFalse(kioskInfo.getName().isEmpty());
}
}

View File

@ -0,0 +1,87 @@
package org.schabi.newpipe.extractor.services.youtube;
/*
* Created by Christian Schabesberger on 12.08.17.
*
* Copyright (C) Christian Schabesberger 2017 <chris.schabesberger@mailbox.org>
* YoutubeTrendingLinkHandlerFactoryTest.java is part of NewPipe.
*
* NewPipe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NewPipe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
*/
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.schabi.newpipe.downloader.DownloaderTestImpl;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingLinkHandlerFactory;
/**
* Test for {@link YoutubeTrendingLinkHandlerFactory}
*/
public class YoutubeMusicTrendingLinkHandlerFactoryTest {
private static LinkHandlerFactory LinkHandlerFactory;
@BeforeAll
public static void setUp() throws Exception {
LinkHandlerFactory = YouTube.getKioskList().getListLinkHandlerFactoryByType("Trending Music");
NewPipe.init(DownloaderTestImpl.getInstance());
}
@Test
public void getUrl()
throws Exception {
assertEquals(LinkHandlerFactory.fromId("").getUrl(), "https://www.youtube.com/feed/trending/music");
}
@Test
public void getId()
throws Exception {
assertEquals(LinkHandlerFactory.fromUrl("https://www.youtube.com/feed/trending/music").getId(), "Trending");
}
@Test
public void acceptUrl() throws ParsingException {
assertTrue(LinkHandlerFactory.acceptUrl("https://www.youtube.com/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("https://www.youtube.com/feed/trending/music/?adsf=fjaj#fhe"));
assertTrue(LinkHandlerFactory.acceptUrl("http://www.youtube.com/feed/trending/music/"));
assertTrue(LinkHandlerFactory.acceptUrl("www.youtube.com/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("youtube.com/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("youtube.com/feed/trending/music/?akdsakjf=dfije&kfj=dkjak"));
assertTrue(LinkHandlerFactory.acceptUrl("https://youtube.com/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("m.youtube.com/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("https://www.invidio.us/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("https://invidio.us/feed/trending/music"));
assertTrue(LinkHandlerFactory.acceptUrl("invidio.us/feed/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("https://youtu.be/feed/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("kdskjfiiejfia"));
assertFalse(LinkHandlerFactory.acceptUrl("https://www.youtube.com/bullshit/feed/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("https://www.youtube.com/feed/trending/music/bullshit"));
assertFalse(LinkHandlerFactory.acceptUrl("https://www.youtube.com/feed/bullshit/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("peter klaut aepferl youtube.com/feed/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("youtube.com/feed/trending/music askjkf"));
assertFalse(LinkHandlerFactory.acceptUrl("askdjfi youtube.com/feed/trending/music askjkf"));
assertFalse(LinkHandlerFactory.acceptUrl(" youtube.com/feed/trending/music"));
assertFalse(LinkHandlerFactory.acceptUrl("https://www.youtube.com/feed/trending/music.html"));
assertFalse(LinkHandlerFactory.acceptUrl(""));
}
}