185 lines
5.7 KiB
Java
185 lines
5.7 KiB
Java
|
/*
|
||
|
* Copyright 2009 The Closure Compiler Authors.
|
||
|
*
|
||
|
* 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.debugging.sourcemap;
|
||
|
|
||
|
import com.google.debugging.sourcemap.SourceMapConsumerV2;
|
||
|
import com.google.debugging.sourcemap.SourceMapParseException;
|
||
|
import com.google.debugging.sourcemap.proto.Mapping.OriginalMapping;
|
||
|
|
||
|
import junit.framework.TestCase;
|
||
|
|
||
|
public class SourceMapConsumerV2Test extends TestCase {
|
||
|
|
||
|
public SourceMapConsumerV2Test() {
|
||
|
}
|
||
|
|
||
|
public SourceMapConsumerV2Test(String name) {
|
||
|
super(name);
|
||
|
}
|
||
|
|
||
|
public void testEmptyMap() throws Exception {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append("{\n");
|
||
|
sb.append("\"version\": 2,\n");
|
||
|
sb.append("\"file\": \"somefile.js\",\n");
|
||
|
sb.append("\"lineCount\": 0,\n");
|
||
|
sb.append("\"lineMaps\": [],\n");
|
||
|
sb.append("\"sources\": [],\n");
|
||
|
sb.append("\"mappings\": []\n");
|
||
|
sb.append("}\n");
|
||
|
|
||
|
SourceMapConsumerV2 sourceMap = new SourceMapConsumerV2();
|
||
|
sourceMap.parse(sb.toString());
|
||
|
}
|
||
|
|
||
|
public void testGetMappingForLine() throws Exception {
|
||
|
// Input Code: function f(foo, bar) { foo = foo + bar + 2; return foo; }
|
||
|
String mapData =
|
||
|
"{\n" +
|
||
|
"\"version\":2,\n" +
|
||
|
"\"file\":\"testcode\",\n" +
|
||
|
"\"lineCount\":1,\n" +
|
||
|
"\"lineMaps\":" +
|
||
|
"[\"cAEBABIBA/ICA+ADICA/ICA+IDA9AEYBMBA5\"],\n" +
|
||
|
"\"sources\":[\"testcode\"],\n" +
|
||
|
"\"mappings\":[[0,1,9,\"f\"],\n" +
|
||
|
"[0,1,9,\"f\"],\n" +
|
||
|
"[0,1,10],\n" +
|
||
|
"[0,1,11,\"foo\"],\n" +
|
||
|
"[0,1,16,\"bar\"],\n" +
|
||
|
"[0,1,21],\n" +
|
||
|
"[0,1,23],\n" +
|
||
|
"[0,1,23,\"foo\"],\n" +
|
||
|
"[0,1,29,\"foo\"],\n" +
|
||
|
"[0,1,35,\"bar\"],\n" +
|
||
|
"[0,1,41],\n" +
|
||
|
"[0,1,44],\n" +
|
||
|
"[0,1,51,\"foo\"],\n" +
|
||
|
"]\n" +
|
||
|
"}\n";
|
||
|
|
||
|
SourceMapConsumerV2 sourceMap = new SourceMapConsumerV2();
|
||
|
sourceMap.parse(mapData);
|
||
|
|
||
|
OriginalMapping mapping = sourceMap.getMappingForLine(1, 10);
|
||
|
|
||
|
assertNotNull(mapping);
|
||
|
assertEquals("testcode", mapping.getOriginalFile());
|
||
|
assertEquals(1, mapping.getLineNumber());
|
||
|
assertEquals(9, mapping.getColumnPosition());
|
||
|
assertEquals("f", mapping.getIdentifier());
|
||
|
|
||
|
mapping = sourceMap.getMappingForLine(1, 40);
|
||
|
|
||
|
assertNotNull(mapping);
|
||
|
assertEquals("testcode", mapping.getOriginalFile());
|
||
|
assertEquals(1, mapping.getLineNumber());
|
||
|
assertEquals(44, mapping.getColumnPosition());
|
||
|
assertEquals("", mapping.getIdentifier());
|
||
|
|
||
|
mapping = sourceMap.getMappingForLine(1, 42);
|
||
|
assertNotNull(mapping);
|
||
|
assertEquals("testcode", mapping.getOriginalFile());
|
||
|
assertEquals(1, mapping.getLineNumber());
|
||
|
assertEquals(51, mapping.getColumnPosition());
|
||
|
assertEquals("foo", mapping.getIdentifier());
|
||
|
|
||
|
assertNull(sourceMap.getMappingForLine(Integer.MAX_VALUE, 1));
|
||
|
assertNull(sourceMap.getMappingForLine(1, Integer.MAX_VALUE));
|
||
|
}
|
||
|
|
||
|
public void testGetMappingForLineWithNameIndex() throws Exception {
|
||
|
String mapData =
|
||
|
"{\n" +
|
||
|
"\"version\":2,\n" +
|
||
|
"\"file\":\"testcode\",\n" +
|
||
|
"\"lineCount\":1,\n" +
|
||
|
"\"lineMaps\":" +
|
||
|
"[\"cAEBABIBA/ICA+ADICA/ICA+IDA9AEYBMBA5\"],\n" +
|
||
|
"\"sources\":[\"testcode\"],\n" +
|
||
|
"\"names\": [\"f\"],\n" +
|
||
|
"\"mappings\":[[0,1,9,0],\n" +
|
||
|
"[0,1,9,0]\n" +
|
||
|
"]\n" +
|
||
|
"}\n";
|
||
|
|
||
|
SourceMapConsumerV2 sourceMap = new SourceMapConsumerV2();
|
||
|
sourceMap.parse(mapData);
|
||
|
|
||
|
OriginalMapping mapping = sourceMap.getMappingForLine(1, 10);
|
||
|
|
||
|
assertNotNull(mapping);
|
||
|
assertEquals("testcode", mapping.getOriginalFile());
|
||
|
assertEquals(1, mapping.getLineNumber());
|
||
|
assertEquals(9, mapping.getColumnPosition());
|
||
|
assertEquals("f", mapping.getIdentifier());
|
||
|
}
|
||
|
|
||
|
public void testInvalidJSONFailure() throws Exception {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append("notjson");
|
||
|
|
||
|
assertExceptionStartsWith("JSON parse exception: org.json.JSONException: "
|
||
|
+ "A JSONObject text must begin "
|
||
|
+ "with '{' at character 1", sb);
|
||
|
}
|
||
|
|
||
|
public void testUnknownVersion() throws Exception {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append("{\"version\": 3}");
|
||
|
assertException("Unknown version: 3", sb);
|
||
|
}
|
||
|
|
||
|
public void testMissingFile() throws Exception {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append("{\"version\": 2, \"file\": \"\"}");
|
||
|
assertException("File entry is missing or empty", sb);
|
||
|
}
|
||
|
|
||
|
private void assertException(String exception, StringBuilder sb) {
|
||
|
boolean exceptionRaised = false;
|
||
|
|
||
|
try {
|
||
|
SourceMapConsumerV2 sourceMap = new SourceMapConsumerV2();
|
||
|
sourceMap.parse(sb.toString());
|
||
|
|
||
|
} catch (SourceMapParseException pe) {
|
||
|
assertEquals(exception, pe.getMessage());
|
||
|
exceptionRaised = true;
|
||
|
}
|
||
|
|
||
|
assertTrue(exceptionRaised);
|
||
|
}
|
||
|
|
||
|
private void assertExceptionStartsWith(String exception, StringBuilder sb) {
|
||
|
boolean exceptionRaised = false;
|
||
|
|
||
|
try {
|
||
|
SourceMapConsumerV2 sourceMap = new SourceMapConsumerV2();
|
||
|
sourceMap.parse(sb.toString());
|
||
|
|
||
|
} catch (SourceMapParseException pe) {
|
||
|
assertTrue(
|
||
|
"expected <" + exception +"> but was <"+ pe.getMessage() +">",
|
||
|
pe.getMessage().startsWith(exception));
|
||
|
exceptionRaised = true;
|
||
|
}
|
||
|
|
||
|
assertTrue(exceptionRaised);
|
||
|
}
|
||
|
}
|