| /* | |
| * 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.user.client; | |
| import com.google.gwt.event.dom.client.CanPlayThroughEvent; | |
| import com.google.gwt.event.dom.client.CanPlayThroughHandler; | |
| import com.google.gwt.event.dom.client.EndedEvent; | |
| import com.google.gwt.event.dom.client.EndedHandler; | |
| import com.google.gwt.event.dom.client.HasAllMediaHandlers; | |
| import com.google.gwt.event.dom.client.ProgressEvent; | |
| import com.google.gwt.event.dom.client.ProgressHandler; | |
| import com.google.gwt.junit.client.GWTTestCase; | |
| import com.google.gwt.media.client.Audio; | |
| import com.google.gwt.media.client.Video; | |
| import com.google.gwt.user.client.ui.RootPanel; | |
| import com.google.gwt.user.client.ui.Widget; | |
| /** | |
| * Test Case for sinking of media events. | |
| */ | |
| public class MediaEventsSinkTest extends GWTTestCase { | |
| private static class CanPlayThroughHandlerImpl extends HandlerImpl implements | |
| CanPlayThroughHandler { | |
| @Override | |
| public void onCanPlayThrough(CanPlayThroughEvent event) { | |
| eventFired(); | |
| } | |
| } | |
| private static class EndedHandlerImpl extends HandlerImpl implements EndedHandler { | |
| @Override | |
| public void onEnded(EndedEvent event) { | |
| eventFired(); | |
| } | |
| } | |
| private static class HandlerImpl { | |
| private boolean fired = false; | |
| public void eventFired() { | |
| fired = true; | |
| } | |
| boolean hasEventFired() { | |
| return fired; | |
| } | |
| } | |
| private static class ProgressHandlerImpl extends HandlerImpl implements ProgressHandler { | |
| @Override | |
| public void onProgress(ProgressEvent event) { | |
| eventFired(); | |
| } | |
| } | |
| /** | |
| * Interface to create a widget. | |
| * | |
| * @param <W> the widget type | |
| */ | |
| private interface WidgetCreator<W extends Widget & HasAllMediaHandlers> { | |
| /** | |
| * Create a widget to test. | |
| * | |
| * @return the new widget | |
| */ | |
| W createWidget(); | |
| } | |
| @Override | |
| public String getModuleName() { | |
| return "com.google.gwt.user.User"; | |
| } | |
| public void testAudioEventSink() { | |
| // skip tests on browsers that do not support audio | |
| if (!Audio.isSupported()) { | |
| return; | |
| } | |
| verifyMediaEventSink(new WidgetCreator<Audio>() { | |
| @Override | |
| public Audio createWidget() { | |
| return Audio.createIfSupported(); | |
| } | |
| }); | |
| } | |
| public void testEventBitsUnmapped() throws Exception { | |
| ProgressEvent.getType(); | |
| assertEquals(-1, Event.getTypeInt("progress")); | |
| assertEquals(-1, Event.getTypeInt("ended")); | |
| assertEquals(-1, Event.getTypeInt("canplaythrough")); | |
| } | |
| public void testVideoEventSink() { | |
| // skip tests on browsers that do not support video | |
| if (!Video.isSupported()) { | |
| return; | |
| } | |
| verifyMediaEventSink(new WidgetCreator<Video>() { | |
| @Override | |
| public Video createWidget() { | |
| return Video.createIfSupported(); | |
| } | |
| }); | |
| } | |
| @Override | |
| protected void gwtTearDown() throws Exception { | |
| // clean up after ourselves | |
| RootPanel.get().clear(); | |
| super.gwtTearDown(); | |
| } | |
| private <W extends Widget & HasAllMediaHandlers> void verifyCanPlayThroughEventSink(W w) { | |
| CanPlayThroughHandlerImpl handler = new CanPlayThroughHandlerImpl(); | |
| w.addCanPlayThroughHandler(handler); | |
| assertFalse(handler.hasEventFired()); | |
| w.fireEvent(new CanPlayThroughEvent() { | |
| }); | |
| assertTrue(handler.hasEventFired()); | |
| } | |
| private <W extends Widget & HasAllMediaHandlers> void verifyEndedEventSink(W w) { | |
| EndedHandlerImpl handler = new EndedHandlerImpl(); | |
| w.addEndedHandler(handler); | |
| assertFalse(handler.hasEventFired()); | |
| w.fireEvent(new EndedEvent() { | |
| }); | |
| assertTrue(handler.hasEventFired()); | |
| } | |
| private void verifyMediaEventSink(WidgetCreator<?>... creators) { | |
| for (WidgetCreator<?> creator : creators) { | |
| verifyProgressEventSink(creator.createWidget()); | |
| verifyCanPlayThroughEventSink(creator.createWidget()); | |
| verifyEndedEventSink(creator.createWidget()); | |
| } | |
| } | |
| private <W extends Widget & HasAllMediaHandlers> void verifyProgressEventSink(W w) { | |
| ProgressHandlerImpl handler = new ProgressHandlerImpl(); | |
| w.addProgressHandler(handler); | |
| assertFalse(handler.hasEventFired()); | |
| w.fireEvent(new ProgressEvent() { | |
| }); | |
| assertTrue(handler.hasEventFired()); | |
| } | |
| } |