1
1
use std:: str;
2
+ use std:: path:: { Path , PathBuf } ;
2
3
use pdf:: file:: FileOptions ;
3
4
use pdf:: object:: * ;
4
5
use pdf:: parser:: { parse, ParseFlags } ;
5
6
use glob:: glob;
6
7
7
- macro_rules! file_path {
8
- ( $subdir: expr ) => { concat!( "../files/" , $subdir) }
9
- }
10
8
macro_rules! run {
11
9
( $e: expr) => (
12
10
match $e {
@@ -18,9 +16,22 @@ macro_rules! run {
18
16
)
19
17
}
20
18
19
+ fn files ( ) -> PathBuf {
20
+ Path :: new ( env ! ( "CARGO_MANIFEST_DIR" ) ) . parent ( ) . unwrap ( ) . join ( "files" )
21
+ }
22
+ fn file_path ( s : & str ) -> PathBuf {
23
+ files ( ) . join ( s)
24
+ }
25
+ fn dir_pdfs ( path : PathBuf ) -> impl Iterator < Item =PathBuf > {
26
+ path. read_dir ( ) . unwrap ( )
27
+ . filter_map ( |r| r. ok ( ) )
28
+ . map ( |e| e. path ( ) )
29
+ . filter ( |p| p. extension ( ) . map ( |e| e == "pdf" ) . unwrap_or ( false ) )
30
+ }
31
+
21
32
#[ test]
22
33
fn open_file ( ) {
23
- let _ = run ! ( FileOptions :: uncached( ) . open( file_path! ( "example.pdf" ) ) ) ;
34
+ let _ = run ! ( FileOptions :: uncached( ) . open( file_path( "example.pdf" ) ) ) ;
24
35
#[ cfg( all( feature = "mmap" , feature = "cache" ) ) ]
25
36
let _ = run ! ( {
26
37
use memmap2:: Mmap ;
@@ -33,61 +44,42 @@ fn open_file() {
33
44
#[ cfg( feature="cache" ) ]
34
45
#[ test]
35
46
fn read_pages ( ) {
36
- for entry in glob ( file_path ! ( "*.pdf" ) ) . expect ( "Failed to read glob pattern" ) {
37
- match entry {
38
- Ok ( path) => {
39
- println ! ( "\n == Now testing `{}` ==" , path. to_str( ) . unwrap( ) ) ;
47
+ for path in dir_pdfs ( files ( ) ) {
48
+ println ! ( "\n == Now testing `{}` ==" , path. to_str( ) . unwrap( ) ) ;
40
49
41
- let path = path. to_str ( ) . unwrap ( ) ;
42
- let file = run ! ( FileOptions :: cached( ) . open( path) ) ;
43
- for i in 0 .. file. num_pages ( ) {
44
- println ! ( "Read page {}" , i) ;
45
- let _ = file. get_page ( i) ;
46
- }
47
- }
48
- Err ( e) => println ! ( "{:?}" , e)
50
+ let path = path. to_str ( ) . unwrap ( ) ;
51
+ let file = run ! ( FileOptions :: cached( ) . open( path) ) ;
52
+ for i in 0 .. file. num_pages ( ) {
53
+ println ! ( "Read page {}" , i) ;
54
+ let _ = file. get_page ( i) ;
49
55
}
50
56
}
51
57
}
52
58
53
59
#[ test]
54
60
fn user_password ( ) {
55
- for entry in glob ( file_path ! ( "password_protected/*.pdf" ) )
56
- . expect ( "Failed to read glob pattern" )
57
- {
58
- match entry {
59
- Ok ( path) => {
60
- println ! ( "\n \n == Now testing `{}` ==\n " , path. to_str( ) . unwrap( ) ) ;
61
+ for path in dir_pdfs ( file_path ( "password_protected" ) ) {
62
+ println ! ( "\n \n == Now testing `{}` ==\n " , path. to_str( ) . unwrap( ) ) ;
61
63
62
- let path = path. to_str ( ) . unwrap ( ) ;
63
- let file = run ! ( FileOptions :: uncached( ) . password( b"userpassword" ) . open( path) ) ;
64
- for i in 0 .. file. num_pages ( ) {
65
- println ! ( "\n Read page {}" , i) ;
66
- let _ = file. get_page ( i) ;
67
- }
68
- }
69
- Err ( e) => println ! ( "{:?}" , e)
64
+ let path = path. to_str ( ) . unwrap ( ) ;
65
+ let file = run ! ( FileOptions :: uncached( ) . password( b"userpassword" ) . open( path) ) ;
66
+ for i in 0 .. file. num_pages ( ) {
67
+ println ! ( "\n Read page {}" , i) ;
68
+ let _ = file. get_page ( i) ;
70
69
}
71
70
}
72
71
}
73
72
74
73
#[ test]
75
74
fn owner_password ( ) {
76
- for entry in glob ( file_path ! ( "password_protected/*.pdf" ) )
77
- . expect ( "Failed to read glob pattern" )
78
- {
79
- match entry {
80
- Ok ( path) => {
81
- println ! ( "\n \n == Now testing `{}` ==\n " , path. to_str( ) . unwrap( ) ) ;
75
+ for path in dir_pdfs ( file_path ( "password_protected" ) ) {
76
+ println ! ( "\n \n == Now testing `{}` ==\n " , path. to_str( ) . unwrap( ) ) ;
82
77
83
- let path = path. to_str ( ) . unwrap ( ) ;
84
- let file = run ! ( FileOptions :: uncached( ) . password( b"ownerpassword" ) . open( path) ) ;
85
- for i in 0 .. file. num_pages ( ) {
86
- println ! ( "\n Read page {}" , i) ;
87
- let _ = file. get_page ( i) ;
88
- }
89
- }
90
- Err ( e) => println ! ( "{:?}" , e)
78
+ let path = path. to_str ( ) . unwrap ( ) ;
79
+ let file = run ! ( FileOptions :: uncached( ) . password( b"ownerpassword" ) . open( path) ) ;
80
+ for i in 0 .. file. num_pages ( ) {
81
+ println ! ( "\n Read page {}" , i) ;
82
+ let _ = file. get_page ( i) ;
91
83
}
92
84
}
93
85
}
@@ -97,26 +89,19 @@ fn owner_password() {
97
89
#[ cfg( feature="cache" ) ]
98
90
#[ test]
99
91
fn invalid_pdfs ( ) {
100
- for entry in glob ( file_path ! ( "invalid/*.pdf" ) )
101
- . expect ( "Failed to read glob pattern" )
102
- {
103
- match entry {
104
- Ok ( path) => {
105
- let path = path. to_str ( ) . unwrap ( ) ;
106
- println ! ( "\n \n == Now testing `{}` ==\n " , path) ;
92
+ for path in dir_pdfs ( file_path ( "invalid" ) ) {
93
+ let path = path. to_str ( ) . unwrap ( ) ;
94
+ println ! ( "\n \n == Now testing `{}` ==\n " , path) ;
107
95
108
- match FileOptions :: cached ( ) . open ( path) {
109
- Ok ( file) => {
110
- for i in 0 .. file. num_pages ( ) {
111
- let _ = file. get_page ( i) ;
112
- }
113
- }
114
- Err ( _) => {
115
- continue ;
116
- }
96
+ match FileOptions :: cached ( ) . open ( path) {
97
+ Ok ( file) => {
98
+ for i in 0 .. file. num_pages ( ) {
99
+ let _ = file. get_page ( i) ;
117
100
}
118
101
}
119
- Err ( e) => panic ! ( "error when reading glob patterns: {:?}" , e) ,
102
+ Err ( _) => {
103
+ continue ;
104
+ }
120
105
}
121
106
}
122
107
}
@@ -125,7 +110,7 @@ fn invalid_pdfs() {
125
110
#[ test]
126
111
fn parse_objects_from_stream ( ) {
127
112
use pdf:: object:: NoResolve ;
128
- let file = run ! ( FileOptions :: cached( ) . open( file_path! ( "xelatex.pdf" ) ) ) ;
113
+ let file = run ! ( FileOptions :: cached( ) . open( file_path( "xelatex.pdf" ) ) ) ;
129
114
let resolver = file. resolver ( ) ;
130
115
131
116
// .. we know that object 13 of that file is an ObjectStream
0 commit comments