diff --git a/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeSearchEngineTest.java b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeSearchEngineTest.java new file mode 100644 index 000000000..c01474416 --- /dev/null +++ b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeSearchEngineTest.java @@ -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 + * 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 . + */ + +public class YoutubeSearchEngineTest extends AndroidTestCase { + private SearchEngine.Result result; + private ArrayList 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()); + } + } +} diff --git a/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorDefaultTest.java b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorDefaultTest.java new file mode 100644 index 000000000..6f6ecaaad --- /dev/null +++ b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorDefaultTest.java @@ -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 + * 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 . + */ + +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); + } + } +} diff --git a/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorGemaTest.java b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorGemaTest.java new file mode 100644 index 000000000..5e5cb40f6 --- /dev/null +++ b/app/src/androidTest/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractorGemaTest.java @@ -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 + * 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 . + */ + + +// 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); + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/ActionBarHandler.java b/app/src/main/java/org/schabi/newpipe/ActionBarHandler.java index 3eef40a1c..490b8d6f4 100644 --- a/app/src/main/java/org/schabi/newpipe/ActionBarHandler.java +++ b/app/src/main/java/org/schabi/newpipe/ActionBarHandler.java @@ -16,6 +16,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ArrayAdapter; +import org.schabi.newpipe.services.MediaFormat; import org.schabi.newpipe.services.VideoInfo; /** diff --git a/app/src/main/java/org/schabi/newpipe/MediaFormat.java b/app/src/main/java/org/schabi/newpipe/services/MediaFormat.java similarity index 98% rename from app/src/main/java/org/schabi/newpipe/MediaFormat.java rename to app/src/main/java/org/schabi/newpipe/services/MediaFormat.java index f3f6348f0..867dc3035 100644 --- a/app/src/main/java/org/schabi/newpipe/MediaFormat.java +++ b/app/src/main/java/org/schabi/newpipe/services/MediaFormat.java @@ -1,4 +1,4 @@ -package org.schabi.newpipe; +package org.schabi.newpipe.services; /** * Created by Adam Howard on 08/11/15. diff --git a/app/src/main/java/org/schabi/newpipe/services/VideoExtractor.java b/app/src/main/java/org/schabi/newpipe/services/VideoExtractor.java index e9735b32e..f57ef0894 100644 --- a/app/src/main/java/org/schabi/newpipe/services/VideoExtractor.java +++ b/app/src/main/java/org/schabi/newpipe/services/VideoExtractor.java @@ -106,21 +106,23 @@ public abstract class VideoExtractor { return videoInfo; } - //todo: add licence field - protected abstract int getErrorCode(); - protected abstract String getErrorMessage(); - protected abstract String getVideoUrl(String videoId); - protected abstract String getVideoId(String siteUrl); - protected abstract int getTimeStamp(); - protected abstract String getTitle(); - protected abstract String getDescription(); - protected abstract String getUploader(); - protected abstract int getLength(); - protected abstract long getViews(); - protected abstract String getUploadDate(); - protected abstract String getThumbnailUrl(); - protected abstract String getUploaderThumbnailUrl(); - protected abstract VideoInfo.AudioStream[] getAudioStreams(); - protected abstract VideoInfo.VideoStream[] getVideoStreams(); + public abstract int getErrorCode(); + public abstract String getErrorMessage(); + + //todo: remove these functions, or make them static, otherwise its useles, to have them here + public abstract String getVideoUrl(String videoId); + public abstract String getVideoId(String siteUrl); + /////////////////////////////////////////////////////////////////////////////////////////// + public abstract int getTimeStamp(); + public abstract String getTitle(); + public abstract String getDescription(); + public abstract String getUploader(); + public abstract int getLength(); + public abstract long getViews(); + public abstract String getUploadDate(); + public abstract String getThumbnailUrl(); + public abstract String getUploaderThumbnailUrl(); + public abstract VideoInfo.AudioStream[] getAudioStreams(); + public abstract VideoInfo.VideoStream[] getVideoStreams(); } diff --git a/app/src/main/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractor.java b/app/src/main/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractor.java index 659b0b7e4..84548539a 100644 --- a/app/src/main/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractor.java +++ b/app/src/main/java/org/schabi/newpipe/services/youtube/YoutubeVideoExtractor.java @@ -14,7 +14,7 @@ import org.mozilla.javascript.Function; import org.mozilla.javascript.ScriptableObject; import org.schabi.newpipe.Downloader; 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.VideoPreviewInfo; import org.xmlpull.v1.XmlPullParser; diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 045e95599..22f9644fe 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -39,6 +39,7 @@ android:title="@string/settings_category_appearance_title" android:textAllCaps="true"> +