/* * Copyright 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.media.client; import com.google.gwt.dom.client.MediaElement; import com.google.gwt.junit.DoNotRunWith; import com.google.gwt.junit.Platform; import com.google.gwt.media.dom.client.MediaError; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.RootPanel; /** * Tests {@link Video}. * * Because HtmlUnit does not support HTML5, you will need to run these tests * manually in order to have them run. To do that, go to "run configurations" or * "debug configurations", select the test you would like to run, and put this * line in the VM args under the arguments tab: -Dgwt.args="-runStyle Manual:1" */ @DoNotRunWith(Platform.HtmlUnitUnknown) public class VideoTest extends MediaTest { protected Video video; final static String posterUrl = "poster.jpg"; final static String videoUrlH264 = "smallh264.mp4"; final static String videoFormatH264 = "video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\""; final static String videoUrlOgv = "smalltheora.ogv"; final static String videoFormatOgv = "video/ogg; codecs=\"theora, vorbis\""; final static int videoWidth = 64; final static int videoHeight = 36; @Override public MediaBase getMedia() { return video; } @Override public String getModuleName() { return "com.google.gwt.media.MediaTest"; } public void testPoster() { if (video == null) { return; // don't continue if not supported } video.setPoster(posterUrl); String poster = video.getPoster(); assertEquals(posterUrl, poster.substring(poster.lastIndexOf('/') + 1)); } public void testSize() { if (video == null) { return; // don't continue if not supported } int width = 100; int height = 200; video.setWidth(width + "px"); video.setHeight(height + "px"); assertEquals(width, video.getOffsetWidth()); assertEquals(height, video.getOffsetHeight()); } // test that the deprecated src constructor works public void testSrcConstructor() { if (video == null) { return; // don't continue if not supported } Video video = new Video("http://google.com/video"); assertNotNull(video); assertEquals("http://google.com/video", video.getSrc()); video.setSrc(""); video.load(); RootPanel.get().remove(video); } public void testVideoSize() { if (video == null) { return; // don't continue if not supported } // the media resource needs time to load delayTestFinish(20 * 1000); // wait a little, then make sure it loaded new Timer() { @Override public void run() { MediaError error = video.getError(); if (error != null) { fail("Media error (" + error.getCode() + ")"); } assertEquals(videoWidth, video.getVideoWidth()); assertEquals(videoHeight, video.getVideoHeight()); finishTest(); } }.schedule(15 * 1000); video.play(); } @Override protected void gwtSetUp() throws Exception { video = Video.createIfSupported(); if (video == null) { return; // don't continue if not supported } String canPlayH264 = video.canPlayType(videoFormatH264); String canPlayOgv = video.canPlayType(videoFormatOgv); if (canPlayH264.equals(MediaElement.CAN_PLAY_PROBABLY)) { video.setSrc(videoUrlH264); } else if (canPlayOgv.equals(MediaElement.CAN_PLAY_PROBABLY)) { video.setSrc(videoUrlOgv); } else if (canPlayH264.equals(MediaElement.CAN_PLAY_MAYBE)) { video.setSrc(videoUrlH264); } else if (canPlayOgv.equals(MediaElement.CAN_PLAY_MAYBE)) { video.setSrc(videoUrlOgv); } else { throw new Exception("Could not find suitable video format"); } RootPanel.get().add(video); } @Override protected void gwtTearDown() throws Exception { if (video == null) { return; // don't continue if not supported } // clean up video.pause(); video.setSrc(""); video.load(); RootPanel.get().remove(video); } }