Added tests
This commit is contained in:
parent
b5bb05da18
commit
699b408639
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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(""));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue