/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html * * 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.dart.tools.debug.core.sourcemaps; import com.google.dart.tools.core.test.AbstractDartCoreTest; import com.google.dart.tools.debug.core.DartDebugCoreTestPlugin; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import static org.junit.Assert.assertArrayEquals; import java.io.File; import java.net.URL; public class SourceMapTest extends AbstractDartCoreTest { private static String TEST_SOURCE = "{\nversion : 3,\nfile: \"out.js\",\n" + "sourceRoot : \"\",\nsources: [\"foo.js\", \"bar.js\"],\n" + "names: [\"src\", \"maps\", \"are\", \"fun\"],\n" + "mappings: \"AA,AB;;ABCDE;\"\n}\n"; public void testDwcParse() throws Exception { IFile file = testProject.setFileContent( "main.dart.map", getClass().getResourceAsStream("main.dart.map")); SourceMap map = SourceMap.createFrom(file); assertEquals(3, map.getVersion()); // [24:0,-1] ==> ../main.dart,14,0 assertEquals("../main.dart,15,0", map.getMappingFor(24, 0).toString()); } public void testSimpleParse() throws Exception { String[] expectedNames = {"foo.js", "bar.js"}; IFile file = testProject.setFileContent("foo.dart.js.map", TEST_SOURCE); SourceMap map = SourceMap.createFrom(file); assertEquals(3, map.getVersion()); assertEquals("out.js", map.getFile()); assertArrayEquals(expectedNames, map.getSourceNames()); assertEquals(null, map.getMappingFor(1, 0)); assertEquals("foo.js,1,-1", map.getMappingFor(2, -1).toString()); assertEquals("foo.js,1,-1", map.getMappingFor(2, 0).toString()); assertEquals("foo.js,1,-1", map.getMappingFor(2, 1).toString()); } public void testSolarParse() throws Exception { IFile file = testProject.setFileContent( "foo.dart.js.map", getClass().getResourceAsStream("solar.dart.js.map")); SourceMap map = SourceMap.createFrom(file); assertEquals(3, map.getVersion()); assertEquals( "file:///C:/tools/eclipse_37/dart-sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart,84,36", map.getMappingFor(100, -1).toString()); assertEquals( "file:///C:/Users/username/solar/solar.dart,263,2", map.getMappingFor(1351, -1).toString()); assertEquals( "file:///C:/Users/username/solar/solar.dart,264,8", map.getMappingFor(1351, 17).toString()); assertEquals( "file:///C:/Users/username/solar/solar.dart,263,2", map.getMappingFor(1351, 18).toString()); assertEquals( "file:///C:/Users/username/solar/solar.dart,264,19", map.getMappingFor(1353, 6).toString()); assertEquals( "file:///C:/Users/username/solar/solar.dart,264,8", map.getMappingFor(1353, 60).toString()); } public void x_testParseSpeed() throws Exception { URL bundleURL = FileLocator.find(DartDebugCoreTestPlugin.getPlugin().getBundle(), new Path( "src/com/google/dart/tools/debug/core/sourcemaps/solar.dart.js.map"), null); URL fileURL = FileLocator.toFileURL(bundleURL); File file = new File(fileURL.toURI()); int warmup = 2; while (warmup-- > 0) { SourceMap.createFrom(file); } long length = file.length(); int iterationCount = 100; long startTime = System.currentTimeMillis(); for (int i = 0; i < iterationCount; i++) { SourceMap.createFrom(file); } long elapsed = System.currentTimeMillis() - startTime; double byteCount = length * iterationCount; double mbps = (byteCount / (1024 * 1024)) / (elapsed / 1000.0); // Currently 9.84 MB/s. System.out.printf("source maps parse at %.2f MB/s\n", mbps); } }