Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
37d1f59132
|
@ -0,0 +1,89 @@
|
||||||
|
package org.schabi.newpipe.services.youtube;
|
||||||
|
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.VideoPreviewInfo;
|
||||||
|
import org.schabi.newpipe.services.SearchEngine;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by the-scrabi on 29.12.15.
|
||||||
|
*
|
||||||
|
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||||
|
* YoutubeSearchEngineTest.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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class YoutubeSearchEngineTest extends AndroidTestCase {
|
||||||
|
private SearchEngine.Result result;
|
||||||
|
private ArrayList<String> suggestionReply;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUp() throws Exception{
|
||||||
|
super.setUp();
|
||||||
|
SearchEngine engine = new YoutubeSearchEngine();
|
||||||
|
result = engine.search("https://www.youtube.com/results?search_query=bla", 0, "de");
|
||||||
|
suggestionReply = engine.suggestionList("hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIfNoErrorOccur() {
|
||||||
|
assertEquals(result.errorMessage, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIfListIsNotEmpty() {
|
||||||
|
assertEquals(result.resultList.size() > 0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testItemsHaveTitle() {
|
||||||
|
for(VideoPreviewInfo i : result.resultList) {
|
||||||
|
assertEquals(i.title.isEmpty(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testItemsHaveUploader() {
|
||||||
|
for(VideoPreviewInfo i : result.resultList) {
|
||||||
|
assertEquals(i.uploader.isEmpty(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testItemsHaveRightDuration() {
|
||||||
|
for(VideoPreviewInfo i : result.resultList) {
|
||||||
|
assertTrue(i.duration, i.duration.contains(":"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testItemsHaveRightThumbnail() {
|
||||||
|
for (VideoPreviewInfo i : result.resultList) {
|
||||||
|
assertTrue(i.thumbnail_url, i.thumbnail_url.contains("https://"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testItemsHaveRightVideoUrl() {
|
||||||
|
for (VideoPreviewInfo i : result.resultList) {
|
||||||
|
assertTrue(i.webpage_url, i.webpage_url.contains("https://"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIfSuggestionsAreReplied() {
|
||||||
|
assertEquals(suggestionReply.size() > 0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testIfSuggestionsAreValid() {
|
||||||
|
for(String s : suggestionReply) {
|
||||||
|
assertTrue(s, !s.isEmpty());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
package org.schabi.newpipe.services.youtube;
|
||||||
|
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.services.VideoInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by the-scrabi on 30.12.15.
|
||||||
|
*
|
||||||
|
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||||
|
* YoutubeVideoExtractorDefault.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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class YoutubeVideoExtractorDefaultTest extends AndroidTestCase {
|
||||||
|
private YoutubeVideoExtractor extractor;
|
||||||
|
|
||||||
|
public void setUp() {
|
||||||
|
extractor = new YoutubeVideoExtractor("https://www.youtube.com/watch?v=FmG385_uUys");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetErrorCode() {
|
||||||
|
assertEquals(extractor.getErrorCode(), VideoInfo.NO_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetErrorMessage() {
|
||||||
|
assertEquals(extractor.getErrorMessage(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetTimeStamp() {
|
||||||
|
assertTrue(Integer.toString(extractor.getTimeStamp()),
|
||||||
|
extractor.getTimeStamp() >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetTitle() {
|
||||||
|
assertTrue(!extractor.getTitle().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetDescription() {
|
||||||
|
assertTrue(extractor.getDescription() != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetUploader() {
|
||||||
|
assertTrue(!extractor.getUploader().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetLength() {
|
||||||
|
assertTrue(extractor.getLength() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetViews() {
|
||||||
|
assertTrue(extractor.getLength() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetUploadDate() {
|
||||||
|
assertTrue(extractor.getUploadDate().length() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetThumbnailUrl() {
|
||||||
|
assertTrue(extractor.getThumbnailUrl(),
|
||||||
|
extractor.getThumbnailUrl().contains("https://"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetUploaderThumbnailUrl() {
|
||||||
|
assertTrue(extractor.getUploaderThumbnailUrl(),
|
||||||
|
extractor.getUploaderThumbnailUrl().contains("https://"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetAudioStreams() {
|
||||||
|
for(VideoInfo.AudioStream s : extractor.getAudioStreams()) {
|
||||||
|
assertTrue(s.url,
|
||||||
|
s.url.contains("https://"));
|
||||||
|
assertTrue(s.bandwidth > 0);
|
||||||
|
assertTrue(s.samplingRate > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetVideoStreams() {
|
||||||
|
for(VideoInfo.VideoStream s : extractor.getVideoStreams()) {
|
||||||
|
assertTrue(s.url,
|
||||||
|
s.url.contains("https://"));
|
||||||
|
assertTrue(s.resolution.length() > 0);
|
||||||
|
assertTrue(Integer.toString(s.format),
|
||||||
|
0 <= s.format && s.format <= 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package org.schabi.newpipe.services.youtube;
|
||||||
|
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.services.VideoInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by the-scrabi on 30.12.15.
|
||||||
|
*
|
||||||
|
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||||
|
* YoutubeVideoExtractorGema.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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// This class only works in Germany.
|
||||||
|
public class YoutubeVideoExtractorGemaTest extends AndroidTestCase {
|
||||||
|
|
||||||
|
// Deaktivate this Test Case bevore uploading it githup, otherwise CI will fail.
|
||||||
|
private static final boolean testActive = false;
|
||||||
|
|
||||||
|
|
||||||
|
private YoutubeVideoExtractor extractor;
|
||||||
|
|
||||||
|
public void setUp() {
|
||||||
|
if(testActive) {
|
||||||
|
extractor = new YoutubeVideoExtractor("https://www.youtube.com/watch?v=3O1_3zBUKM8");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetErrorCode() {
|
||||||
|
if(testActive) {
|
||||||
|
assertEquals(extractor.getErrorCode(), VideoInfo.ERROR_BLOCKED_BY_GEMA);
|
||||||
|
} else {
|
||||||
|
assertTrue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetErrorMessage() {
|
||||||
|
if(testActive) {
|
||||||
|
assertTrue(extractor.getErrorMessage(),
|
||||||
|
extractor.getErrorMessage().contains("GEMA"));
|
||||||
|
} else {
|
||||||
|
assertTrue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.services.MediaFormat;
|
||||||
import org.schabi.newpipe.services.VideoInfo;
|
import org.schabi.newpipe.services.VideoInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.schabi.newpipe;
|
package org.schabi.newpipe.services;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Adam Howard on 08/11/15.
|
* Created by Adam Howard on 08/11/15.
|
|
@ -106,21 +106,23 @@ public abstract class VideoExtractor {
|
||||||
return videoInfo;
|
return videoInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//todo: add licence field
|
//todo: add licence field
|
||||||
protected abstract int getErrorCode();
|
public abstract int getErrorCode();
|
||||||
protected abstract String getErrorMessage();
|
public abstract String getErrorMessage();
|
||||||
protected abstract String getVideoUrl(String videoId);
|
|
||||||
protected abstract String getVideoId(String siteUrl);
|
//todo: remove these functions, or make them static, otherwise its useles, to have them here
|
||||||
protected abstract int getTimeStamp();
|
public abstract String getVideoUrl(String videoId);
|
||||||
protected abstract String getTitle();
|
public abstract String getVideoId(String siteUrl);
|
||||||
protected abstract String getDescription();
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
protected abstract String getUploader();
|
public abstract int getTimeStamp();
|
||||||
protected abstract int getLength();
|
public abstract String getTitle();
|
||||||
protected abstract long getViews();
|
public abstract String getDescription();
|
||||||
protected abstract String getUploadDate();
|
public abstract String getUploader();
|
||||||
protected abstract String getThumbnailUrl();
|
public abstract int getLength();
|
||||||
protected abstract String getUploaderThumbnailUrl();
|
public abstract long getViews();
|
||||||
protected abstract VideoInfo.AudioStream[] getAudioStreams();
|
public abstract String getUploadDate();
|
||||||
protected abstract VideoInfo.VideoStream[] getVideoStreams();
|
public abstract String getThumbnailUrl();
|
||||||
|
public abstract String getUploaderThumbnailUrl();
|
||||||
|
public abstract VideoInfo.AudioStream[] getAudioStreams();
|
||||||
|
public abstract VideoInfo.VideoStream[] getVideoStreams();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ import org.mozilla.javascript.Function;
|
||||||
import org.mozilla.javascript.ScriptableObject;
|
import org.mozilla.javascript.ScriptableObject;
|
||||||
import org.schabi.newpipe.Downloader;
|
import org.schabi.newpipe.Downloader;
|
||||||
import org.schabi.newpipe.services.VideoExtractor;
|
import org.schabi.newpipe.services.VideoExtractor;
|
||||||
import org.schabi.newpipe.MediaFormat;
|
import org.schabi.newpipe.services.MediaFormat;
|
||||||
import org.schabi.newpipe.services.VideoInfo;
|
import org.schabi.newpipe.services.VideoInfo;
|
||||||
import org.schabi.newpipe.VideoPreviewInfo;
|
import org.schabi.newpipe.VideoPreviewInfo;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
android:title="@string/settings_category_appearance_title"
|
android:title="@string/settings_category_appearance_title"
|
||||||
android:textAllCaps="true">
|
android:textAllCaps="true">
|
||||||
|
|
||||||
|
<!-- Not yet working.
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:key="@string/theme_key"
|
android:key="@string/theme_key"
|
||||||
android:title="@string/theme_title"
|
android:title="@string/theme_title"
|
||||||
|
@ -46,6 +47,7 @@
|
||||||
android:entries="@array/theme_description_list"
|
android:entries="@array/theme_description_list"
|
||||||
android:entryValues="@array/theme_list"
|
android:entryValues="@array/theme_list"
|
||||||
android:defaultValue="@string/default_theme_value"/>
|
android:defaultValue="@string/default_theme_value"/>
|
||||||
|
-->
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/show_play_with_kodi_key"
|
android:key="@string/show_play_with_kodi_key"
|
||||||
|
|
Loading…
Reference in New Issue