| /* | |
| * Copyright 2012 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.dev.js.client; | |
| import com.google.gwt.json.client.JSONNumber; | |
| import com.google.gwt.json.client.JSONObject; | |
| import com.google.gwt.json.client.JSONParser; | |
| import com.google.gwt.junit.client.GWTTestCase; | |
| import com.google.gwt.storage.client.Storage; | |
| import java.util.HashMap; | |
| import java.util.Map; | |
| /** | |
| * Tests coverage instrumentation. | |
| */ | |
| public class CoverageTest extends GWTTestCase { | |
| private static final Map<String, Double> EXPECTED_COVERAGE = new HashMap<String, Double>() { { | |
| put("25", 1.0); | |
| put("26", 1.0); | |
| put("27", 1.0); | |
| put("29", 1.0); | |
| put("31", 0.0); | |
| }}; | |
| @Override | |
| public String getModuleName() { | |
| return "com.google.gwt.dev.js.CoverageTestModule"; | |
| } | |
| /* | |
| * Trigger the onbeforeunload handler. It would be nice to do this by refreshing the page or | |
| * something, but that causes the test to fail. | |
| */ | |
| private static native void fireOnBeforeUnloadEvent() /*-{ | |
| for (var i = 0; i < $wnd.frames.length; i++) { | |
| if (typeof $wnd.frames[i].onbeforeunload === 'function') { | |
| $wnd.frames[i].onbeforeunload(); | |
| } | |
| } | |
| }-*/; | |
| public void testCoverageDataIsFlushedToLocalStorageOnBeforeUnload() { | |
| Storage localStorage = Storage.getLocalStorageIfSupported(); | |
| assertNotNull("Test browser does not support localStorage", localStorage); | |
| // No coverage initially | |
| assertNull("Found unexpected initial coverage", localStorage.getItem("gwt_coverage")); | |
| CoverageTestModule.method(); | |
| // Trigger the onbeforeunload handler to flush the coverage information to localStorage. | |
| fireOnBeforeUnloadEvent(); | |
| String coverageAsJson = localStorage.getItem("gwt_coverage"); | |
| assertNotNull("No coverage data found", coverageAsJson); | |
| JSONObject coverage = JSONParser.parseStrict(coverageAsJson).isObject(); | |
| assertNotNull("Coverage data was not valid JSON", coverage); | |
| JSONObject fileCoverage = | |
| coverage.get("com/google/gwt/dev/js/client/CoverageTestModule.java").isObject(); | |
| assertNotNull(fileCoverage); | |
| for (Map.Entry<String, Double> lineCoverage : EXPECTED_COVERAGE.entrySet()) { | |
| assertTrue(fileCoverage.containsKey(lineCoverage.getKey())); | |
| JSONNumber value = fileCoverage.get(lineCoverage.getKey()).isNumber(); | |
| assertNotNull(value); | |
| assertEquals(lineCoverage.getValue(), value.doubleValue(), 0.0001); | |
| } | |
| } | |
| } |