package com.googlecode.gchart.gcharttestapp.client; //<<1 // Required imports: import com.googlecode.gchart.client.GChartCanvasLite; import com.googlecode.gchart.client.GChartCanvasFactory; import com.googlecode.gchart.client.GChart; import com.googlecode.gchart.client.GChart.LegendLocation; import com.google.gwt.widgetideas.graphics.client.GWTCanvas; import com.google.gwt.widgetideas.graphics.client.Color; //>>1 import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; /** * * Displays the test chart in the browser, and checks the HTML * generated against previous, visually validated, browser * output HTML hash codes to see if HTML output from the test * has changed (possibly due to an error). * * As long as GChart and the test set itself has not changed, * these tests can be performed by first running in hosted * mode, then clicking on the "Compile/Browse" button. If * "Test passed" is displayed in hosted mode and also in * Firefox after the compile (this assumes Firefox is your default browser) * it means that the generated HTML has not changed since * the last time it was visually inspected--test passed. * * If the test or GChart changes so as to change browser output, * you will have to visually verify the charts, and then (assuming the * new charts are correct) enter the new hashcodes. * * In the most common case where the test and output are unchanged, * the test should go through very quickly. * */ public class GChartTestApp implements EntryPoint { //<<2 // Paste these lines into the top-level GWT class that kicks off your // application (the one that "implements EntryPoint"): static { final class GWTCanvasBasedCanvasLite extends GWTCanvas implements GChartCanvasLite { // GChartCanvasLite requires CSS/RGBA color strings, but // GWTCanvas uses its own Color class instead, so we wrap: public void setStrokeStyle(String cssColor) { setStrokeStyle(new Color(cssColor)); } public void setFillStyle(String cssColor) { setFillStyle(new Color(cssColor)); } // Note: all other GChartCanvasLite methods (lineTo, moveTo, // arc, etc.) are directly inherited from GWTCanvas, so no // wrapper methods are needed. } final class GWTCanvasBasedCanvasFactory implements GChartCanvasFactory { public GChartCanvasLite create() { GChartCanvasLite result = new GWTCanvasBasedCanvasLite(); return result; } } // This line "teaches" GChart how to create the canvas // widgets it needs to render any continuous, // non-rectangular, chart aspects (solid fill pie slices, // continously connected lines, etc.) clearly and // efficiently. It's generally best to do this exactly once, // when your entire GWT application loads. GChart.setCanvasFactory(new GWTCanvasBasedCanvasFactory()); } //>>2 // convenience method to create a short, class-name-based title static String getTitle(Object obj) { String result = obj.getClass().getName(); result = result.substring(result.lastIndexOf(".")+1); return "


" + result + "

