@@ -15,7 +15,7 @@ fn run(dirname: &str) -> (ExitStatus, String, String) {
15
15
fn broken_test ( dirname : & str , expected : & str ) {
16
16
let ( status, stdout, stderr) = run ( dirname) ;
17
17
assert ! ( !status. success( ) ) ;
18
- if !stdout . contains ( expected) {
18
+ if !contains ( expected, & stdout ) {
19
19
panic ! (
20
20
"stdout did not contain expected text: {}\n \
21
21
--- stdout:\n \
@@ -27,6 +27,25 @@ fn broken_test(dirname: &str, expected: &str) {
27
27
}
28
28
}
29
29
30
+ fn contains ( expected : & str , actual : & str ) -> bool {
31
+ // Normalize for Windows paths.
32
+ let actual = actual. replace ( '\\' , "/" ) ;
33
+ actual. lines ( ) . any ( |mut line| {
34
+ for ( i, part) in expected. split ( "[..]" ) . enumerate ( ) {
35
+ match line. find ( part) {
36
+ Some ( j) => {
37
+ if i == 0 && j != 0 {
38
+ return false ;
39
+ }
40
+ line = & line[ j + part. len ( ) ..] ;
41
+ }
42
+ None => return false ,
43
+ }
44
+ }
45
+ line. is_empty ( ) || expected. ends_with ( "[..]" )
46
+ } )
47
+ }
48
+
30
49
fn valid_test ( dirname : & str ) {
31
50
let ( status, stdout, stderr) = run ( dirname) ;
32
51
if !status. success ( ) {
@@ -48,30 +67,46 @@ fn valid() {
48
67
49
68
#[ test]
50
69
fn basic_broken ( ) {
51
- broken_test ( "basic_broken" , "bar.html" ) ;
70
+ broken_test ( "basic_broken" , "foo.html:3: broken link - ` bar.html` " ) ;
52
71
}
53
72
54
73
#[ test]
55
74
fn broken_fragment_local ( ) {
56
- broken_test ( "broken_fragment_local" , "#somefrag" ) ;
75
+ broken_test (
76
+ "broken_fragment_local" ,
77
+ "foo.html:3: broken link fragment `#somefrag` pointing to `foo.html`" ,
78
+ ) ;
57
79
}
58
80
59
81
#[ test]
60
82
fn broken_fragment_remote ( ) {
61
- broken_test ( "broken_fragment_remote/inner" , "#somefrag" ) ;
83
+ broken_test (
84
+ "broken_fragment_remote/inner" ,
85
+ "foo.html:3: broken link fragment `#somefrag` pointing to `foo.html`" ,
86
+ ) ;
62
87
}
63
88
64
89
#[ test]
65
90
fn broken_redir ( ) {
66
- broken_test ( "broken_redir" , "sometarget" ) ;
91
+ broken_test (
92
+ "broken_redir" ,
93
+ "foo.html:3: broken redirect from `redir-bad.html` to `sometarget`" ,
94
+ ) ;
67
95
}
68
96
69
97
#[ test]
70
98
fn directory_link ( ) {
71
- broken_test ( "directory_link" , "somedir" ) ;
99
+ broken_test (
100
+ "directory_link" ,
101
+ "foo.html:3: directory link to `somedir` (directory links should use index.html instead)" ,
102
+ ) ;
72
103
}
73
104
74
105
#[ test]
75
106
fn redirect_loop ( ) {
76
- broken_test ( "redirect_loop" , "redir-bad.html" ) ;
107
+ broken_test (
108
+ "redirect_loop" ,
109
+ "foo.html:3: redirect from `redir-bad.html` to `[..]redirect_loop/redir-bad.html` \
110
+ which is also a redirect (not supported)",
111
+ ) ;
77
112
}
0 commit comments