Be more careful about converting between file URIs and paths.
This happened to work on Windows because it interprets forward slashes as
directory separators.
Review URL: https://codereview.chromium.org//13191011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/stack_trace@20708 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkgs/stack_trace/lib/src/frame.dart b/pkgs/stack_trace/lib/src/frame.dart
index fdf4fe0..5f0777c 100644
--- a/pkgs/stack_trace/lib/src/frame.dart
+++ b/pkgs/stack_trace/lib/src/frame.dart
@@ -9,6 +9,7 @@
import 'package:pathos/path.dart' as path;
import 'trace.dart';
+import 'utils.dart';
final _nativeFrameRegExp = new RegExp(
r'^#\d+\s+([^\s].*) \((.+):(\d+):(\d+)\)$');
@@ -42,7 +43,7 @@
String get library {
// TODO(nweiz): handle relative URIs here as well once pathos supports that.
if (uri.scheme != 'file') return uri.toString();
- return path.relative(uri.path);
+ return path.relative(fileUriToPath(uri));
}
/// A human-friendly description of the code location.
diff --git a/pkgs/stack_trace/test/frame_test.dart b/pkgs/stack_trace/test/frame_test.dart
index 5c5a32e..c65f395 100644
--- a/pkgs/stack_trace/test/frame_test.dart
+++ b/pkgs/stack_trace/test/frame_test.dart
@@ -8,6 +8,7 @@
import 'dart:uri';
import 'package:pathos/path.dart' as path;
+import 'package:stack_trace/src/utils.dart';
import 'package:stack_trace/stack_trace.dart';
import 'package:unittest/unittest.dart';
@@ -42,7 +43,7 @@
// TODO(nweiz): use URL-style paths when such a thing exists.
var builder = new path.Builder(style: path.Style.posix);
expect(builder.basename(frame.uri.path), equals('frame_test.dart'));
- expect(frame.line, equals(16));
+ expect(frame.line, equals(17));
expect(frame.column, equals(5));
expect(frame.member, equals('getStackFrame'));
});
@@ -113,7 +114,7 @@
});
test('returns the relative path for file URIs', () {
- var uri = _pathToFileUri(path.join('foo', 'bar.dart'));
+ var uri = pathToFileUri(path.join('foo', 'bar.dart'));
expect(new Frame.parse('#0 Foo ($uri:0:0)').library,
equals(path.join('foo', 'bar.dart')));
});
@@ -125,7 +126,7 @@
expect(new Frame.parse('#0 Foo '
'(http://dartlang.org/thing.dart:5:10)').location,
equals('http://dartlang.org/thing.dart 5:10'));
- var uri = _pathToFileUri(path.join('foo', 'bar.dart'));
+ var uri = pathToFileUri(path.join('foo', 'bar.dart'));
expect(new Frame.parse('#0 Foo ($uri:1:2)').location,
equals('${path.join('foo', 'bar.dart')} 1:2'));
});
@@ -158,9 +159,3 @@
});
});
}
-
-String _pathToFileUri(String pathString) {
- pathString = path.absolute(pathString);
- if (Platform.operatingSystem != 'windows') return 'file://$pathString';
- return 'file:///${pathString.replaceAll("\\", "/")}';
-}
diff --git a/pkgs/stack_trace/test/trace_test.dart b/pkgs/stack_trace/test/trace_test.dart
index 2cbe48d..ed8fa6b 100644
--- a/pkgs/stack_trace/test/trace_test.dart
+++ b/pkgs/stack_trace/test/trace_test.dart
@@ -8,6 +8,7 @@
import 'dart:uri';
import 'package:pathos/path.dart' as path;
+import 'package:stack_trace/src/utils.dart';
import 'package:stack_trace/stack_trace.dart';
import 'package:unittest/unittest.dart';
@@ -91,7 +92,7 @@
});
test('.toString() nicely formats the stack trace', () {
- var uri = _pathToFileUri(path.join('foo', 'bar.dart'));
+ var uri = pathToFileUri(path.join('foo', 'bar.dart'));
var trace = new Trace.parse('''
#0 Foo._bar ($uri:42:21)
#1 zip.<anonymous closure>.zap (dart:async:0:2)
@@ -133,9 +134,3 @@
'''));
});
}
-
-String _pathToFileUri(String pathString) {
- pathString = path.absolute(pathString);
- if (Platform.operatingSystem != 'windows') return 'file://$pathString';
- return 'file:///${pathString.replaceAll("\\", "/")}';
-}