Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2016-01-06 15:13:03 +01:00
commit 37d1f59132
8 changed files with 271 additions and 18 deletions

View File

@ -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());
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;
/** /**

View File

@ -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.

View File

@ -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();
} }

View File

@ -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;

View File

@ -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"