"; } /* Linear congruent random number generator. * * Cannot use GWT's Math.random() because, for automated * testing, we require that the exact same random sequence * be used each time (GWT does not support the JDK's more * generic Random class, which would have allowed this). * * Constants are from Knuth via Numerical Recipes in C. * */ static double i = 0; static double rnd() { final int m = 217728; final int a = 84589; final int c = 45989; i = (a*i + c) % m; return i/m; } /* * Allows us to quickly check if test charts changed since last time * they were manually inspected, thus eliminating the many tedious * re-inspections I used to have to do. * * Whenever the test changes, or GChart changes in a way that changes * generated HTML, manual chart re-inspection is needed and * the various hashcodes below need to be re-entered. * * Note that sometimes the hosted mode cold-start hash code is generated by * a refresh, so if you get the same hash code the first time * you press refresh, try again to produce the second, refresh, hash code. * * Note, that if you open the compiled app directly from the file system * rather than via the Compile/Browse button, Firefox produces a different * HTML/hash code, so you must run the test via the Compile/Browse button. * */ // private static void checkHashCode() { // // The hosted-mode HTML varies depending on browser, other factors. These // // are the hash codes whose charts have been visually verified as OK. // // (add to this list as new browsers, etc. are visually certified. List //// must be regenerated whenever test set charts change). // final HashSet hashCodes = new HashSet(); // hashCodes.add("-69786332"); // hosted mode browser //// add more verified hash codes here (e.g. one for each browser tested) // String hashCode = "" + DOM.getInnerHTML(RootPanel.getBodyElement()).hashCode(); // // if (!hashCodes.contains(hashCode)) { // System.out.println("***Hashcode changed!! New hashcode="+hashCode + " Time=" + new Date()); // Window.alert("***Hash code changed!! New hashcode = " + hashCode); // } // else { // System.out.println("Previously verified hashcode recognized. Hashcode=" + hashCode); // Window.alert("Previously verified hashcode recognized. Hashcode=" + hashCode); // } // // } static private class AddOneChart implements Command { boolean needsUpdate = true; GChart gchart; AddOneChart(GChart gchart, boolean needsUpdate) { this.gchart = gchart; this.needsUpdate = needsUpdate; } public void execute() { RootPanel.get("testappcharts").add(new HTML(getTitle(gchart))); RootPanel.get("testappcharts").add(gchart); if (needsUpdate) gchart.update(); } } static void addChart(GChart gchart) { DeferredCommand.addCommand(new AddOneChart(gchart, true)); } static void addChartNoUpdate(GChart gchart) { DeferredCommand.addCommand(new AddOneChart(gchart, false)); } public void onModuleLoad() { // thinking about retiring these tests: // addChart(new GChartExample11(0,2,false)); // addChart(new GChartExample11(0,3,false)); // addChart(new GChartExample11(0,4,false)); // addChart(new GChartExample11(0,5,false)); // addChart(new GChartExample11(0,6,false)); // addChart(new GChartExample11(0,7,false)); // addChart(new GChartExample11(0,8,false)); // addChart(new TestGChart40()); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart41a()); // }}); // To focus on a single test, simply use Eclipse's Source, Toggle comment DeferredCommand.addCommand(new Command() { public void execute() { // addChart(new GChartExample00()); // addChart(new GChartExample00a()); // addChart(new GChartExample00b()); // addChart(new GChartExample00c()); // addChart(new GChartExample01()); // addChart(new GChartExample01a(3)); // addChart(new GChartExample01a(0)); // addChart(new GChartExample01b()); // addChart(new GChartExample01c()); // addChart(new GChartExample02()); // addChart(new GChartExample03()); // addChart(new GChartExample04()); // addChart(new GChartExample04a()); // addChart(new GChartExample04b()); // addChart(new GChartExample05()); // addChart(new GChartExample06()); // addChart(new GChartExample07()); // addChart(new GChartExample08()); // addChart(new GChartExample09()); // addChart(new GChartExample10()); // addChart(new GChartExample11(0,1,true)); // addChart(new GChartExample11(0,1,false)); // addChart(new GChartExample11(1,1,false)); // addChart(new GChartExample11(2,1,false)); // addChart(new GChartExample11(3,1,false)); // addChart(new GChartExample12()); // addChart(new GChartExample14()); // addChart(new GChartExample15()); // addChart(new GChartExample15a()); // addChart(new GChartExample15b()); // addChart(new GChartExample16()); // addChart(new GChartExample17()); // addChart(new GChartExample17a()); // addChart(new GChartExample18()); // addChart(new GChartExample18a()); // addChart(new GChartExample19()); // addChart(new GChartExample20()); // addChart(new GChartExample20a()); // addChart(new GChartExample21()); // addChart(new GChartExample22()); // addChart(new GChartExample22a()); // addChart(new GChartExample23(false, false)); // addChart(new GChartExample23(false, true)); // addChart(new GChartExample23(true, false)); // addChart(new GChartExample23(true, true)); // addChart(new GChartExample24()); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new GChartExample25()); // }}); // addChart(new TestGChart00()); // addChartNoUpdate(new TestGChart01(0,0)); // addChartNoUpdate(new TestGChart01(1,0)); // addChartNoUpdate(new TestGChart01(2,0)); // addChartNoUpdate(new TestGChart01(3,0)); // addChartNoUpdate(new TestGChart01(0,1)); // addChartNoUpdate(new TestGChart01(1,1)); // addChartNoUpdate(new TestGChart01(2,1)); // addChartNoUpdate(new TestGChart01(3,1)); // addChartNoUpdate(new TestGChart01(0,2)); // addChartNoUpdate(new TestGChart01(1,2)); // addChartNoUpdate(new TestGChart01(2,2)); // addChartNoUpdate(new TestGChart01(3,2)); // addChart(new TestGChart01a()); // addChart(new TestGChart02()); // addChart(new TestGChart03()); // addChart(new TestGChart04()); // addChart(new TestGChart04a()); // addChart(new TestGChart05(false)); // addChart(new TestGChart05(true)); // addChart(new TestGChart06(false)); // addChart(new TestGChart06(true)); // addChart(new TestGChart07(0,0,10,1)); // addChart(new TestGChart07(10,0,10,1)); // addChart(new TestGChart07(-10,0,10,1)); // addChart(new TestGChart07(0,10,10,1)); // addChart(new TestGChart07(0,-10,10,1)); // addChart(new TestGChart07(0,0,30,1)); // addChart(new TestGChart07(0,0,10,3)); // addChart(new TestGChart07(0,0,10,-1)); // addChart(new TestGChart07(0,0,10,-2)); // addChart(new TestGChart07(0,0,10,-3)); // addChart(new TestGChart07a()); // addChart(new TestGChart08()); // addChart(new TestGChart09()); // addChart(new TestGChart10()); // addChart(new TestGChart11()); // addChart(new TestGChart12()); // addChart(new TestGChart14()); // addChart(new TestGChart14a()); // addChart(new TestGChart14b()); // addChart(new TestGChart14c()); // addChart(new TestGChart14d()); // addChart(new TestGChart15(1)); // addChart(new TestGChart15(0)); // addChart(new TestGChart16(0,1)); // addChart(new TestGChart16(1,1)); // addChart(new TestGChart16(2,1)); // addChart(new TestGChart16(3,1)); // addChart(new TestGChart16(4,1)); // addChart(new TestGChart16(5,1)); // addChart(new TestGChart16(0,10)); // addChart(new TestGChart16(1,10)); // addChart(new TestGChart16(2,10)); // addChart(new TestGChart16(3,10)); // addChart(new TestGChart16(4,10)); // addChart(new TestGChart16(5,10)); // addChart(new TestGChart17()); // addChart(new TestGChart17a()); // addChart(new TestGChart17b()); // addChart(new TestGChart18()); // addChart(new TestGChart19(0)); // addChart(new TestGChart19(1)); // addChart(new TestGChart19(2)); // addChart(new TestGChart19(3)); // addChart(new TestGChart20()); // addChart(new TestGChart20a()); // // extra layer to stop "this script is taking too long" browser msg DeferredCommand.addCommand(new Command() { public void execute() { // addChart(new TestGChart21()); // addChart(new TestGChart22(false)); // addChart(new TestGChart22(true)); // addChart(new TestGChart23(1)); // addChart(new TestGChart23(2)); // addChart(new TestGChart23(3)); // addChart(new TestGChart24(1)); // addChart(new TestGChart24(2)); // addChart(new TestGChart25(8,1,1,1,20,20)); // addChart(new TestGChart25(8,2,2,1,1,1)); // addChart(new TestGChart25(8,5,5,1,0,0)); // addChart(new TestGChart25(8,1,1,.5,10,10)); // addChart(new TestGChart25(8,2,2,.5,10,10)); // addChart(new TestGChart25(8,4,4,.5,10,10)); // addChart(new TestGChart25(8,8,8,.5,10,10)); // addChart(new TestGChart25(8,1,1,1.5,20,20)); // addChart(new TestGChart25b(8,1,0,1.5,20,20)); // addChart(new TestGChart25b(8,5,5,1,0,0)); // addChart(new TestGChart26()); // addChart(new TestGChart27()); // addChart(new TestGChart28(false, 1, false)); // addChart(new TestGChart28(true, 1, false)); // addChart(new TestGChart28(false, 2, false)); // addChart(new TestGChart28(true, 2, false)); // addChart(new TestGChart28(false, 4, false)); // addChart(new TestGChart28(true, 4, false)); // // addChart(new TestGChart28(false, 1, true)); // addChart(new TestGChart28(true, 1, true)); // addChart(new TestGChart28(false, 2, true)); // addChart(new TestGChart28(true, 2, true)); // addChart(new TestGChart28(false, 4, true)); //// Hover testing charts start here // addChart(new TestGChart28(true, 4, true)); // addChart(new TestGChart29()); // addChart(new TestGChart30(false, false)); // addChart(new TestGChart30(true, false)); // addChart(new TestGChart30(false, true)); // addChart(new TestGChart30(true, true)); // addChart(new TestGChart31()); // addChart(new TestGChart32()); //// Not a GCchart, a ScrollPanel that contains a Gchart: // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart33()); // }}); // addChart(new TestGChart34()); // addChart(new TestGChart35()); // addChart(new TestGChart36(GChart.TouchedPointUpdateOption.TOUCHED_POINT_CLEARED)); // addChart(new TestGChart36(GChart.TouchedPointUpdateOption.TOUCHED_POINT_LOCKED)); // addChart(new TestGChart36(GChart.TouchedPointUpdateOption.TOUCHED_POINT_UPDATED)); // addChart(new TestGChart37(GChart.TouchedPointUpdateOption.TOUCHED_POINT_CLEARED)); // addChart(new TestGChart37(GChart.TouchedPointUpdateOption.TOUCHED_POINT_LOCKED)); // addChart(new TestGChart37(GChart.TouchedPointUpdateOption.TOUCHED_POINT_UPDATED)); // addChart(new TestGChart38(GChart.TouchedPointUpdateOption.TOUCHED_POINT_CLEARED)); // addChart(new TestGChart38(GChart.TouchedPointUpdateOption.TOUCHED_POINT_LOCKED)); // addChart(new TestGChart38(GChart.TouchedPointUpdateOption.TOUCHED_POINT_UPDATED)); // addChart(new TestGChart39()); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart41()); // }}); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart41a()); // }}); // addChart(new TestGChart42()); // addChart(new TestGChart43()); // addChart(new TestGChart44()); // addChart(new TestGChart45(0)); // addChart(new TestGChart45(1)); // addChart(new TestGChart45(2)); // addChart(new TestGChart45(3)); // addChart(new TestGChart45(4)); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart46()); // }}); // addChart(new TestGChart47(0,1,5)); // addChart(new TestGChart47(1,1,5)); // addChart(new TestGChart47(2,1,5)); // addChart(new TestGChart47(3,1,5)); // addChart(new TestGChart47(4,1,5)); // addChart(new TestGChart47(5,1,5)); // addChart(new TestGChart47(6,1,5)); // addChart(new TestGChart47(7,1,5)); // addChart(new TestGChart47(0,0,2)); // addChart(new TestGChart47(1,0,2)); // addChart(new TestGChart47(2,0,2)); // addChart(new TestGChart47(3,0,2)); // addChart(new TestGChart47(4,0,2)); // addChart(new TestGChart47(5,0,2)); // addChart(new TestGChart47(6,0,2)); // addChart(new TestGChart47(7,0,2)); // addChart(new TestGChart47(0,1,3)); // addChart(new TestGChart47(1,1,3)); // addChart(new TestGChart47(2,1,3)); // addChart(new TestGChart47(3,1,3)); // addChart(new TestGChart47(4,1,3)); // addChart(new TestGChart47(5,1,3)); // addChart(new TestGChart47(6,1,3)); // addChart(new TestGChart47(7,1,3)); // addChart(new TestGChart47(8,3,5)); // addChart(new TestGChart47(9,3,5)); // addChart(new TestGChart48(3)); // addChart(new TestGChart48(4)); // addChart(new TestGChart48(5)); // addChart(new TestGChart48(6)); // addChart(new TestGChart48(8)); // addChart(new TestGChart48(9)); // addChart(new TestGChart48(10)); // addChart(new TestGChart49(3,false, false)); // addChart(new TestGChart49(3, false, true)); // addChart(new TestGChart49(3,true, false)); // addChart(new TestGChart49(3, true, true)); // addChart(new TestGChart50(GChart.TickLocation.CENTERED,0)); // addChart(new TestGChart50(GChart.TickLocation.INSIDE,0)); // addChart(new TestGChart50(GChart.TickLocation.OUTSIDE,0)); // addChart(new TestGChart50(GChart.TickLocation.CENTERED,5)); // addChart(new TestGChart50(GChart.TickLocation.INSIDE,5)); // addChart(new TestGChart50(GChart.TickLocation.OUTSIDE,5)); // addChart(new TestGChart51(0)); // addChart(new TestGChart51(1)); // addChart(new TestGChart52()); // addChart(new TestGChart53()); // addChart(new TestGChart54()); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart55()); // }}); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart55a()); // }}); // addChart(new TestGChart56()); // // addChart(new TestGChart57()); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart57a()); // }}); // DeferredCommand.addCommand(new Command() { public void execute() { // RootPanel.get().add(new TestGChart58()); // }}); addChart(new TestGChart59(LegendLocation.OUTSIDE_LEFT,0,0, null)); addChart(new TestGChart59(LegendLocation.OUTSIDE_RIGHT,0,0, null)); addChart(new TestGChart59(LegendLocation.INSIDE_UPPERLEFT,5,-5, null)); addChart(new TestGChart59(LegendLocation.INSIDE_UPPERRIGHT,-5,-5, null)); addChart(new TestGChart59(LegendLocation.INSIDE_LOWERLEFT,0,0, null)); addChart(new TestGChart59(LegendLocation.INSIDE_LOWERRIGHT,-10,10, null)); addChart(new TestGChart59(LegendLocation.OUTSIDE_LEFT,0,0, new HTML("x
y
z"))); addChart(new TestGChart59(LegendLocation.OUTSIDE_RIGHT,0,0, new HTML("x
y
z"))); addChart(new TestGChart59(LegendLocation.INSIDE_UPPERLEFT,5,-5, new HTML("x
y
z"))); addChart(new TestGChart59(LegendLocation.INSIDE_UPPERRIGHT,-5,-5, new HTML("x
y
z"))); addChart(new TestGChart59(LegendLocation.INSIDE_LOWERLEFT,0,0, new HTML("x
y
z"))); addChart(new TestGChart59(LegendLocation.INSIDE_LOWERRIGHT,-10,10, new HTML("x
y
z"))); }}); RootPanel.get("loadingMessage").setVisible(false); }}); } }