Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(615)

Unified Diff: test/source_map_stack_trace_test.dart

Issue 2555223004: Fix behavior causing frames lacking a source map to always be omitted. Add `includeUnmappedFrames` … (Closed)
Patch Set: Fix behavior so frames that do not match the source map are still be emitted if the new `includeUnm… Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« lib/source_map_stack_trace.dart ('K') | « pubspec.yaml ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/source_map_stack_trace_test.dart
diff --git a/test/source_map_stack_trace_test.dart b/test/source_map_stack_trace_test.dart
index 64145a63de1b5dc310b60a294fc9b88f4a7e7866..029abc216d8eb508f9ab16bf954087823e7f9287 100644
--- a/test/source_map_stack_trace_test.dart
+++ b/test/source_map_stack_trace_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:package_resolver/package_resolver.dart';
+import 'package:path/path.dart' as path;
nweiz 2016/12/08 23:34:31 as p
Jacob 2016/12/09 02:18:28 Done.
import 'package:source_maps/source_maps.dart';
import 'package:source_span/source_span.dart';
import 'package:stack_trace/stack_trace.dart';
@@ -10,18 +11,14 @@ import 'package:source_map_stack_trace/source_map_stack_trace.dart';
import 'package:test/test.dart';
/// A simple [Mapping] for tests that don't need anything special.
-final _simpleMapping = parseJson(
- (new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(18, line: 15, column: 0),
- "\n" * 10)))
- .build("foo.dart.js.map"));
+final _simpleMapping = parseJson((new SourceMapBuilder()
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1, line: 1, column: 3, sourceUrl: "foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(18, line: 15, column: 0), "\n" * 10)))
+ .build("foo.dart.js.map"));
void main() {
test("maps a JS line and column to a Dart line and span", () {
@@ -62,18 +59,64 @@ foo.dart.js 10:11 baz
expect(frames.last.member, equals("baz"));
});
+ test("shows JS frames without corresponding spans", () {
nweiz 2016/12/08 23:34:31 Put these in a "with includeUnmappedFrames" group.
Jacob 2016/12/09 02:18:28 obsolete as all but one test doesn't matter given
+ var trace = new Trace.parse("""
+foo.dart.js 10:11 foo
+foo.dart.js 1:1 bar
+foo.dart.js 10:11 baz
+""");
+
+ var frames =
+ _mapTrace(_simpleMapping, trace, includeUnmappedFrames: true).frames;
+
+ expect(frames.length, equals(3));
+ expect(frames.first.member, equals("foo"));
+ expect(frames[1].member, equals("bar"));
+ expect(frames.last.member, equals("baz"));
+
+ expect(path.basename(frames.first.uri.toString()), equals("foo.dart"));
+ expect(path.basename(frames[1].uri.toString()), equals("foo.dart.js"));
+ });
+
+ test("ignore frames that do not match files in source map bundle", () {
+ var trace = new Trace.parse("""
+foo.dart.js 10 foo
+wrong_file.dart.js 10 foo
+""");
+ var builder = new SourceMapBuilder()
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1,
+ line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
+ var sourceMapJson = builder.build("foo.dart.js.map");
+ sourceMapJson['file'] = "foo.dart.js";
+ var bundle = [sourceMapJson];
+ var mapping = parseJsonExtended(bundle);
+ var frames = _mapTrace(mapping, trace,
+ packageRoot: "packages/", includeUnmappedFrames: true)
nweiz 2016/12/08 23:34:31 packageRoot is deprecated; use packageResolver ins
Jacob 2016/12/09 02:18:28 Done.
+ .frames;
+ expect(frames.length, equals(2));
+ var frame = frames.first;
+ expect(frame.uri, equals(Uri.parse("package:foo/foo.dart")));
+ expect(frame.line, equals(2));
+ expect(frame.column, equals(4));
+ frame = frames.last;
+ expect(path.basename(frame.uri.toString()), equals("wrong_file.dart.js"));
+ expect(frame.line, equals(10));
nweiz 2016/12/08 23:34:31 Add some empty lines here, this is difficult to re
Jacob 2016/12/09 02:18:28 Done.
+ });
+
test("falls back to column 0 for unlisted column", () {
var trace = new Trace.parse("foo.dart.js 10 foo");
var builder = new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(12, line: 9, column: 1),
- "\n" * 4));
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1, line: 1, column: 3, sourceUrl: "foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
var mapping = parseJson(builder.build("foo.dart.js.map"));
var frame = _mapTrace(mapping, trace).frames.first;
@@ -85,19 +128,17 @@ foo.dart.js 10:11 baz
test("uses package: URIs for frames within packageRoot", () {
var trace = new Trace.parse("foo.dart.js 10 foo");
var builder = new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(12, line: 9, column: 1),
- "\n" * 4));
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1,
+ line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
var mapping = parseJson(builder.build("foo.dart.js.map"));
- var frame = _mapTrace(mapping, trace, packageRoot: "packages/")
- .frames.first;
+ var frame =
+ _mapTrace(mapping, trace, packageRoot: "packages/").frames.first;
expect(frame.uri, equals(Uri.parse("package:foo/foo.dart")));
expect(frame.line, equals(2));
expect(frame.column, equals(4));
@@ -106,15 +147,13 @@ foo.dart.js 10:11 baz
test("uses package: URIs for frames within packageResolver.packageRoot", () {
var trace = new Trace.parse("foo.dart.js 10 foo");
var builder = new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(12, line: 9, column: 1),
- "\n" * 4));
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1,
+ line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
var mapping = parseJson(builder.build("foo.dart.js.map"));
var mappedTrace = _mapTrace(mapping, trace,
@@ -129,21 +168,18 @@ foo.dart.js 10:11 baz
() {
var trace = new Trace.parse("foo.dart.js 10 foo");
var builder = new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(12, line: 9, column: 1),
- "\n" * 4));
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1,
+ line: 1, column: 3, sourceUrl: "packages/foo/foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
var mapping = parseJson(builder.build("foo.dart.js.map"));
var mappedTrace = _mapTrace(mapping, trace,
- packageResolver: new SyncPackageResolver.config({
- "foo": Uri.parse("packages/foo")
- }));
+ packageResolver:
+ new SyncPackageResolver.config({"foo": Uri.parse("packages/foo")}));
var frame = mappedTrace.frames.first;
expect(frame.uri, equals(Uri.parse("package:foo/foo.dart")));
expect(frame.line, equals(2));
@@ -153,15 +189,13 @@ foo.dart.js 10:11 baz
test("uses dart: URIs for frames within sdkRoot", () {
var trace = new Trace.parse("foo.dart.js 10 foo");
var builder = new SourceMapBuilder()
- ..addSpan(
- new SourceMapSpan.identifier(
- new SourceLocation(1,
- line: 1, column: 3, sourceUrl: "sdk/lib/async/foo.dart"),
- "qux"),
- new SourceSpan(
- new SourceLocation(8, line: 5, column: 0),
- new SourceLocation(12, line: 9, column: 1),
- "\n" * 4));
+ ..addSpan(
+ new SourceMapSpan.identifier(
+ new SourceLocation(1,
+ line: 1, column: 3, sourceUrl: "sdk/lib/async/foo.dart"),
+ "qux"),
+ new SourceSpan(new SourceLocation(8, line: 5, column: 0),
+ new SourceLocation(12, line: 9, column: 1), "\n" * 4));
var mapping = parseJson(builder.build("foo.dart.js.map"));
var frame = _mapTrace(mapping, trace, sdkRoot: "sdk/").frames.first;
@@ -212,8 +246,8 @@ foo.dart.js 10:11 baz
test("nested closures", () {
expect(_prettify("foo__closure.call"), equals("foo.<fn>.<fn>"));
- expect(_prettify("foo____closure.call"),
- equals("foo.<fn>.<fn>.<fn>.<fn>"));
+ expect(
+ _prettify("foo____closure.call"), equals("foo.<fn>.<fn>.<fn>.<fn>"));
});
test(".call", () {
@@ -246,21 +280,33 @@ foo.dart.js 10:11 baz
/// Like [mapStackTrace], but is guaranteed to return a [Trace] so it can be
/// inspected.
Trace _mapTrace(Mapping sourceMap, StackTrace stackTrace,
- {bool minified: false, SyncPackageResolver packageResolver, sdkRoot,
- packageRoot}) {
+ {bool minified: false,
+ SyncPackageResolver packageResolver,
+ sdkRoot,
+ packageRoot,
+ bool includeUnmappedFrames: false}) {
return new Trace.from(mapStackTrace(sourceMap, stackTrace,
- minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot,
- packageRoot: packageRoot));
+ minified: minified,
+ packageResolver: packageResolver,
+ sdkRoot: sdkRoot,
+ packageRoot: packageRoot,
+ includeUnmappedFrames: includeUnmappedFrames));
}
/// Like [mapStackTrace], but is guaranteed to return a [Chain] so it can be
/// inspected.
Chain _mapChain(Mapping sourceMap, StackTrace stackTrace,
- {bool minified: false, SyncPackageResolver packageResolver, sdkRoot,
- packageRoot}) {
+ {bool minified: false,
+ SyncPackageResolver packageResolver,
+ sdkRoot,
+ packageRoot,
+ bool includeUnmappedFrames: false}) {
return new Chain.forTrace(mapStackTrace(sourceMap, stackTrace,
- minified: minified, packageResolver: packageResolver, sdkRoot: sdkRoot,
- packageRoot: packageRoot));
+ minified: minified,
+ packageResolver: packageResolver,
+ sdkRoot: sdkRoot,
+ packageRoot: packageRoot,
+ includeUnmappedFrames: includeUnmappedFrames));
}
/// Runs the mapper's prettification logic on [member] and returns the result.
« lib/source_map_stack_trace.dart ('K') | « pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698