13
13
// You should have received a copy of the GNU General Public License
14
14
// along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
16
+ extern crate gexiv2_sys as gexiv2;
16
17
extern crate rexiv2;
17
18
18
19
use std:: path:: Path ;
@@ -22,36 +23,36 @@ use std::sync::Once;
22
23
static INIT : Once = Once :: new ( ) ;
23
24
24
25
/// Should be called before any test runs. Will ensure that the library is initialized at most once.
25
- fn setup_test ( ) {
26
+ fn test_setup ( ) {
26
27
INIT . call_once ( || rexiv2:: initialize ( ) . expect ( "Unable to initialize rexiv2" ) ) ;
27
28
}
28
29
29
30
#[ test]
30
31
fn new_from_str_path ( ) {
31
- setup_test ( ) ;
32
+ test_setup ( ) ;
32
33
let sample_path = concat ! ( env!( "CARGO_MANIFEST_DIR" ) , "/tst/sample.png" ) ;
33
34
let meta = rexiv2:: Metadata :: new_from_path ( sample_path) . unwrap ( ) ;
34
35
assert_eq ! ( meta. get_media_type( ) . unwrap( ) , rexiv2:: MediaType :: Png ) ;
35
36
}
36
37
37
38
#[ test]
38
39
fn new_from_path ( ) {
39
- setup_test ( ) ;
40
+ test_setup ( ) ;
40
41
let sample_path = Path :: new ( concat ! ( env!( "CARGO_MANIFEST_DIR" ) , "/tst/sample.png" ) ) ;
41
42
let meta = rexiv2:: Metadata :: new_from_path ( sample_path) . unwrap ( ) ;
42
43
assert_eq ! ( meta. get_media_type( ) . unwrap( ) , rexiv2:: MediaType :: Png ) ;
43
44
}
44
45
45
46
#[ test]
46
47
fn new_from_buffer ( ) {
47
- setup_test ( ) ;
48
+ test_setup ( ) ;
48
49
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.png" ) ) . unwrap ( ) ;
49
50
assert_eq ! ( meta. get_media_type( ) . unwrap( ) , rexiv2:: MediaType :: Png ) ;
50
51
}
51
52
52
53
#[ test]
53
54
fn new_from_buffer_error ( ) {
54
- setup_test ( ) ;
55
+ test_setup ( ) ;
55
56
let mut bytes = include_bytes ! ( "sample.png" ) . to_vec ( ) ;
56
57
bytes. swap ( 0 , 1 ) ;
57
58
let meta_result = rexiv2:: Metadata :: new_from_buffer ( & bytes) ;
@@ -65,31 +66,35 @@ fn new_from_buffer_error() {
65
66
66
67
#[ test]
67
68
fn supports_exif ( ) {
68
- setup_test ( ) ;
69
+ test_setup ( ) ;
69
70
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.png" ) ) . unwrap ( ) ;
70
71
assert_eq ! ( meta. supports_exif( ) , true ) ;
71
72
}
72
73
73
74
#[ test]
74
75
fn supports_iptc ( ) {
75
- setup_test ( ) ;
76
+ test_setup ( ) ;
76
77
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.png" ) ) . unwrap ( ) ;
77
78
assert_eq ! ( meta. supports_iptc( ) , true ) ;
78
79
}
79
80
80
81
#[ test]
81
82
fn supports_xmp ( ) {
82
- setup_test ( ) ;
83
+ test_setup ( ) ;
83
84
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.png" ) ) . unwrap ( ) ;
84
85
assert_eq ! ( meta. supports_xmp( ) , true ) ;
85
86
}
86
87
87
88
#[ test]
88
89
fn supports_bmff ( ) {
89
- setup_test ( ) ;
90
- // iPhone devices use the HEIC (BMFF) file format which only works properly after gexiv2 has been initialized
91
- // (and the underlying libraries are the right version gexiv2 v0.13.0/Exiv2 v0.27.4)
92
- // I copied a photo off an iPhone and shrunk it down to ensure that reading tags works
90
+ test_setup ( ) ;
91
+
92
+ // iPhone devices use the HEIC (BMFF) file format which only works properly
93
+ // after gexiv2 has been initialized (and the underlying libraries are the
94
+ // right version gexiv2 v0.13.0/Exiv2 v0.27.4)
95
+ if unsafe { gexiv2:: gexiv2_get_version ( ) } < 1300 {
96
+ return ;
97
+ }
93
98
94
99
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.HEIC" ) ) . unwrap ( ) ;
95
100
let gps = meta. get_gps_info ( ) . unwrap ( ) ;
@@ -107,7 +112,7 @@ fn supports_bmff() {
107
112
108
113
#[ test]
109
114
fn log_levels ( ) {
110
- setup_test ( ) ;
115
+ test_setup ( ) ;
111
116
assert_eq ! ( rexiv2:: get_log_level( ) , rexiv2:: LogLevel :: WARN ) ;
112
117
rexiv2:: set_log_level ( rexiv2:: LogLevel :: INFO ) ;
113
118
assert_eq ! ( rexiv2:: get_log_level( ) , rexiv2:: LogLevel :: INFO ) ;
@@ -116,7 +121,7 @@ fn log_levels() {
116
121
#[ test]
117
122
#[ cfg( feature = "raw-tag-access" ) ]
118
123
fn get_tag_raw ( ) {
119
- setup_test ( ) ;
124
+ test_setup ( ) ;
120
125
let meta = rexiv2:: Metadata :: new_from_buffer ( include_bytes ! ( "sample.png" ) ) . unwrap ( ) ;
121
126
meta. set_tag_string ( "Exif.Image.DateTime" , "2020:07:12 11:16:35" )
122
127
. unwrap ( ) ;
0 commit comments