leeh-mini_exiftool 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,33 @@
1
+ # -- encoding: utf-8 --
2
+ require 'helpers_for_test'
3
+
4
+ class TestReadNumerical < TestCase
5
+
6
+ def setup
7
+ @data_dir = File.dirname(__FILE__) + '/data'
8
+ @filename_test = @data_dir + '/test.jpg'
9
+ @mini_exiftool_num = MiniExiftool.new @filename_test, :numerical => true
10
+ end
11
+
12
+ def test_access_numerical
13
+ assert_equal 'DYNAX 7D', @mini_exiftool_num['Model']
14
+ assert_equal 'MLT0', @mini_exiftool_num['maker_note_version']
15
+ assert_equal 'MLT0', @mini_exiftool_num[:MakerNoteVersion]
16
+ assert_equal 'MLT0', @mini_exiftool_num[:maker_note_version]
17
+ assert_equal 'MLT0', @mini_exiftool_num.maker_note_version
18
+ assert_equal 400, @mini_exiftool_num.iso
19
+ end
20
+
21
+ def test_conversion_numerical
22
+ assert_kind_of String, @mini_exiftool_num.model
23
+ assert_kind_of Time, @mini_exiftool_num['DateTimeOriginal']
24
+ assert_kind_of Float, @mini_exiftool_num['MaxApertureValue']
25
+ assert_kind_of Fixnum, @mini_exiftool_num.flash
26
+ assert_kind_of String, @mini_exiftool_num.exif_version
27
+ assert_kind_of Fixnum, @mini_exiftool_num['ExposureCompensation']
28
+ assert_kind_of String, (@mini_exiftool_num['SubjectLocation'] || @mini_exiftool_num['SubjectArea'])
29
+ assert_kind_of Array, @mini_exiftool_num['Keywords']
30
+ assert_kind_of String, @mini_exiftool_num['SupplementalCategories']
31
+ end
32
+
33
+ end
@@ -0,0 +1,85 @@
1
+ # -- encoding: utf-8 --
2
+ require 'digest/md5'
3
+ require 'fileutils'
4
+ require 'tempfile'
5
+ require 'helpers_for_test'
6
+
7
+ class TestSave < TestCase
8
+
9
+ include TempfileTest
10
+
11
+ def setup
12
+ super
13
+ @org_filename = @data_dir + '/test.jpg'
14
+ FileUtils.cp(@org_filename, @temp_filename)
15
+ @mini_exiftool = MiniExiftool.new @temp_filename
16
+ @mini_exiftool_num = MiniExiftool.new @temp_filename, :numerical => true
17
+ @org_md5 = Digest::MD5.hexdigest(File.read(@org_filename))
18
+ end
19
+
20
+ def test_allowed_value
21
+ @mini_exiftool_num['Orientation'] = 2
22
+ result = @mini_exiftool_num.save
23
+ assert_equal true, result
24
+ assert_equal @org_md5, Digest::MD5.hexdigest(File.read(@org_filename))
25
+ assert_not_equal @org_md5, Digest::MD5.hexdigest(File.read(@temp_filename))
26
+ assert_equal false, @mini_exiftool_num.changed?
27
+ result = @mini_exiftool_num.save
28
+ assert_equal false, result
29
+ end
30
+
31
+ def test_non_allowed_value
32
+ @mini_exiftool['Orientation'] = 'some string'
33
+ result = @mini_exiftool.save
34
+ assert_equal false, result
35
+ assert_equal 1, @mini_exiftool.errors.size
36
+ assert_match(/Can't convert IFD0:Orientation \(not in PrintConv\)/,
37
+ @mini_exiftool.errors['Orientation'])
38
+ assert @mini_exiftool.changed?
39
+ assert @mini_exiftool.changed_tags.include?('Orientation')
40
+ end
41
+
42
+ def test_no_changing_of_file_when_error
43
+ @mini_exiftool['ISO'] = 800
44
+ @mini_exiftool['Orientation'] = 'some value'
45
+ @mini_exiftool['ExposureTime'] = '1/30'
46
+ result = @mini_exiftool.save
47
+ assert_equal false, result
48
+ assert_equal @org_md5, Digest::MD5.hexdigest(File.read(@org_filename))
49
+ assert_equal @org_md5, Digest::MD5.hexdigest(File.read(@temp_filename))
50
+ end
51
+
52
+ def test_encoding_conversion
53
+ special_string = 'äöü'
54
+ if special_string.respond_to?(:encode)
55
+ special_string_latin1 = special_string.encode('ISO-8859-1')
56
+ else
57
+ special_string_latin1 = "\xE4\xF6\xFC"
58
+ end
59
+ @mini_exiftool.title = special_string
60
+ assert @mini_exiftool.save
61
+ assert_equal false, @mini_exiftool.convert_encoding
62
+ assert_equal special_string, @mini_exiftool.title
63
+ @mini_exiftool.convert_encoding = true
64
+ @mini_exiftool.title = special_string_latin1
65
+ assert @mini_exiftool.save
66
+ assert_equal true, @mini_exiftool.convert_encoding
67
+ if special_string_latin1.respond_to?(:encode)
68
+ special_string_latin1.encode!('ISO-8859-1')
69
+ end
70
+ assert_equal special_string_latin1, @mini_exiftool.title
71
+ end
72
+
73
+ def test_save_bang
74
+ @mini_exiftool.orientation = 'some value'
75
+ exception = false
76
+ begin
77
+ @mini_exiftool.save!
78
+ rescue MiniExiftool::Error => e
79
+ assert_match /Orientation/, e.message
80
+ exception = true
81
+ end
82
+ assert exception, "No exception when save! with error."
83
+ end
84
+
85
+ end
@@ -0,0 +1,42 @@
1
+ # -- encoding: utf-8 --
2
+ require 'helpers_for_test'
3
+
4
+ class TestSpecial < TestCase
5
+
6
+ include TempfileTest
7
+
8
+ CAPTION_ABSTRACT = 'Some text for caption abstract'
9
+
10
+ def setup
11
+ super
12
+ @org_filename = @data_dir + '/Canon.jpg'
13
+ FileUtils.cp @org_filename, @temp_filename
14
+ @canon = MiniExiftool.new @temp_filename
15
+ end
16
+
17
+ # Catching bug [#8073]
18
+ # Thanks to Eric Young
19
+ def test_special_chars
20
+ assert_not_nil @canon['Self-timer']
21
+ assert_not_nil @canon.self_timer
22
+ # preserving the original tag name
23
+ assert @canon.tags.include?('Self-timer') || @canon.tags.include?('SelfTimer')
24
+ assert !@canon.tags.include?('self_timer')
25
+ end
26
+
27
+ # Catching bug with writing caption-abstract
28
+ # Thanks to Robin Romahn
29
+ def test_caption_abstract_sensitive
30
+ @canon['caption-abstract'] = CAPTION_ABSTRACT
31
+ assert @canon.changed_tags.include?('Caption-Abstract')
32
+ assert @canon.save
33
+ assert_equal CAPTION_ABSTRACT, @canon.caption_abstract
34
+ end
35
+
36
+ def test_caption_abstract_non_sesitive
37
+ @canon.caption_abstract = CAPTION_ABSTRACT.reverse
38
+ assert @canon.save
39
+ assert_equal CAPTION_ABSTRACT.reverse, @canon.caption_abstract
40
+ end
41
+
42
+ end
@@ -0,0 +1,52 @@
1
+ # -- encoding: utf-8 --
2
+ require 'date'
3
+ require 'helpers_for_test'
4
+
5
+ class TestSpecialDates < TestCase
6
+
7
+ include TempfileTest
8
+
9
+ def setup
10
+ super
11
+ @org_filename = @data_dir + '/test_special_dates.jpg'
12
+ FileUtils.cp @org_filename, @temp_filename
13
+ @mini_exiftool = MiniExiftool.new @temp_filename
14
+ @mini_exiftool_datetime = MiniExiftool.new @temp_filename,
15
+ :timestamps => DateTime
16
+ end
17
+
18
+ # Catching bug [#16328] (1st part)
19
+ # Thanks to unknown
20
+ def test_datetime
21
+ datetime_original = @mini_exiftool.datetime_original
22
+ if datetime_original
23
+ assert_kind_of Time, datetime_original
24
+ else
25
+ assert_equal false, datetime_original
26
+ end
27
+ assert_kind_of DateTime, @mini_exiftool_datetime.datetime_original
28
+ assert_raise MiniExiftool::Error do
29
+ @mini_exiftool.timestamps = String
30
+ @mini_exiftool.reload
31
+ end
32
+ @mini_exiftool.timestamps = DateTime
33
+ @mini_exiftool.reload
34
+ assert_equal @mini_exiftool_datetime.datetime_original,
35
+ @mini_exiftool.datetime_original
36
+ end
37
+
38
+ # Catching bug [#16328] (2nd part)
39
+ # Thanks to Cecil Coupe
40
+ def test_invalid_date
41
+ assert_equal false, @mini_exiftool.modify_date
42
+ end
43
+
44
+ def test_time_zone
45
+ s = '1961-08-13 12:08:25+01:00'
46
+ assert_equal Time.parse(s), @mini_exiftool.preview_date_time
47
+ assert_equal DateTime.parse(s),
48
+ @mini_exiftool_datetime.preview_date_time
49
+ end
50
+
51
+ end
52
+
@@ -0,0 +1,161 @@
1
+ # -- encoding: utf-8 --
2
+ require 'digest/md5'
3
+ require 'fileutils'
4
+ require 'tempfile'
5
+ require 'helpers_for_test'
6
+
7
+ class TestWrite < TestCase
8
+
9
+ def setup
10
+ @temp_file = Tempfile.new('test')
11
+ @temp_file.close
12
+ @temp_filename = @temp_file.path
13
+ @org_filename = File.dirname(__FILE__) + '/data/test.jpg'
14
+ FileUtils.cp(@org_filename, @temp_filename)
15
+ @mini_exiftool = MiniExiftool.new @temp_filename
16
+ @mini_exiftool_num = MiniExiftool.new @temp_filename, :numerical => true
17
+ end
18
+
19
+ def teardown
20
+ @temp_file.delete
21
+ end
22
+
23
+ def test_access_existing_tags
24
+ assert_equal 'Horizontal (normal)', @mini_exiftool['Orientation']
25
+ @mini_exiftool['Orientation'] = 'some string'
26
+ assert_equal 'some string', @mini_exiftool['Orientation']
27
+ assert_equal false, @mini_exiftool.changed?('Orientation')
28
+ @mini_exiftool['Orientation'] = 2
29
+ assert_equal 2, @mini_exiftool['Orientation']
30
+ assert @mini_exiftool.changed_tags.include?('Orientation')
31
+ @mini_exiftool.save
32
+ assert_equal 'Mirror horizontal', @mini_exiftool['Orientation']
33
+ @mini_exiftool_num.reload
34
+ assert_equal 2, @mini_exiftool_num['Orientation']
35
+ end
36
+
37
+ def test_access_existing_tags_numerical
38
+ assert_equal 1, @mini_exiftool_num['Orientation']
39
+ @mini_exiftool_num['Orientation'] = 2
40
+ assert_equal 2, @mini_exiftool_num['Orientation']
41
+ assert_equal 2, @mini_exiftool_num.orientation
42
+ @mini_exiftool_num.orientation = 3
43
+ assert_equal 3, @mini_exiftool_num.orientation
44
+ assert @mini_exiftool_num.changed_tags.include?('Orientation')
45
+ @mini_exiftool_num.save
46
+ assert_equal 3, @mini_exiftool_num['Orientation']
47
+ @mini_exiftool.reload
48
+ assert_equal 'Rotate 180', @mini_exiftool['Orientation']
49
+ end
50
+
51
+ def test_access_non_writable_tags
52
+ @mini_exiftool_num['FileSize'] = 1
53
+ assert_equal true, @mini_exiftool_num.changed?
54
+ @mini_exiftool_num['SomeNonWritableName'] = 'test'
55
+ assert_equal true, @mini_exiftool_num.changed?
56
+ end
57
+
58
+ # Catching rubyforge bug [#29596]
59
+ # Thanks to Michael Grove for reporting
60
+ # Part 1
61
+ def test_quotes_in_values
62
+ caption = "\"String in quotes\""
63
+ @mini_exiftool.caption = caption
64
+ assert_equal true, @mini_exiftool.save, 'Saving error'
65
+ @mini_exiftool.reload
66
+ assert_equal caption, @mini_exiftool.caption
67
+ end
68
+
69
+ # Catching rubyforge bug [#29596]
70
+ # Thanks to Michael Grove for reporting
71
+ # Part 2
72
+ def test_quotes_and_apostrophe_in_values
73
+ caption = caption = "\"Watch your step, it's slippery.\""
74
+ @mini_exiftool.caption = caption
75
+ assert_equal true, @mini_exiftool.save, 'Saving error'
76
+ @mini_exiftool.reload
77
+ assert_equal caption, @mini_exiftool.caption
78
+ end
79
+
80
+ def test_time_conversion
81
+ t = Time.now
82
+ @mini_exiftool_num['DateTimeOriginal'] = t
83
+ assert_kind_of Time, @mini_exiftool_num['DateTimeOriginal']
84
+ assert_equal true, @mini_exiftool_num.changed_tags.include?('DateTimeOriginal')
85
+ @mini_exiftool_num.save
86
+ assert_equal false, @mini_exiftool_num.changed?
87
+ assert_kind_of Time, @mini_exiftool_num['DateTimeOriginal']
88
+ assert_equal t.to_s, @mini_exiftool_num['DateTimeOriginal'].to_s
89
+ end
90
+
91
+ def test_float_conversion
92
+ assert_kind_of Float, @mini_exiftool_num['BrightnessValue']
93
+ new_time = @mini_exiftool_num['BrightnessValue'] + 1
94
+ @mini_exiftool_num['BrightnessValue'] = new_time
95
+ assert_equal new_time, @mini_exiftool_num['BrightnessValue']
96
+ assert_equal true, @mini_exiftool_num.changed_tags.include?('BrightnessValue')
97
+ @mini_exiftool_num.save
98
+ assert_kind_of Float, @mini_exiftool_num['BrightnessValue']
99
+ assert_equal new_time, @mini_exiftool_num['BrightnessValue']
100
+ end
101
+
102
+ def test_integer_conversion
103
+ assert_kind_of Integer, @mini_exiftool_num['MeteringMode']
104
+ new_mode = @mini_exiftool_num['MeteringMode'] - 1
105
+ @mini_exiftool_num['MeteringMode'] = new_mode
106
+ assert_equal new_mode, @mini_exiftool_num['MeteringMode']
107
+ assert @mini_exiftool_num.changed_tags.include?('MeteringMode')
108
+ @mini_exiftool_num.save
109
+ assert_equal new_mode, @mini_exiftool_num['MeteringMode']
110
+ end
111
+
112
+ def test_rational_conversion
113
+ new_exposure_time = Rational(1, 125)
114
+ @mini_exiftool.exposure_time = new_exposure_time
115
+ assert @mini_exiftool.changed?, 'No changing of value.'
116
+ ok = @mini_exiftool.save
117
+ assert ok, 'Saving failed.'
118
+ @mini_exiftool.reload
119
+ assert_equal new_exposure_time, @mini_exiftool.exposure_time
120
+ end
121
+
122
+ def test_list_conversion
123
+ arr = ['a', 'b', 'c']
124
+ @mini_exiftool['Keywords'] = arr
125
+ ok = @mini_exiftool.save
126
+ assert ok
127
+ assert_equal arr, @mini_exiftool['Keywords']
128
+ arr = ['text, with', 'commas, let us look']
129
+ @mini_exiftool['Keywords'] = arr
130
+ ok = @mini_exiftool.save
131
+ assert ok
132
+ if MiniExiftool.exiftool_version.to_f < 7.41
133
+ assert_equal ['text', 'with', 'commas', 'let us look'], @mini_exiftool['Keywords']
134
+ else
135
+ assert_equal arr, @mini_exiftool['Keywords']
136
+ end
137
+ end
138
+
139
+ def test_revert_one
140
+ @mini_exiftool_num['Orientation'] = 2
141
+ @mini_exiftool_num['ISO'] = 200
142
+ res = @mini_exiftool_num.revert 'Orientation'
143
+ assert_equal 1, @mini_exiftool_num['Orientation']
144
+ assert_equal 200, @mini_exiftool_num['ISO']
145
+ assert_equal true, res
146
+ res = @mini_exiftool_num.revert 'Orientation'
147
+ assert_equal false, res
148
+ end
149
+
150
+ def test_revert_all
151
+ @mini_exiftool_num['Orientation'] = 2
152
+ @mini_exiftool_num['ISO'] = 200
153
+ res = @mini_exiftool_num.revert
154
+ assert_equal 1, @mini_exiftool_num['Orientation']
155
+ assert_equal 400, @mini_exiftool_num['ISO']
156
+ assert_equal true, res
157
+ res = @mini_exiftool_num.revert
158
+ assert_equal false, res
159
+ end
160
+
161
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leeh-mini_exiftool
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.0
5
+ platform: ruby
6
+ authors:
7
+ - Jan Friedrich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rim
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.1
27
+ description: ''
28
+ email: janfri26@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.rdoc
34
+ - Changelog
35
+ - COPYING
36
+ - Rakefile
37
+ - lib/mini_exiftool.rb
38
+ - test/data/Bad_PreviewIFD.jpg
39
+ - test/data/Canon.jpg
40
+ - test/data/INFORMATION
41
+ - test/data/test.jpg
42
+ - test/data/test.jpg.json
43
+ - test/data/test_coordinates.jpg
44
+ - test/data/test_special_dates.jpg
45
+ - test/helpers_for_test.rb
46
+ - test/test_bad_preview_ifd.rb
47
+ - test/test_class_methods.rb
48
+ - test/test_composite.rb
49
+ - test/test_dumping.rb
50
+ - test/test_from_hash.rb
51
+ - test/test_read.rb
52
+ - test/test_read_coordinates.rb
53
+ - test/test_read_numerical.rb
54
+ - test/test_save.rb
55
+ - test/test_special.rb
56
+ - test/test_special_dates.rb
57
+ - test/test_write.rb
58
+ homepage: http://gitorious.org/mini_exiftool
59
+ licenses: []
60
+ metadata: {}
61
+ post_install_message: ! "\n+-----------------------------------------------------------------------+\n|
62
+ Please ensure you have installed exiftool and it's found in your PATH |\n| (Try
63
+ \"exiftool -ver\" on your commandline). For more details see |\n| http://www.sno.phy.queensu.ca/~phil/exiftool/install.html
64
+ \ |\n+-----------------------------------------------------------------------+\n
65
+ \ "
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.0.3
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: This library is wrapper for the Exiftool command-line application (http://www.sno.phy.queensu.ca/~phil/exiftool).
85
+ test_files: []