5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.lang.reflect.InvocationTargetException;
9 import java.lang.reflect.Method;
10 import java.net.URISyntaxException;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.logging.Level;
15 import java.util.logging.Logger;
16 import javax.persistence.EntityManager;
17 import javax.persistence.EntityManagerFactory;
18 import javax.persistence.EntityTransaction;
19 import javax.persistence.Persistence;
20 import nicobrowser.entity.NicoContent;
21 import nicobrowser.entity.NicoContent.Status;
22 import nicobrowser.search.SearchKind;
23 import nicobrowser.search.SearchResult;
24 import nicobrowser.search.SortKind;
25 import nicobrowser.search.SortOrder;
26 import org.apache.http.HttpException;
27 import org.junit.After;
28 import org.junit.AfterClass;
29 import static org.junit.Assert.*;
30 import org.junit.Before;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
38 public class NicoHttpClientTest {
40 static final String OK_MAIL = "niconico.senyou@live.jp";
41 static final String OK_PASS = "piyopiyo";
42 static final String OK_LIST_NO = "1802157";
43 static final String NORMAL_VIDEO = "sm1359820";
44 static final String OFFICIAL_VIDEO = "so8799877";
45 private NicoHttpClient instance;
47 public NicoHttpClientTest() {
51 public static void setUpClass() throws Exception {
55 public static void tearDownClass() throws Exception {
60 instance = new NicoHttpClient();
64 public void tearDown() {
68 * Test of login method, of class NicoHttpClient.
71 public void login() throws HttpException, URISyntaxException, InterruptedException {
72 System.out.println("login");
76 String mail = "test@example.com";
77 String password = "xxxx";
78 boolean result = instance.login(mail, password);
79 assertEquals(false, result);
85 result = instance.login(mail, password);
86 assertEquals(true, result);
89 public void logout() throws URISyntaxException, HttpException, InterruptedException {
90 System.out.println("logout");
93 result = instance.logout();
94 assertEquals(true, result);
96 result = instance.logout();
97 assertEquals(true, result);
101 public void loadMyList() throws URISyntaxException, HttpException, InterruptedException {
102 System.out.println("loadMyList");
104 List<NicoContent> list;
106 list = instance.loadMyList(OK_LIST_NO);
108 assertNotSame(0, list.size());
109 // for (Object o : list) {
110 // System.out.println(o.toString());
113 list = instance.loadMyList("XXXX");
115 assertSame(0, list.size());
119 public void loadMyListDaily() throws URISyntaxException, HttpException, InterruptedException {
120 System.out.println("loadMyListDaily");
121 List<NicoContent> list = instance.loadMyListDaily();
123 assertNotSame(0, list.size());
124 // System.out.println(list.size());
125 // for (Object o : list) {
126 // System.out.println(o.toString());
129 EntityManagerFactory factory;
130 EntityManager manager;
132 factory = Persistence.createEntityManagerFactory("NicoBrowserPU");
133 manager = factory.createEntityManager();
135 EntityTransaction transaction = manager.getTransaction();
139 for (NicoContent c : list) {
143 transaction.commit();
144 } catch (Exception ex) {
145 ex.printStackTrace();
146 transaction.rollback();
155 public void getVideoInfo() throws URISyntaxException, HttpException, InterruptedException, IOException {
156 System.out.println("getFlv");
158 instance.login(OK_MAIL, OK_PASS);
160 URL str = instance.getVideoInfo(NORMAL_VIDEO).getVideoUrl();
161 System.out.println(str);
162 } catch (IOException ex) {
164 Logger.getLogger(NicoHttpClientTest.class.getName()).log(Level.SEVERE, null, ex);
169 public void getVideoInfo_Official() throws URISyntaxException, HttpException, InterruptedException, IOException {
170 System.out.println("getVideoInfo_Official");
171 instance.login(OK_MAIL, OK_PASS);
172 VideoInfo vi = instance.getVideoInfo(OFFICIAL_VIDEO);
173 assertNotSame(OFFICIAL_VIDEO, vi.getRealVideoId());
176 public void downLoad() throws URISyntaxException, IOException, HttpException, InterruptedException {
177 System.out.println("downLoad");
179 instance.login(OK_MAIL, OK_PASS);
182 VideoInfo vi = instance.getVideoInfo("sm183036");
183 instance.getFlvFile(vi, "sm183036", NicoContent.Status.GET_INFO, false, ProgressListener.EMPTY_LISTENER);
184 } catch (IOException ex) {
185 Logger.getLogger(NicoHttpClientTest.class.getName()).log(Level.SEVERE, null, ex);
191 * Test of getFlvFile method, of class NicoHttpClient.
193 public void getFlvFile_String() throws HttpException, InterruptedException, URISyntaxException {
194 System.out.println("getFlvFile");
195 String videoID = "sm1097445";
196 instance.login(OK_MAIL, OK_PASS);
199 VideoInfo vi = instance.getVideoInfo(videoID);
200 result = instance.getFlvFile(vi);
201 System.out.println(result);
202 assertNotSame(Status.GET_INFO, result);
203 } catch (Exception ex) {
204 Logger.getLogger(NicoHttpClientTest.class.getName()).log(Level.SEVERE, null, ex);
209 // http://www.nicovideo.jp/watch/1231042440
210 // 【亡き王女の為のセプテット・ツェペシュの幼き末裔】Priere -プリエール-
212 VideoInfo vi = instance.getVideoInfo("1231042440");
213 result = instance.getFlvFile(vi);
214 fail("権限が無い動画を取得しようとした場合は例外が送出される");
215 } catch (IOException ex) {
216 Logger.getLogger(NicoHttpClientTest.class.getName()).log(Level.SEVERE, null, ex);
221 public void getFlvFile_Official() throws IOException, URISyntaxException, HttpException, InterruptedException {
222 // 公式動画(ビデオIDが実際と異なる)のダウンロード
223 instance.login(OK_MAIL, OK_PASS);
224 VideoInfo vi = instance.getVideoInfo(OFFICIAL_VIDEO);
225 GetFlvResult result = instance.getFlvFile(vi);
226 assertNotSame(Status.GET_INFO, result.getStatus());
227 assertNull("公式動画からは著者は取得できない", result.getAuthor());
231 public void search() throws URISyntaxException, InterruptedException, HttpException, IOException {
232 System.out.println("search");
233 instance.login(OK_MAIL, OK_PASS);
235 SearchResult result = instance.search(SearchKind.KeyWord, "初音ミク", SortKind.PlayTimes, SortOrder.Descending, 1);
236 ArrayList<NicoContent> conts = result.getContents();
237 System.out.println("検索結果件数: " + conts.size());
238 assertEquals("1ページの上限32件がヒット", 32, conts.size());
239 assertTrue(result.getPages().size() > 0);
242 public void loadMyMovie() throws URISyntaxException, InterruptedException, HttpException, IOException {
243 System.out.println("search");
244 instance.login(OK_MAIL, OK_PASS);
249 cont = instance.loadMyMovie("sm9");
251 assertEquals("sm9", cont.getNicoId());
253 // チャンネル動画はnull(statusがfailなので)
254 cont = instance.loadMyMovie("1228201771");
258 cont = instance.loadMyMovie("sm1");
262 cont = instance.loadMyMovie("xxx");
267 * マイリスト登録するテストケースだが, 不完全. 登録できなかった場合もテストケースは正常終了する.
270 public void addMyList() throws URISyntaxException, HttpException, InterruptedException, IOException {
271 instance.login(OK_MAIL, OK_PASS);
273 instance.addMyList("5681871", "sm9477049");
277 public void getCommentFile() throws URISyntaxException, HttpException, InterruptedException, Exception {
278 final String comm = NORMAL_VIDEO + "comment";
279 final String tcomm = NORMAL_VIDEO + "tcomment.xml";
280 File commFile = new File(comm + ".xml");
281 File tcommFile = new File(tcomm);
283 assertFalse("ファイルを削除してください", commFile.exists());
284 assertFalse("ファイルを削除してください", tcommFile.exists());
286 instance.login(OK_MAIL, OK_PASS);
287 VideoInfo vi = instance.getVideoInfo(NORMAL_VIDEO);
288 instance.getCommentFile(vi, comm);
289 instance.getTCommentFile(vi, tcomm);
291 assertTrue(commFile.exists());
292 assertTrue(tcommFile.exists());
296 public void getCommentFile_Official() throws URISyntaxException, HttpException, InterruptedException, Exception {
297 final String comm = OFFICIAL_VIDEO + "comment";
298 final String tcomm = OFFICIAL_VIDEO + "tcomment.xml";
299 File commFile = new File(comm + ".xml");
300 File tcommFile = new File(tcomm);
302 assertFalse("ファイルを削除してください", commFile.exists());
303 assertFalse("ファイルを削除してください", tcommFile.exists());
305 instance.login(OK_MAIL, OK_PASS);
306 VideoInfo vi = instance.getVideoInfo(OFFICIAL_VIDEO);
307 instance.getCommentFile(vi, comm);
308 instance.getTCommentFile(vi, tcomm);
310 assertTrue(commFile.exists());
311 assertTrue(tcommFile.exists());
318 public void testGetTitleInWatchPageZero() throws NoSuchMethodException, IOException, IllegalAccessException,
319 IllegalArgumentException, InvocationTargetException {
320 final String title = "【MMD】 WAVEFILE fullver. 【モーション完成】";
321 final Method m = NicoHttpClient.class.getDeclaredMethod("getTitleInWatchPage", InputStream.class);
322 m.setAccessible(true);
324 final FileInputStream fisHarajuku = new FileInputStream(new File("testdata/hara_watch.html"));
325 final String titleHarajuku = (String) m.invoke(instance, fisHarajuku);
327 assertEquals(title, titleHarajuku);
329 final FileInputStream fisZero = new FileInputStream(new File("testdata/zero_watch.html"));
330 final String titleZero = (String) m.invoke(instance, fisZero);
332 assertEquals(title, titleZero);