| /* |
| * Copyright 2010 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.canvas.client; |
| |
| import com.google.gwt.canvas.dom.client.Context2d; |
| import com.google.gwt.junit.DoNotRunWith; |
| import com.google.gwt.junit.Platform; |
| import com.google.gwt.junit.client.GWTTestCase; |
| import com.google.gwt.user.client.ui.RootPanel; |
| |
| /** |
| * Tests {@link Canvas}. |
| * |
| * 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 CanvasTest extends GWTTestCase { |
| private static native boolean isFirefox35OrLater() /*-{ |
| var geckoVersion = @com.google.gwt.dom.client.DOMImplMozilla::getGeckoVersion()(); |
| return (geckoVersion != -1) && (geckoVersion >= 1009001); |
| }-*/; |
| |
| private static native boolean isIE8() /*-{ |
| return $wnd.navigator.userAgent.toLowerCase().indexOf('msie') != -1 && $doc.documentMode == 8; |
| }-*/; |
| |
| private static native boolean isWebkit525OrBefore() /*-{ |
| return @com.google.gwt.dom.client.DOMImplWebkit::isWebkit525OrBefore()(); |
| }-*/; |
| |
| protected Canvas canvas1; |
| |
| protected Canvas canvas2; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.canvas.Canvas"; |
| } |
| |
| /* |
| * If the canvas has no pixels (i.e. either its horizontal dimension or its |
| * vertical dimension is zero) then the method must return the string |
| * "data:,". (This is the shortest data: URL; it represents the empty string |
| * in a text/plain resource.) |
| * |
| * Due to browser inconsistencies, we just check for data:something. |
| */ |
| public void testBlankDataUrl() { |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| // Safari 3.0 does not support toDataURL(), so the following tests are |
| // disabled for Safari 3.0 and before. |
| if (isWebkit525OrBefore()) { |
| return; |
| } |
| |
| canvas1.setHeight("0px"); |
| canvas1.setWidth("0px"); |
| assertEquals(0, canvas1.getOffsetHeight()); |
| assertEquals(0, canvas1.getOffsetWidth()); |
| canvas1.setCoordinateSpaceHeight(0); |
| canvas1.setCoordinateSpaceWidth(0); |
| |
| String dataUrl = canvas1.toDataUrl(); |
| assertTrue("toDataURL() should return data:something", |
| dataUrl.startsWith("data:")); |
| } |
| |
| public void testDataUrlWithType() { |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| // Safari 3.0 does not support toDataURL(), so the following tests are |
| // disabled for Safari 3.0 and before. |
| if (isWebkit525OrBefore()) { |
| return; |
| } |
| |
| canvas1.setHeight("10px"); |
| canvas1.setWidth("10px"); |
| canvas1.setCoordinateSpaceHeight(10); |
| canvas1.setCoordinateSpaceWidth(10); |
| |
| String dataUrl = canvas1.toDataUrl("image/png"); |
| assertTrue("toDataURL(image/png) should return data:image/png[data]", |
| dataUrl.startsWith("data:image/png")); |
| } |
| |
| public void testHeightAndWidth() { |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| canvas1.setHeight("40px"); |
| canvas1.setWidth("60px"); |
| assertEquals(40, canvas1.getOffsetHeight()); |
| assertEquals(60, canvas1.getOffsetWidth()); |
| |
| // resize |
| canvas1.setHeight("41px"); |
| canvas1.setWidth("61px"); |
| assertEquals(41, canvas1.getOffsetHeight()); |
| assertEquals(61, canvas1.getOffsetWidth()); |
| |
| // add 2d context, resize internal size, should have no effect |
| Context2d context = canvas1.getContext2d(); |
| canvas1.setCoordinateSpaceHeight(140); |
| canvas1.setCoordinateSpaceWidth(160); |
| context.fillRect(2, 2, 300, 300); |
| |
| assertEquals(41, canvas1.getOffsetHeight()); |
| assertEquals(61, canvas1.getOffsetWidth()); |
| } |
| |
| public void testInternalHeightAndWidth() { |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| canvas1.setHeight("40px"); |
| canvas1.setWidth("60px"); |
| assertEquals(40, canvas1.getOffsetHeight()); |
| assertEquals(60, canvas1.getOffsetWidth()); |
| |
| // resize internal |
| canvas1.setCoordinateSpaceHeight(140); |
| canvas1.setCoordinateSpaceWidth(160); |
| assertEquals(140, canvas1.getCoordinateSpaceHeight()); |
| assertEquals(160, canvas1.getCoordinateSpaceWidth()); |
| |
| // resize element, should have no effect on internal size |
| canvas1.setHeight("40px"); |
| canvas1.setWidth("60px"); |
| assertEquals(40, canvas1.getOffsetHeight()); |
| assertEquals(60, canvas1.getOffsetWidth()); |
| assertEquals(140, canvas1.getCoordinateSpaceHeight()); |
| assertEquals(160, canvas1.getCoordinateSpaceWidth()); |
| |
| // resize internal |
| canvas1.setCoordinateSpaceHeight(141); |
| canvas1.setCoordinateSpaceWidth(161); |
| assertEquals(141, canvas1.getCoordinateSpaceHeight()); |
| assertEquals(161, canvas1.getCoordinateSpaceWidth()); |
| } |
| |
| public void testIsSupported() { |
| if (canvas1 == null) { |
| assertFalse( |
| "isSupported() should be false when createIfSupported() returns null", |
| Canvas.isSupported()); |
| } else { |
| assertTrue( |
| "isSupported() should be true when createIfSupported() returns non-null", Canvas.isSupported()); |
| } |
| // test the isxxxSupported() call if running known-sup or known-not-sup |
| // browsers |
| if (isFirefox35OrLater()) { |
| assertTrue(Canvas.isSupported()); |
| assertTrue(Canvas.isSupported()); |
| } |
| if (isIE8()) { |
| assertFalse(Canvas.isSupported()); |
| assertFalse(Canvas.isSupported()); |
| } |
| } |
| |
| @Override |
| protected void gwtSetUp() throws Exception { |
| canvas1 = Canvas.createIfSupported(); |
| canvas2 = Canvas.createIfSupported(); |
| |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| RootPanel.get().add(canvas1); |
| RootPanel.get().add(canvas2); |
| } |
| |
| @Override |
| protected void gwtTearDown() throws Exception { |
| if (canvas1 == null) { |
| return; // don't continue if not supported |
| } |
| |
| RootPanel.get().remove(canvas1); |
| RootPanel.get().remove(canvas2); |
| } |
| } |