blob: 115c10711606bf263f0b06b78b5dcd5a48c58887 [file] [log] [blame]
/*
* 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);
}
}