Correctly parse length (#861)
diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index a112a1a..eb2c4db 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md
@@ -1,6 +1,7 @@ ## 0.8.5 - Always bind to `localhost` for the local debug workflow. +- Fix an issue where breakpoints could cause DevTools to hang. ## 0.8.4
diff --git a/dwds/lib/src/debugging/metadata.dart b/dwds/lib/src/debugging/metadata.dart index 54256f0..29fd8ab 100644 --- a/dwds/lib/src/debugging/metadata.dart +++ b/dwds/lib/src/debugging/metadata.dart
@@ -33,7 +33,7 @@ factory ClassMetaData( {Object jsName, Object libraryId, Object dartName, Object length}) { return ClassMetaData._(jsName as String, libraryId as String, - dartName as String, length as int); + dartName as String, int.tryParse('$length')); } ClassMetaData._(this.jsName, this.libraryId, this.dartName, this.length);
diff --git a/dwds/test/debugging/metadata_test.dart b/dwds/test/debugging/metadata_test.dart new file mode 100644 index 0000000..6af6b98 --- /dev/null +++ b/dwds/test/debugging/metadata_test.dart
@@ -0,0 +1,22 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:dwds/src/debugging/metadata.dart'; +import 'package:test/test.dart'; + +void main() { + test('Gracefully handles invalid length objects', () async { + var metadata = ClassMetaData(length: null); + expect(metadata.length, isNull); + + metadata = ClassMetaData(length: {}); + expect(metadata.length, isNull); + + metadata = ClassMetaData(length: '{}'); + expect(metadata.length, isNull); + + metadata = ClassMetaData(length: 0); + expect(metadata.length, equals(0)); + }); +}