@@ -5,17 +5,12 @@ use rustc_span::source_map::{FilePathMapping, SourceMap};
5
5
6
6
use crate :: emitter:: { ColorConfig , HumanReadableErrorType } ;
7
7
use crate :: Handler ;
8
- use rustc_serialize:: json:: decode ;
8
+ use rustc_serialize:: json;
9
9
use rustc_span:: { BytePos , Span } ;
10
10
11
11
use std:: str;
12
12
13
- #[ derive( Decodable , Debug , PartialEq , Eq ) ]
14
- struct TestData {
15
- spans : Vec < SpanTestData > ,
16
- }
17
-
18
- #[ derive( Decodable , Debug , PartialEq , Eq ) ]
13
+ #[ derive( Debug , PartialEq , Eq ) ]
19
14
struct SpanTestData {
20
15
pub byte_start : u32 ,
21
16
pub byte_end : u32 ,
@@ -41,8 +36,6 @@ impl<T: Write> Write for Shared<T> {
41
36
42
37
/// Test the span yields correct positions in JSON.
43
38
fn test_positions ( code : & str , span : ( u32 , u32 ) , expected_output : SpanTestData ) {
44
- let expected_output = TestData { spans : vec ! [ expected_output] } ;
45
-
46
39
rustc_span:: create_default_session_globals_then ( || {
47
40
let sm = Lrc :: new ( SourceMap :: new ( FilePathMapping :: empty ( ) ) ) ;
48
41
sm. new_source_file ( Path :: new ( "test.rs" ) . to_owned ( ) . into ( ) , code. to_owned ( ) ) ;
@@ -64,9 +57,19 @@ fn test_positions(code: &str, span: (u32, u32), expected_output: SpanTestData) {
64
57
65
58
let bytes = output. lock ( ) . unwrap ( ) ;
66
59
let actual_output = str:: from_utf8 ( & bytes) . unwrap ( ) ;
67
- let actual_output: TestData = decode ( actual_output) ;
68
-
69
- assert_eq ! ( expected_output, actual_output)
60
+ let actual_output = json:: from_str ( & actual_output) . unwrap ( ) ;
61
+ let spans = actual_output[ "spans" ] . as_array ( ) . unwrap ( ) ;
62
+ assert_eq ! ( spans. len( ) , 1 ) ;
63
+ let obj = & spans[ 0 ] ;
64
+ let actual_output = SpanTestData {
65
+ byte_start : obj[ "byte_start" ] . as_u64 ( ) . unwrap ( ) as u32 ,
66
+ byte_end : obj[ "byte_end" ] . as_u64 ( ) . unwrap ( ) as u32 ,
67
+ line_start : obj[ "line_start" ] . as_u64 ( ) . unwrap ( ) as u32 ,
68
+ line_end : obj[ "line_end" ] . as_u64 ( ) . unwrap ( ) as u32 ,
69
+ column_start : obj[ "column_start" ] . as_u64 ( ) . unwrap ( ) as u32 ,
70
+ column_end : obj[ "column_end" ] . as_u64 ( ) . unwrap ( ) as u32 ,
71
+ } ;
72
+ assert_eq ! ( expected_output, actual_output) ;
70
73
} )
71
74
}
72
75
0 commit comments