This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/debugging/sourcemap/SourceMapConsumerV2Test.java
github-classroom[bot] e42e547e48
Initial commit
2023-04-25 11:33:41 +00:00

184 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);
}
}