flac2mp3 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -0
- data/Manifest.txt +0 -2
- data/config/hoe.rb +2 -2
- data/lib/flac2mp3.rb +4 -6
- data/lib/flac2mp3/version.rb +2 -2
- data/spec/flac2mp3_command_spec.rb +56 -32
- data/spec/flac2mp3_spec.rb +259 -194
- data/spec/metaflac2mp3_command_spec.rb +8 -6
- data/spec/spec_helper.rb +3 -21
- metadata +11 -11
- data/spec/spec.opts +0 -3
- data/tasks/rspec.rake +0 -21
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/config/hoe.rb
CHANGED
|
@@ -12,8 +12,8 @@ EXTRA_DEPENDENCIES = [
|
|
|
12
12
|
['ruby-mp3info', '>= 0.5.1']
|
|
13
13
|
] # An array of rubygem dependencies [name, version]
|
|
14
14
|
EXTRA_DEV_DEPENDENCIES = [
|
|
15
|
-
['
|
|
16
|
-
['
|
|
15
|
+
['bacon', '>= 1.1.0'],
|
|
16
|
+
['facon', '>= 0.4.1']
|
|
17
17
|
] # An array of rubygem dependencies [name, version]
|
|
18
18
|
|
|
19
19
|
@config_file = "~/.rubyforge/user-config.yml"
|
data/lib/flac2mp3.rb
CHANGED
|
@@ -2,10 +2,10 @@ $:.unshift File.dirname(__FILE__)
|
|
|
2
2
|
require 'flacinfo'
|
|
3
3
|
require 'mp3info'
|
|
4
4
|
require 'yaml'
|
|
5
|
+
require 'iconv'
|
|
5
6
|
|
|
6
7
|
class Flac2mp3
|
|
7
8
|
def initialize(options = {})
|
|
8
|
-
@config = {}
|
|
9
9
|
load_config
|
|
10
10
|
set_options(options)
|
|
11
11
|
end
|
|
@@ -49,6 +49,7 @@ class Flac2mp3
|
|
|
49
49
|
key = key.to_s.downcase.to_sym
|
|
50
50
|
value = value.to_i if value.respond_to?(:match) and value.match(/^\d+$/)
|
|
51
51
|
value = value.to_s if self.class.string_fields.include?(key)
|
|
52
|
+
value = Iconv.conv('ISO-8859-1//TRANSLIT', 'UTF-8', value) if value.is_a?(String)
|
|
52
53
|
|
|
53
54
|
hash[key] = value
|
|
54
55
|
hash
|
|
@@ -66,13 +67,10 @@ class Flac2mp3
|
|
|
66
67
|
end
|
|
67
68
|
|
|
68
69
|
def load_config
|
|
70
|
+
@config = {}
|
|
69
71
|
yaml = YAML.load(File.read(File.expand_path('~/.flac2mp3'))) || {}
|
|
70
|
-
|
|
71
|
-
hash[key.to_sym] = value
|
|
72
|
-
hash
|
|
73
|
-
end
|
|
72
|
+
yaml.each { |k, v| @config[k.to_sym] = v }
|
|
74
73
|
rescue Errno::ENOENT
|
|
75
|
-
@config = {}
|
|
76
74
|
end
|
|
77
75
|
|
|
78
76
|
def set_options(options)
|
data/lib/flac2mp3/version.rb
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
rescue SystemExit
|
|
9
|
-
end
|
|
3
|
+
def run_command(*args)
|
|
4
|
+
Object.const_set(:ARGV, args)
|
|
5
|
+
begin
|
|
6
|
+
eval File.read(File.join(File.dirname(__FILE__), *%w[.. bin flac2mp3]))
|
|
7
|
+
rescue SystemExit
|
|
10
8
|
end
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Flac2mp3.
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'flac2mp3 command' do
|
|
12
|
+
before do
|
|
13
|
+
Flac2mp3.stub!(:convert)
|
|
14
|
+
Flac2mp3.stub!(:convert_metadata)
|
|
16
15
|
|
|
17
16
|
[:ARGV, :OPTIONS, :MANDATORY_OPTIONS].each do |const|
|
|
18
17
|
Object.send(:remove_const, const) if Object.const_defined?(const)
|
|
@@ -20,97 +19,122 @@ describe 'flac2mp3 command' do
|
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
it 'should exist' do
|
|
23
|
-
lambda { run_command('blah') }.
|
|
22
|
+
lambda { run_command('blah') }.should.not.raise(Errno::ENOENT)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
it 'should require a filename' do
|
|
27
|
-
self.
|
|
26
|
+
self.should.receive(:puts) do |output|
|
|
27
|
+
output.should.match(/usage.+filename/i)
|
|
28
|
+
end
|
|
28
29
|
run_command
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
it 'should pass the filename to Flac2mp3 for conversion' do
|
|
32
|
-
Flac2mp3.
|
|
33
|
+
Flac2mp3.should.receive(:convert) do |filename, _|
|
|
34
|
+
filename.should == 'blah'
|
|
35
|
+
end
|
|
33
36
|
run_command('blah')
|
|
34
37
|
end
|
|
35
38
|
|
|
36
39
|
it 'should pass on a true flac-deletion option if specified on the command line (using --delete)' do
|
|
37
|
-
Flac2mp3.
|
|
40
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
41
|
+
options[:delete].should == true
|
|
42
|
+
end
|
|
38
43
|
run_command('blah', '--delete')
|
|
39
44
|
end
|
|
40
45
|
|
|
41
46
|
it 'should pass on a false flac-deletion option if specified on the command line (using --no-delete)' do
|
|
42
|
-
Flac2mp3.
|
|
47
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
48
|
+
options[:delete].should == false
|
|
49
|
+
end
|
|
43
50
|
run_command('blah', '--no-delete')
|
|
44
51
|
end
|
|
45
52
|
|
|
46
53
|
it 'should pass on a true flac-deletion option if specified on the command line (using -d)' do
|
|
47
|
-
Flac2mp3.
|
|
54
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
55
|
+
options[:delete].should == true
|
|
56
|
+
end
|
|
48
57
|
run_command('blah', '-d')
|
|
49
58
|
end
|
|
50
59
|
|
|
51
60
|
it 'should not pass on any flac-deletion option if nothing specified on the command line' do
|
|
52
|
-
Flac2mp3.
|
|
61
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
62
|
+
options.should.not.include(:delete)
|
|
63
|
+
end
|
|
53
64
|
run_command('blah')
|
|
54
65
|
end
|
|
55
66
|
|
|
56
67
|
it 'should pass on a true silence option if specified on the command line (using --silent)' do
|
|
57
|
-
Flac2mp3.
|
|
68
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
69
|
+
options[:silent].should == true
|
|
70
|
+
end
|
|
58
71
|
run_command('blah', '--silent')
|
|
59
72
|
end
|
|
60
73
|
|
|
61
74
|
it 'should pass on a true silence option if specified on the command line (using -s)' do
|
|
62
|
-
Flac2mp3.
|
|
75
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
76
|
+
options[:silent].should == true
|
|
77
|
+
end
|
|
63
78
|
run_command('blah', '-s')
|
|
64
79
|
end
|
|
65
80
|
|
|
66
81
|
it 'should not pass on any silence option if nothing specified on the command line' do
|
|
67
|
-
Flac2mp3.
|
|
82
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
83
|
+
options.should.not.include(:silent)
|
|
84
|
+
end
|
|
68
85
|
run_command('blah')
|
|
69
86
|
end
|
|
70
87
|
|
|
71
88
|
it 'should pass on the encoding option specified on the command line' do
|
|
72
|
-
Flac2mp3.
|
|
89
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
90
|
+
options[:encoding].should == '--preset fast standard'
|
|
91
|
+
end
|
|
73
92
|
run_command('blah', '--encoding', '--preset fast standard')
|
|
74
93
|
end
|
|
75
94
|
|
|
76
95
|
it 'should pass on the encoding option specified in shorthand on the command line' do
|
|
77
|
-
Flac2mp3.
|
|
96
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
97
|
+
options[:encoding].should == '--preset fast standard'
|
|
98
|
+
end
|
|
78
99
|
run_command('blah', '-e', '--preset fast standard')
|
|
79
100
|
end
|
|
80
101
|
|
|
81
102
|
it 'should pass on no encoding option if none specified on the command line' do
|
|
82
|
-
Flac2mp3.
|
|
103
|
+
Flac2mp3.should.receive(:convert) do |_, options|
|
|
104
|
+
options.should.not.include(:encoding)
|
|
105
|
+
end
|
|
83
106
|
run_command('blah')
|
|
84
107
|
end
|
|
85
108
|
|
|
86
109
|
it 'should take a --meta option to convert metadata' do
|
|
87
|
-
lambda { run_command('--meta', 'blah.flac', 'something.mp3') }.
|
|
110
|
+
lambda { run_command('--meta', 'blah.flac', 'something.mp3') }.should.not.raise(OptionParser::InvalidOption)
|
|
88
111
|
end
|
|
89
112
|
|
|
90
113
|
describe 'when converting metadata' do
|
|
91
|
-
before
|
|
114
|
+
before do
|
|
92
115
|
@infile = 'blah.flac'
|
|
93
116
|
@outfile = 'something.mp3'
|
|
94
117
|
end
|
|
95
118
|
|
|
96
119
|
it 'should require two filenames' do
|
|
97
|
-
self.
|
|
120
|
+
self.should.receive(:puts) do |output|
|
|
121
|
+
output.should.match(/usage.+filename/i)
|
|
122
|
+
end
|
|
98
123
|
run_command('--meta', @infile)
|
|
99
124
|
end
|
|
100
125
|
|
|
101
126
|
it 'should pass the filenames to Flac2mp3 for metadata conversion' do
|
|
102
|
-
Flac2mp3.
|
|
127
|
+
Flac2mp3.should.receive(:convert_metadata).with(@infile, @outfile)
|
|
103
128
|
run_command('--meta', @infile, @outfile)
|
|
104
129
|
end
|
|
105
130
|
|
|
106
131
|
it 'should not attempt to convert any files' do
|
|
107
|
-
|
|
108
|
-
Flac2mp3.expects(:convert).never.when(@convert_state.is('test'))
|
|
132
|
+
Flac2mp3.should.receive(:convert).never
|
|
109
133
|
run_command('--meta', @infile, @outfile)
|
|
110
134
|
end
|
|
111
135
|
|
|
112
136
|
it 'should accept a shorthand -m option' do
|
|
113
|
-
Flac2mp3.
|
|
137
|
+
Flac2mp3.should.receive(:convert_metadata).with(@infile, @outfile)
|
|
114
138
|
run_command('-m', @infile, @outfile)
|
|
115
139
|
end
|
|
116
140
|
end
|
data/spec/flac2mp3_spec.rb
CHANGED
|
@@ -1,58 +1,79 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
2
|
|
|
3
3
|
describe Flac2mp3 do
|
|
4
|
-
before
|
|
4
|
+
before do
|
|
5
5
|
@flac2mp3 = Flac2mp3.new
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
describe 'when initialized' do
|
|
9
|
-
before
|
|
9
|
+
before do
|
|
10
10
|
@options = { :silent => true, :delete => false }
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it 'should accept options' do
|
|
14
|
-
lambda { Flac2mp3.new(@options) }.
|
|
14
|
+
lambda { Flac2mp3.new(@options) }.should.not.raise(ArgumentError)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it 'should not require options' do
|
|
18
|
-
lambda { Flac2mp3.new }.
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
lambda { Flac2mp3.new }.should.not.raise(ArgumentError)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe do
|
|
22
|
+
# unnamed describe block just to give a level of organization
|
|
23
|
+
# to this subclass-based initialize-behavior testing
|
|
24
|
+
before do
|
|
25
|
+
@subclass = Class.new(Flac2mp3) do
|
|
26
|
+
attr_reader :config_loaded, :options_set, :options
|
|
27
|
+
|
|
28
|
+
def load_config
|
|
29
|
+
@config_loaded = true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def set_options(*args)
|
|
33
|
+
@options_set = true
|
|
34
|
+
@options = args
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should load the configuration' do
|
|
40
|
+
obj = @subclass.new
|
|
41
|
+
obj.config_loaded.should == true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'should set the options' do
|
|
45
|
+
obj = @subclass.new(@options)
|
|
46
|
+
obj.options_set.should == true
|
|
47
|
+
obj.options.should == [@options]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should default to empty options' do
|
|
51
|
+
obj = @subclass.new
|
|
52
|
+
obj.options_set.should == true
|
|
53
|
+
obj.options.should == [{}]
|
|
54
|
+
end
|
|
34
55
|
end
|
|
35
56
|
end
|
|
36
57
|
|
|
37
58
|
it 'should load the configuration' do
|
|
38
|
-
@flac2mp3.should
|
|
59
|
+
@flac2mp3.should.respond_to(:load_config)
|
|
39
60
|
end
|
|
40
61
|
|
|
41
62
|
describe 'loading the configuration' do
|
|
42
63
|
it 'should look for a config file' do
|
|
43
|
-
File.
|
|
64
|
+
File.should.receive(:read).with(File.expand_path('~/.flac2mp3')).and_return('')
|
|
44
65
|
@flac2mp3.load_config
|
|
45
66
|
end
|
|
46
67
|
|
|
47
68
|
describe 'when a config file is found' do
|
|
48
|
-
before
|
|
69
|
+
before do
|
|
49
70
|
@config = { :silent => true, :delete => false }
|
|
50
71
|
@contents = @config.to_yaml
|
|
51
|
-
File.
|
|
72
|
+
File.stub!(:read).and_return(@contents)
|
|
52
73
|
end
|
|
53
74
|
|
|
54
75
|
it 'should parse the file as YAML' do
|
|
55
|
-
YAML.
|
|
76
|
+
YAML.should.receive(:load).with(@contents)
|
|
56
77
|
@flac2mp3.load_config
|
|
57
78
|
end
|
|
58
79
|
|
|
@@ -62,13 +83,13 @@ describe Flac2mp3 do
|
|
|
62
83
|
end
|
|
63
84
|
|
|
64
85
|
it 'should convert string keys to symbols' do
|
|
65
|
-
File.
|
|
86
|
+
File.stub!(:read).and_return({ 'silent' => true, 'delete' => false }.to_yaml)
|
|
66
87
|
@flac2mp3.load_config
|
|
67
88
|
@flac2mp3.config.should == @config
|
|
68
89
|
end
|
|
69
90
|
|
|
70
91
|
it 'should handle an empty file' do
|
|
71
|
-
File.
|
|
92
|
+
File.stub!(:read).and_return('')
|
|
72
93
|
@flac2mp3.load_config
|
|
73
94
|
@flac2mp3.config.should == {}
|
|
74
95
|
end
|
|
@@ -81,8 +102,8 @@ describe Flac2mp3 do
|
|
|
81
102
|
end
|
|
82
103
|
|
|
83
104
|
describe 'when no config file is found' do
|
|
84
|
-
before
|
|
85
|
-
File.
|
|
105
|
+
before do
|
|
106
|
+
File.stub!(:read).and_raise(Errno::ENOENT)
|
|
86
107
|
end
|
|
87
108
|
|
|
88
109
|
it 'should store an empty config' do
|
|
@@ -92,28 +113,28 @@ describe Flac2mp3 do
|
|
|
92
113
|
end
|
|
93
114
|
|
|
94
115
|
it 'should set options' do
|
|
95
|
-
@flac2mp3.should
|
|
116
|
+
@flac2mp3.should.respond_to(:set_options)
|
|
96
117
|
end
|
|
97
118
|
|
|
98
119
|
describe 'setting options' do
|
|
99
|
-
before
|
|
120
|
+
before do
|
|
100
121
|
@options = { :silent => true, :delete => false }
|
|
101
122
|
end
|
|
102
123
|
|
|
103
124
|
it 'should accept options' do
|
|
104
|
-
lambda { @flac2mp3.set_options(:silent => true) }.
|
|
125
|
+
lambda { @flac2mp3.set_options(:silent => true) }.should.not.raise(ArgumentError)
|
|
105
126
|
end
|
|
106
127
|
|
|
107
128
|
it 'should require options' do
|
|
108
|
-
lambda { @flac2mp3.set_options }.should
|
|
129
|
+
lambda { @flac2mp3.set_options }.should.raise(ArgumentError)
|
|
109
130
|
end
|
|
110
131
|
|
|
111
132
|
it 'should accept a hash of options' do
|
|
112
|
-
lambda { @flac2mp3.set_options(:silent => true) }.
|
|
133
|
+
lambda { @flac2mp3.set_options(:silent => true) }.should.not.raise(TypeError)
|
|
113
134
|
end
|
|
114
135
|
|
|
115
136
|
it 'should require a hash of options' do
|
|
116
|
-
lambda { @flac2mp3.set_options('silent') }.should
|
|
137
|
+
lambda { @flac2mp3.set_options('silent') }.should.raise(TypeError)
|
|
117
138
|
end
|
|
118
139
|
|
|
119
140
|
it 'should store the options' do
|
|
@@ -129,39 +150,39 @@ describe Flac2mp3 do
|
|
|
129
150
|
end
|
|
130
151
|
|
|
131
152
|
describe 'querying options' do
|
|
132
|
-
before
|
|
133
|
-
File.
|
|
153
|
+
before do
|
|
154
|
+
File.stub!(:read).and_return('')
|
|
134
155
|
@flac2mp3.load_config
|
|
135
156
|
end
|
|
136
157
|
|
|
137
158
|
it 'should indicate the original file should be deleted when a true option is given' do
|
|
138
159
|
@flac2mp3.set_options(:delete => true)
|
|
139
|
-
@flac2mp3.delete?.should
|
|
160
|
+
@flac2mp3.delete?.should == true
|
|
140
161
|
end
|
|
141
162
|
|
|
142
163
|
it 'should indicate the original file should not be deleted when a false option is given' do
|
|
143
164
|
@flac2mp3.set_options(:delete => false)
|
|
144
|
-
@flac2mp3.delete?.should
|
|
165
|
+
@flac2mp3.delete?.should == false
|
|
145
166
|
end
|
|
146
167
|
|
|
147
168
|
it 'should indicate the original file should not be deleted when no option is given' do
|
|
148
169
|
@flac2mp3.set_options({})
|
|
149
|
-
@flac2mp3.delete?.should
|
|
170
|
+
@flac2mp3.delete?.should == false
|
|
150
171
|
end
|
|
151
172
|
|
|
152
173
|
it 'should indicate the conversion should be silent when a true option is given' do
|
|
153
174
|
@flac2mp3.set_options(:silent => true)
|
|
154
|
-
@flac2mp3.silent?.should
|
|
175
|
+
@flac2mp3.silent?.should == true
|
|
155
176
|
end
|
|
156
177
|
|
|
157
178
|
it 'should indicate the conversion should not be silent when a false option is given' do
|
|
158
179
|
@flac2mp3.set_options(:silent => false)
|
|
159
|
-
@flac2mp3.silent?.should
|
|
180
|
+
@flac2mp3.silent?.should == false
|
|
160
181
|
end
|
|
161
182
|
|
|
162
183
|
it 'should indicate the conversion should not be silent when no option is given' do
|
|
163
184
|
@flac2mp3.set_options({})
|
|
164
|
-
@flac2mp3.silent?.should
|
|
185
|
+
@flac2mp3.silent?.should == false
|
|
165
186
|
end
|
|
166
187
|
|
|
167
188
|
it 'should store the given encoding' do
|
|
@@ -177,150 +198,151 @@ describe Flac2mp3 do
|
|
|
177
198
|
|
|
178
199
|
it 'should use values from the configuration' do
|
|
179
200
|
config = {:silent => true}
|
|
180
|
-
File.
|
|
181
|
-
Flac2mp3.new.silent?.should
|
|
201
|
+
File.stub!(:read).and_return(config.to_yaml)
|
|
202
|
+
Flac2mp3.new.silent?.should == true
|
|
182
203
|
end
|
|
183
204
|
|
|
184
205
|
it 'should override configuration values with options' do
|
|
185
206
|
config = {:silent => true}
|
|
186
|
-
File.
|
|
187
|
-
Flac2mp3.new(:silent => false).silent?.should
|
|
207
|
+
File.stub!(:read).and_return(config.to_yaml)
|
|
208
|
+
Flac2mp3.new(:silent => false).silent?.should == false
|
|
188
209
|
end
|
|
189
210
|
|
|
190
211
|
it 'should combine configuration and option values' do
|
|
191
212
|
config = {:silent => true}
|
|
192
|
-
File.
|
|
213
|
+
File.stub!(:read).and_return(config.to_yaml)
|
|
193
214
|
flac2mp3 = Flac2mp3.new(:delete => true)
|
|
194
215
|
|
|
195
|
-
flac2mp3.silent?.should
|
|
196
|
-
flac2mp3.delete?.should
|
|
216
|
+
flac2mp3.silent?.should == true
|
|
217
|
+
flac2mp3.delete?.should == true
|
|
197
218
|
end
|
|
198
219
|
end
|
|
199
220
|
|
|
200
221
|
it 'should convert' do
|
|
201
|
-
@flac2mp3.should
|
|
222
|
+
@flac2mp3.should.respond_to(:convert)
|
|
202
223
|
end
|
|
203
224
|
|
|
204
225
|
describe 'when converting' do
|
|
205
|
-
before
|
|
226
|
+
before do
|
|
206
227
|
@filename = 'test.flac'
|
|
207
|
-
@flac2mp3.
|
|
228
|
+
@flac2mp3.stub!(:process_conversion)
|
|
229
|
+
FileTest.stub!(:file?).and_return(true)
|
|
208
230
|
end
|
|
209
231
|
|
|
210
232
|
it 'should accept a filename' do
|
|
211
|
-
lambda { @flac2mp3.convert(@filename) }.
|
|
233
|
+
lambda { @flac2mp3.convert(@filename) }.should.not.raise(ArgumentError)
|
|
212
234
|
end
|
|
213
235
|
|
|
214
236
|
it 'should require a filename' do
|
|
215
|
-
lambda { @flac2mp3.convert }.should
|
|
237
|
+
lambda { @flac2mp3.convert }.should.raise(ArgumentError)
|
|
216
238
|
end
|
|
217
239
|
|
|
218
240
|
it 'should check if the filename belongs to a regular file' do
|
|
219
|
-
FileTest.
|
|
241
|
+
FileTest.should.receive(:file?).with(@filename).and_return(true)
|
|
220
242
|
@flac2mp3.convert(@filename)
|
|
221
243
|
end
|
|
222
244
|
|
|
223
245
|
describe 'when given a filename belonging to a regular file' do
|
|
224
|
-
before
|
|
225
|
-
FileTest.
|
|
246
|
+
before do
|
|
247
|
+
FileTest.stub!(:file?).and_return(true)
|
|
226
248
|
end
|
|
227
249
|
|
|
228
250
|
it 'should not error' do
|
|
229
|
-
lambda { @flac2mp3.convert(@filename) }.
|
|
251
|
+
lambda { @flac2mp3.convert(@filename) }.should.not.raise(TypeError)
|
|
230
252
|
end
|
|
231
253
|
|
|
232
254
|
it 'should process the conversion' do
|
|
233
|
-
@flac2mp3.
|
|
255
|
+
@flac2mp3.should.receive(:process_conversion).with(@filename)
|
|
234
256
|
@flac2mp3.convert(@filename)
|
|
235
257
|
end
|
|
236
258
|
|
|
237
259
|
it 'should check if the original file should be deleted' do
|
|
238
|
-
@flac2mp3.
|
|
260
|
+
@flac2mp3.should.receive(:delete?)
|
|
239
261
|
@flac2mp3.convert(@filename)
|
|
240
262
|
end
|
|
241
263
|
|
|
242
264
|
describe 'when the original file should be deleted' do
|
|
243
|
-
before
|
|
244
|
-
@flac2mp3.
|
|
265
|
+
before do
|
|
266
|
+
@flac2mp3.stub!(:delete?).and_return(true)
|
|
245
267
|
end
|
|
246
268
|
|
|
247
269
|
it 'should delete the original file' do
|
|
248
|
-
File.
|
|
270
|
+
File.should.receive(:delete).with(@filename)
|
|
249
271
|
@flac2mp3.convert(@filename)
|
|
250
272
|
end
|
|
251
273
|
end
|
|
252
274
|
|
|
253
275
|
describe 'when the original file should not be deleted' do
|
|
254
|
-
before
|
|
255
|
-
@flac2mp3.
|
|
276
|
+
before do
|
|
277
|
+
@flac2mp3.stub!(:delete?).and_return(false)
|
|
256
278
|
end
|
|
257
279
|
|
|
258
280
|
it 'should not delete the original file' do
|
|
259
|
-
File.
|
|
281
|
+
File.should.receive(:delete).never
|
|
260
282
|
@flac2mp3.convert(@filename)
|
|
261
283
|
end
|
|
262
284
|
end
|
|
263
285
|
end
|
|
264
286
|
|
|
265
287
|
describe 'when given a filename not belonging to a regular file' do
|
|
266
|
-
before
|
|
267
|
-
FileTest.
|
|
288
|
+
before do
|
|
289
|
+
FileTest.stub!(:file?).and_return(false)
|
|
268
290
|
end
|
|
269
291
|
|
|
270
292
|
it 'should error' do
|
|
271
|
-
lambda { @flac2mp3.convert(@filename) }.should
|
|
293
|
+
lambda { @flac2mp3.convert(@filename) }.should.raise(TypeError)
|
|
272
294
|
end
|
|
273
295
|
end
|
|
274
296
|
end
|
|
275
297
|
|
|
276
298
|
it 'should process conversion' do
|
|
277
|
-
@flac2mp3.should
|
|
299
|
+
@flac2mp3.should.respond_to(:process_conversion)
|
|
278
300
|
end
|
|
279
301
|
|
|
280
302
|
describe 'when processing conversion' do
|
|
281
|
-
before
|
|
303
|
+
before do
|
|
282
304
|
@filename = 'test.flac'
|
|
283
305
|
@out_filename = 'test.mp3'
|
|
284
|
-
@flac2mp3.
|
|
285
|
-
@flac2mp3.
|
|
286
|
-
@flac2mp3.
|
|
306
|
+
@flac2mp3.stub!(:output_filename).and_return(@out_filename)
|
|
307
|
+
@flac2mp3.stub!(:convert_data)
|
|
308
|
+
@flac2mp3.stub!(:convert_metadata)
|
|
287
309
|
end
|
|
288
310
|
|
|
289
311
|
it 'should accept a filename' do
|
|
290
|
-
lambda { @flac2mp3.process_conversion(@filename) }.
|
|
312
|
+
lambda { @flac2mp3.process_conversion(@filename) }.should.not.raise(ArgumentError)
|
|
291
313
|
end
|
|
292
314
|
|
|
293
315
|
it 'should require a filename' do
|
|
294
|
-
lambda { @flac2mp3.process_conversion }.should
|
|
316
|
+
lambda { @flac2mp3.process_conversion }.should.raise(ArgumentError)
|
|
295
317
|
end
|
|
296
318
|
|
|
297
319
|
it 'get the output filename from the given filename' do
|
|
298
|
-
@flac2mp3.
|
|
320
|
+
@flac2mp3.should.receive(:output_filename).with(@filename)
|
|
299
321
|
@flac2mp3.process_conversion(@filename)
|
|
300
322
|
end
|
|
301
323
|
|
|
302
324
|
it 'should convert data' do
|
|
303
|
-
@flac2mp3.
|
|
325
|
+
@flac2mp3.should.receive(:convert_data).with(@filename, @out_filename)
|
|
304
326
|
@flac2mp3.process_conversion(@filename)
|
|
305
327
|
end
|
|
306
328
|
|
|
307
329
|
it 'should convert metadata' do
|
|
308
|
-
@flac2mp3.
|
|
330
|
+
@flac2mp3.should.receive(:convert_metadata).with(@filename, @out_filename)
|
|
309
331
|
@flac2mp3.process_conversion(@filename)
|
|
310
332
|
end
|
|
311
333
|
end
|
|
312
334
|
|
|
313
335
|
it 'should provide an output filename' do
|
|
314
|
-
@flac2mp3.should
|
|
336
|
+
@flac2mp3.should.respond_to(:output_filename)
|
|
315
337
|
end
|
|
316
338
|
|
|
317
339
|
describe 'providing an output filename' do
|
|
318
340
|
it 'should accept a filename' do
|
|
319
|
-
lambda { @flac2mp3.output_filename('blah.flac') }.
|
|
341
|
+
lambda { @flac2mp3.output_filename('blah.flac') }.should.not.raise(ArgumentError)
|
|
320
342
|
end
|
|
321
343
|
|
|
322
344
|
it 'should require a filename' do
|
|
323
|
-
lambda { @flac2mp3.output_filename }.should
|
|
345
|
+
lambda { @flac2mp3.output_filename }.should.raise(ArgumentError)
|
|
324
346
|
end
|
|
325
347
|
|
|
326
348
|
it 'should convert a .flac extension to an .mp3 extension' do
|
|
@@ -333,81 +355,81 @@ describe Flac2mp3 do
|
|
|
333
355
|
end
|
|
334
356
|
|
|
335
357
|
it 'should convert data' do
|
|
336
|
-
@flac2mp3.should
|
|
358
|
+
@flac2mp3.should.respond_to(:convert_data)
|
|
337
359
|
end
|
|
338
360
|
|
|
339
361
|
describe 'when converting data' do
|
|
340
|
-
before
|
|
362
|
+
before do
|
|
341
363
|
@filename = 'test.flac'
|
|
342
364
|
@out_filename = 'test.mp3'
|
|
343
365
|
@flac_command = 'flac command'
|
|
344
366
|
@mp3_command = 'mp3 command'
|
|
345
|
-
@flac2mp3.
|
|
346
|
-
@flac2mp3.
|
|
347
|
-
@flac2mp3.
|
|
367
|
+
@flac2mp3.stub!(:flac_command).and_return(@flac_command)
|
|
368
|
+
@flac2mp3.stub!(:mp3_command).and_return(@mp3_command)
|
|
369
|
+
@flac2mp3.stub!(:system)
|
|
348
370
|
end
|
|
349
371
|
|
|
350
372
|
it 'should accept a filename and an output filename' do
|
|
351
|
-
lambda { @flac2mp3.convert_data(@filename, @out_filename) }.
|
|
373
|
+
lambda { @flac2mp3.convert_data(@filename, @out_filename) }.should.not.raise(ArgumentError)
|
|
352
374
|
end
|
|
353
375
|
|
|
354
376
|
it 'should require an output filename' do
|
|
355
|
-
lambda { @flac2mp3.convert_data(@filename) }.should
|
|
377
|
+
lambda { @flac2mp3.convert_data(@filename) }.should.raise(ArgumentError)
|
|
356
378
|
end
|
|
357
379
|
|
|
358
380
|
it 'should require a filename' do
|
|
359
|
-
lambda { @flac2mp3.convert_data }.should
|
|
381
|
+
lambda { @flac2mp3.convert_data }.should.raise(ArgumentError)
|
|
360
382
|
end
|
|
361
383
|
|
|
362
384
|
it 'should call the flac command with the given filename' do
|
|
363
|
-
@flac2mp3.
|
|
385
|
+
@flac2mp3.should.receive(:flac_command).with(@filename)
|
|
364
386
|
@flac2mp3.convert_data(@filename, @out_filename)
|
|
365
387
|
end
|
|
366
388
|
|
|
367
389
|
it 'should call the mp3 command with the given output filename' do
|
|
368
|
-
@flac2mp3.
|
|
390
|
+
@flac2mp3.should.receive(:mp3_command).with(@out_filename)
|
|
369
391
|
@flac2mp3.convert_data(@filename, @out_filename)
|
|
370
392
|
end
|
|
371
393
|
|
|
372
394
|
it 'should shell out to the system with the flac and mp3 commands' do
|
|
373
|
-
@flac2mp3.
|
|
395
|
+
@flac2mp3.should.receive(:system).with("#{@flac_command} | #{@mp3_command}")
|
|
374
396
|
@flac2mp3.convert_data(@filename, @out_filename)
|
|
375
397
|
end
|
|
376
398
|
end
|
|
377
399
|
|
|
378
400
|
it 'should provide a flac command' do
|
|
379
|
-
@flac2mp3.should
|
|
401
|
+
@flac2mp3.should.respond_to(:flac_command)
|
|
380
402
|
end
|
|
381
403
|
|
|
382
404
|
describe 'when providing a flac command' do
|
|
383
|
-
before
|
|
405
|
+
before do
|
|
384
406
|
@filename = 'test.flac'
|
|
385
407
|
@safe_filename = 'safetest.safeflac'
|
|
386
|
-
@flac2mp3.
|
|
387
|
-
@flac2mp3.
|
|
408
|
+
@flac2mp3.stub!(:safequote).and_return(@safe_filename)
|
|
409
|
+
@flac2mp3.stub!(:silent?)
|
|
388
410
|
end
|
|
389
411
|
|
|
390
412
|
it 'should accept a filename' do
|
|
391
|
-
lambda { @flac2mp3.flac_command(@filename) }.
|
|
413
|
+
lambda { @flac2mp3.flac_command(@filename) }.should.not.raise(ArgumentError)
|
|
392
414
|
end
|
|
393
415
|
|
|
394
416
|
it 'should require a filename' do
|
|
395
|
-
lambda { @flac2mp3.flac_command }.should
|
|
417
|
+
lambda { @flac2mp3.flac_command }.should.raise(ArgumentError)
|
|
396
418
|
end
|
|
397
419
|
|
|
398
420
|
it 'should safequote the filename' do
|
|
399
|
-
@flac2mp3.
|
|
421
|
+
@flac2mp3.should.receive(:safequote).with(@filename)
|
|
400
422
|
@flac2mp3.flac_command(@filename)
|
|
401
423
|
end
|
|
402
424
|
|
|
403
425
|
it 'should check if the command should be silent' do
|
|
404
|
-
@flac2mp3.
|
|
426
|
+
@flac2mp3.should.receive(:silent?)
|
|
405
427
|
@flac2mp3.flac_command(@filename)
|
|
406
428
|
end
|
|
407
429
|
|
|
408
430
|
describe 'when the command should be silent' do
|
|
409
|
-
before
|
|
410
|
-
@flac2mp3.
|
|
431
|
+
before do
|
|
432
|
+
@flac2mp3.stub!(:silent?).and_return(true)
|
|
411
433
|
end
|
|
412
434
|
|
|
413
435
|
it 'should provide a flac shell command that will be silent' do
|
|
@@ -416,8 +438,8 @@ describe Flac2mp3 do
|
|
|
416
438
|
end
|
|
417
439
|
|
|
418
440
|
describe 'when the command should not be silent' do
|
|
419
|
-
before
|
|
420
|
-
@flac2mp3.
|
|
441
|
+
before do
|
|
442
|
+
@flac2mp3.stub!(:silent?).and_return(false)
|
|
421
443
|
end
|
|
422
444
|
|
|
423
445
|
it 'should provide a flac shell command that will not be silent' do
|
|
@@ -427,45 +449,45 @@ describe Flac2mp3 do
|
|
|
427
449
|
end
|
|
428
450
|
|
|
429
451
|
it 'should provide an mp3 command' do
|
|
430
|
-
@flac2mp3.should
|
|
452
|
+
@flac2mp3.should.respond_to(:mp3_command)
|
|
431
453
|
end
|
|
432
454
|
|
|
433
455
|
describe 'when providing an mp3 command' do
|
|
434
|
-
before
|
|
456
|
+
before do
|
|
435
457
|
@filename = 'test.mp3'
|
|
436
458
|
@safe_filename = 'safetest.safemp3'
|
|
437
|
-
@flac2mp3.
|
|
438
|
-
@flac2mp3.
|
|
459
|
+
@flac2mp3.stub!(:safequote).and_return(@safe_filename)
|
|
460
|
+
@flac2mp3.stub!(:silent?)
|
|
439
461
|
@encoding = '--VAWESOME'
|
|
440
|
-
@flac2mp3.
|
|
462
|
+
@flac2mp3.stub!(:encoding).and_return(@encoding)
|
|
441
463
|
end
|
|
442
464
|
|
|
443
465
|
it 'should accept a filename' do
|
|
444
|
-
lambda { @flac2mp3.mp3_command(@filename) }.
|
|
466
|
+
lambda { @flac2mp3.mp3_command(@filename) }.should.not.raise(ArgumentError)
|
|
445
467
|
end
|
|
446
468
|
|
|
447
469
|
it 'should require a filename' do
|
|
448
|
-
lambda { @flac2mp3.mp3_command }.should
|
|
470
|
+
lambda { @flac2mp3.mp3_command }.should.raise(ArgumentError)
|
|
449
471
|
end
|
|
450
472
|
|
|
451
473
|
it 'should safequote the filename' do
|
|
452
|
-
@flac2mp3.
|
|
474
|
+
@flac2mp3.should.receive(:safequote).with(@filename)
|
|
453
475
|
@flac2mp3.mp3_command(@filename)
|
|
454
476
|
end
|
|
455
477
|
|
|
456
478
|
it 'should check if the command should be silent' do
|
|
457
|
-
@flac2mp3.
|
|
479
|
+
@flac2mp3.should.receive(:silent?)
|
|
458
480
|
@flac2mp3.mp3_command(@filename)
|
|
459
481
|
end
|
|
460
482
|
|
|
461
483
|
it 'should check the encoding to use' do
|
|
462
|
-
@flac2mp3.
|
|
484
|
+
@flac2mp3.should.receive(:encoding)
|
|
463
485
|
@flac2mp3.mp3_command(@filename)
|
|
464
486
|
end
|
|
465
487
|
|
|
466
488
|
describe 'when the command should be silent' do
|
|
467
|
-
before
|
|
468
|
-
@flac2mp3.
|
|
489
|
+
before do
|
|
490
|
+
@flac2mp3.stub!(:silent?).and_return(true)
|
|
469
491
|
end
|
|
470
492
|
|
|
471
493
|
it 'should provide an mp3 shell command that will be silent' do
|
|
@@ -474,8 +496,8 @@ describe Flac2mp3 do
|
|
|
474
496
|
end
|
|
475
497
|
|
|
476
498
|
describe 'when the command should not be silent' do
|
|
477
|
-
before
|
|
478
|
-
@flac2mp3.
|
|
499
|
+
before do
|
|
500
|
+
@flac2mp3.stub!(:silent?).and_return(false)
|
|
479
501
|
end
|
|
480
502
|
|
|
481
503
|
it 'should provide an mp3 shell command that will not be silent' do
|
|
@@ -485,16 +507,16 @@ describe Flac2mp3 do
|
|
|
485
507
|
end
|
|
486
508
|
|
|
487
509
|
it 'should quote filenames safely' do
|
|
488
|
-
@flac2mp3.should
|
|
510
|
+
@flac2mp3.should.respond_to(:safequote)
|
|
489
511
|
end
|
|
490
512
|
|
|
491
513
|
describe 'when quoting a filename safely' do
|
|
492
514
|
it 'should accept a filename' do
|
|
493
|
-
lambda { @flac2mp3.safequote('test.flac') }.
|
|
515
|
+
lambda { @flac2mp3.safequote('test.flac') }.should.not.raise(ArgumentError)
|
|
494
516
|
end
|
|
495
517
|
|
|
496
518
|
it 'should require a filename' do
|
|
497
|
-
lambda { @flac2mp3.safequote }.should
|
|
519
|
+
lambda { @flac2mp3.safequote }.should.raise(ArgumentError)
|
|
498
520
|
end
|
|
499
521
|
|
|
500
522
|
it 'should leave alphanumeric characters alone' do
|
|
@@ -507,68 +529,68 @@ describe Flac2mp3 do
|
|
|
507
529
|
end
|
|
508
530
|
|
|
509
531
|
it 'should convert metadata' do
|
|
510
|
-
@flac2mp3.should
|
|
532
|
+
@flac2mp3.should.respond_to(:convert_metadata)
|
|
511
533
|
end
|
|
512
534
|
|
|
513
535
|
describe 'when converting metadata' do
|
|
514
|
-
before
|
|
536
|
+
before do
|
|
515
537
|
@filename = 'test.flac'
|
|
516
538
|
@out_filename = 'test.mp3'
|
|
517
|
-
@flacdata =
|
|
518
|
-
@flac2mp3.
|
|
519
|
-
@flac2mp3.
|
|
539
|
+
@flacdata = mock('flac data')
|
|
540
|
+
@flac2mp3.stub!(:get_flacdata).and_return(@flacdata)
|
|
541
|
+
@flac2mp3.stub!(:set_mp3data)
|
|
520
542
|
end
|
|
521
543
|
|
|
522
544
|
it 'should accept a filename and an output filename' do
|
|
523
|
-
lambda { @flac2mp3.convert_metadata(@filename, @out_filename) }.
|
|
545
|
+
lambda { @flac2mp3.convert_metadata(@filename, @out_filename) }.should.not.raise(ArgumentError)
|
|
524
546
|
end
|
|
525
547
|
|
|
526
548
|
it 'should require an output filename' do
|
|
527
|
-
lambda { @flac2mp3.convert_metadata(@filename) }.should
|
|
549
|
+
lambda { @flac2mp3.convert_metadata(@filename) }.should.raise(ArgumentError)
|
|
528
550
|
end
|
|
529
551
|
|
|
530
552
|
it 'should require a filename' do
|
|
531
|
-
lambda { @flac2mp3.convert_metadata }.should
|
|
553
|
+
lambda { @flac2mp3.convert_metadata }.should.raise(ArgumentError)
|
|
532
554
|
end
|
|
533
555
|
|
|
534
556
|
it 'should get the flac metadata' do
|
|
535
|
-
@flac2mp3.
|
|
557
|
+
@flac2mp3.should.receive(:get_flacdata).with(@filename)
|
|
536
558
|
@flac2mp3.convert_metadata(@filename, @out_filename)
|
|
537
559
|
end
|
|
538
560
|
|
|
539
561
|
it 'should set the mp3 metadata with the flac metadata' do
|
|
540
|
-
@flac2mp3.
|
|
562
|
+
@flac2mp3.should.receive(:set_mp3data).with(@out_filename, @flacdata)
|
|
541
563
|
@flac2mp3.convert_metadata(@filename, @out_filename)
|
|
542
564
|
end
|
|
543
565
|
end
|
|
544
566
|
|
|
545
567
|
it 'should get flac metadata' do
|
|
546
|
-
@flac2mp3.should
|
|
568
|
+
@flac2mp3.should.respond_to(:get_flacdata)
|
|
547
569
|
end
|
|
548
570
|
|
|
549
571
|
describe 'when getting flac metadata' do
|
|
550
|
-
before
|
|
572
|
+
before do
|
|
551
573
|
@filename = 'test.flac'
|
|
552
574
|
@tags = {}
|
|
553
|
-
@flacinfo =
|
|
554
|
-
FlacInfo.
|
|
575
|
+
@flacinfo = mock('flac info', :tags => @tags)
|
|
576
|
+
FlacInfo.stub!(:new).and_return(@flacinfo)
|
|
555
577
|
end
|
|
556
578
|
|
|
557
579
|
it 'should accept a filename' do
|
|
558
|
-
lambda { @flac2mp3.get_flacdata(@filename) }.
|
|
580
|
+
lambda { @flac2mp3.get_flacdata(@filename) }.should.not.raise(ArgumentError)
|
|
559
581
|
end
|
|
560
582
|
|
|
561
583
|
it 'should require a filename' do
|
|
562
|
-
lambda { @flac2mp3.get_flacdata }.should
|
|
584
|
+
lambda { @flac2mp3.get_flacdata }.should.raise(ArgumentError)
|
|
563
585
|
end
|
|
564
586
|
|
|
565
587
|
it 'should create a FlacInfo object' do
|
|
566
|
-
FlacInfo.
|
|
588
|
+
FlacInfo.should.receive(:new).with(@filename).and_return(@flacinfo)
|
|
567
589
|
@flac2mp3.get_flacdata(@filename)
|
|
568
590
|
end
|
|
569
591
|
|
|
570
592
|
it 'should use the FlacInfo object tags' do
|
|
571
|
-
@flacinfo.
|
|
593
|
+
@flacinfo.should.receive(:tags).and_return(@tags)
|
|
572
594
|
@flac2mp3.get_flacdata(@filename)
|
|
573
595
|
end
|
|
574
596
|
|
|
@@ -593,9 +615,9 @@ describe Flac2mp3 do
|
|
|
593
615
|
data[:blah].should == 'boo'
|
|
594
616
|
data[:comment].should == 'hey'
|
|
595
617
|
|
|
596
|
-
data.
|
|
597
|
-
data.
|
|
598
|
-
data.
|
|
618
|
+
data.should.not.include('artist')
|
|
619
|
+
data.should.not.include('blah')
|
|
620
|
+
data.should.not.include('comment')
|
|
599
621
|
end
|
|
600
622
|
|
|
601
623
|
it 'should convert tags to lowercase' do
|
|
@@ -608,9 +630,9 @@ describe Flac2mp3 do
|
|
|
608
630
|
data[:blah].should == 'boo'
|
|
609
631
|
data[:comment].should == 'hey'
|
|
610
632
|
|
|
611
|
-
data.
|
|
612
|
-
data.
|
|
613
|
-
data.
|
|
633
|
+
data.should.not.include('Artist')
|
|
634
|
+
data.should.not.include(:BLAH)
|
|
635
|
+
data.should.not.include('cOmMeNt')
|
|
614
636
|
end
|
|
615
637
|
|
|
616
638
|
it 'should convert values consisting only of digits to actual numbers' do
|
|
@@ -654,44 +676,87 @@ describe Flac2mp3 do
|
|
|
654
676
|
data = @flac2mp3.get_flacdata(@filename)
|
|
655
677
|
data[:description].should == '1938'
|
|
656
678
|
end
|
|
679
|
+
|
|
680
|
+
# iTunes wants ISO-8859-1, and I want my MP3s to display well in iTunes
|
|
681
|
+
it 'should convert UTF-8 titles to ISO-8859-1' do
|
|
682
|
+
@tags[:title] = "L\303\251gende"
|
|
683
|
+
|
|
684
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
685
|
+
data[:title].should == "L\351gende"
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
it 'should convert UTF-8 titles to ISO-8859-1 even if the title key is not a simple downcased symbol' do
|
|
689
|
+
@tags['TITLE'] = "L\303\251gende"
|
|
690
|
+
|
|
691
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
692
|
+
data[:title].should == "L\351gende"
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
it 'should convert UTF-8 artist names to ISO-8859-1' do
|
|
696
|
+
@tags[:artist] = "St\303\251phane Grappelli"
|
|
697
|
+
|
|
698
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
699
|
+
data[:artist].should == "St\351phane Grappelli"
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
it 'should convert UTF-8 artist names to ISO-8859-1 even if the artist key is not a simple downcased symbol' do
|
|
703
|
+
@tags['ARTIST'] = "St\303\251phane Grappelli"
|
|
704
|
+
|
|
705
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
706
|
+
data[:artist].should == "St\351phane Grappelli"
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
it 'should convert UTF-8 album titles to ISO-8859-1' do
|
|
710
|
+
@tags[:album] = "Still on Top \342\200\224 The Greatest Hits"
|
|
711
|
+
|
|
712
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
713
|
+
data[:album].should == "Still on Top - The Greatest Hits" # not a strict conversion, but a transliteration
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
it 'should convert UTF-8 album titles to ISO-8859-1 even if the album key is not a simple downcased symbol' do
|
|
717
|
+
@tags['ALBUM'] = "Still on Top \342\200\224 The Greatest Hits"
|
|
718
|
+
|
|
719
|
+
data = @flac2mp3.get_flacdata(@filename)
|
|
720
|
+
data[:album].should == "Still on Top - The Greatest Hits" # not a strict conversion, but a transliteration
|
|
721
|
+
end
|
|
657
722
|
end
|
|
658
723
|
|
|
659
724
|
it 'should set mp3 metadata' do
|
|
660
|
-
@flac2mp3.should
|
|
725
|
+
@flac2mp3.should.respond_to(:set_mp3data)
|
|
661
726
|
end
|
|
662
727
|
|
|
663
728
|
describe 'when setting mp3 metadata' do
|
|
664
|
-
before
|
|
729
|
+
before do
|
|
665
730
|
@filename = 'test.mp3'
|
|
666
731
|
@tags = {}
|
|
667
|
-
@mp3tags =
|
|
668
|
-
@mp3tags2 =
|
|
669
|
-
@mp3info =
|
|
670
|
-
Mp3Info.
|
|
732
|
+
@mp3tags = mock('mp3 tags')
|
|
733
|
+
@mp3tags2 = mock('mp3 tags 2')
|
|
734
|
+
@mp3info = mock('mp3 info', :tag => @mp3tags, :tag2 => @mp3tags2)
|
|
735
|
+
Mp3Info.stub!(:open).and_yield(@mp3info)
|
|
671
736
|
end
|
|
672
737
|
|
|
673
738
|
it 'should accept a filename and tag data' do
|
|
674
|
-
lambda { @flac2mp3.set_mp3data(@filename,
|
|
739
|
+
lambda { @flac2mp3.set_mp3data(@filename, {}) }.should.not.raise(ArgumentError)
|
|
675
740
|
end
|
|
676
741
|
|
|
677
742
|
it 'should require tag data' do
|
|
678
|
-
lambda { @flac2mp3.set_mp3data(@filename) }.should
|
|
743
|
+
lambda { @flac2mp3.set_mp3data(@filename) }.should.raise(ArgumentError)
|
|
679
744
|
end
|
|
680
745
|
|
|
681
746
|
it 'should require a filename' do
|
|
682
|
-
lambda { @flac2mp3.set_mp3data }.should
|
|
747
|
+
lambda { @flac2mp3.set_mp3data }.should.raise(ArgumentError)
|
|
683
748
|
end
|
|
684
749
|
|
|
685
750
|
it 'should accept a hash of tag data' do
|
|
686
|
-
lambda { @flac2mp3.set_mp3data(@filename, 'tag data') }.should
|
|
751
|
+
lambda { @flac2mp3.set_mp3data(@filename, 'tag data') }.should.raise(TypeError)
|
|
687
752
|
end
|
|
688
753
|
|
|
689
754
|
it 'should require a hash of tag data' do
|
|
690
|
-
lambda { @flac2mp3.set_mp3data(@filename, {}) }.
|
|
755
|
+
lambda { @flac2mp3.set_mp3data(@filename, {}) }.should.not.raise(TypeError)
|
|
691
756
|
end
|
|
692
757
|
|
|
693
758
|
it 'should use an Mp3Info object' do
|
|
694
|
-
Mp3Info.
|
|
759
|
+
Mp3Info.should.receive(:open).with(@filename)
|
|
695
760
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
696
761
|
end
|
|
697
762
|
|
|
@@ -700,9 +765,9 @@ describe Flac2mp3 do
|
|
|
700
765
|
@tags[:artist] = 'boo'
|
|
701
766
|
@tags[:genre] = 'bang'
|
|
702
767
|
|
|
703
|
-
@mp3tags.
|
|
704
|
-
@mp3tags.
|
|
705
|
-
@mp3tags.
|
|
768
|
+
@mp3tags.should.receive(:album=).with(@tags[:album])
|
|
769
|
+
@mp3tags.should.receive(:artist=).with(@tags[:artist])
|
|
770
|
+
@mp3tags.should.receive(:genre_s=).with(@tags[:genre])
|
|
706
771
|
|
|
707
772
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
708
773
|
end
|
|
@@ -712,12 +777,12 @@ describe Flac2mp3 do
|
|
|
712
777
|
@tags[:artist] = 'boo'
|
|
713
778
|
@tags[:genre] = 'bang'
|
|
714
779
|
|
|
715
|
-
@mp3tags.
|
|
716
|
-
@mp3tags.
|
|
717
|
-
@mp3tags.
|
|
780
|
+
@mp3tags.stub!(:album=)
|
|
781
|
+
@mp3tags.stub!(:artist=)
|
|
782
|
+
@mp3tags.stub!(:genre_s=)
|
|
718
783
|
|
|
719
|
-
@mp3tags.
|
|
720
|
-
@mp3tags.
|
|
784
|
+
@mp3tags.should.receive(:comments=).never
|
|
785
|
+
@mp3tags.should.receive(:year=).never
|
|
721
786
|
|
|
722
787
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
723
788
|
end
|
|
@@ -726,8 +791,8 @@ describe Flac2mp3 do
|
|
|
726
791
|
@tags[:blah] = 'blah'
|
|
727
792
|
@tags[:bang] = 'bang'
|
|
728
793
|
|
|
729
|
-
@mp3tags.
|
|
730
|
-
@mp3tags.
|
|
794
|
+
@mp3tags.should.receive(:blah=).never
|
|
795
|
+
@mp3tags.should.receive(:bang=).never
|
|
731
796
|
|
|
732
797
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
733
798
|
end
|
|
@@ -735,7 +800,7 @@ describe Flac2mp3 do
|
|
|
735
800
|
it 'should use tag2 for bpm' do
|
|
736
801
|
@tags[:bpm] = '5'
|
|
737
802
|
|
|
738
|
-
@mp3tags2.
|
|
803
|
+
@mp3tags2.should.receive(:TBPM=).with(@tags[:bpm])
|
|
739
804
|
|
|
740
805
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
741
806
|
end
|
|
@@ -743,7 +808,7 @@ describe Flac2mp3 do
|
|
|
743
808
|
it 'should use tag2 for composer' do
|
|
744
809
|
@tags[:composer] = 'Il Maestro'
|
|
745
810
|
|
|
746
|
-
@mp3tags2.
|
|
811
|
+
@mp3tags2.should.receive(:TCOM=).with(@tags[:composer])
|
|
747
812
|
|
|
748
813
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
749
814
|
end
|
|
@@ -751,7 +816,7 @@ describe Flac2mp3 do
|
|
|
751
816
|
it 'should use tag2 for compilation' do
|
|
752
817
|
@tags[:compilation] = '1'
|
|
753
818
|
|
|
754
|
-
@mp3tags2.
|
|
819
|
+
@mp3tags2.should.receive(:TCMP=).with(@tags[:compilation])
|
|
755
820
|
|
|
756
821
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
757
822
|
end
|
|
@@ -759,7 +824,7 @@ describe Flac2mp3 do
|
|
|
759
824
|
it "should use tag2 for 'tag' ('grouping')" do
|
|
760
825
|
@tags[:tag] = 'one, two, three, oclock'
|
|
761
826
|
|
|
762
|
-
@mp3tags2.
|
|
827
|
+
@mp3tags2.should.receive(:TIT1=).with(@tags[:tag])
|
|
763
828
|
|
|
764
829
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
765
830
|
end
|
|
@@ -768,7 +833,7 @@ describe Flac2mp3 do
|
|
|
768
833
|
@tags[:tracknumber] = 4
|
|
769
834
|
@tags[:tracktotal] = 15
|
|
770
835
|
|
|
771
|
-
@mp3tags2.
|
|
836
|
+
@mp3tags2.should.receive(:TRCK=).with('4/15')
|
|
772
837
|
|
|
773
838
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
774
839
|
end
|
|
@@ -777,7 +842,7 @@ describe Flac2mp3 do
|
|
|
777
842
|
@tags[:discnumber] = 1
|
|
778
843
|
@tags[:disctotal] = 2
|
|
779
844
|
|
|
780
|
-
@mp3tags2.
|
|
845
|
+
@mp3tags2.should.receive(:TPOS=).with('1/2')
|
|
781
846
|
|
|
782
847
|
@flac2mp3.set_mp3data(@filename, @tags)
|
|
783
848
|
end
|
|
@@ -785,83 +850,83 @@ describe Flac2mp3 do
|
|
|
785
850
|
|
|
786
851
|
describe 'as a class' do
|
|
787
852
|
it 'should convert' do
|
|
788
|
-
Flac2mp3.should
|
|
853
|
+
Flac2mp3.should.respond_to(:convert)
|
|
789
854
|
end
|
|
790
855
|
|
|
791
856
|
describe 'when converting' do
|
|
792
|
-
before
|
|
857
|
+
before do
|
|
793
858
|
@filename = 'test.flac'
|
|
794
859
|
@options = { :silent => true, :delete => false, :fish => :flat }
|
|
795
|
-
@flac2mp3 =
|
|
796
|
-
Flac2mp3.
|
|
860
|
+
@flac2mp3 = mock('flac2mp3', :convert => nil)
|
|
861
|
+
Flac2mp3.stub!(:new).and_return(@flac2mp3)
|
|
797
862
|
end
|
|
798
863
|
|
|
799
864
|
it 'should accept a filename and a hash of options' do
|
|
800
|
-
lambda { Flac2mp3.convert(@filename, @options) }.
|
|
865
|
+
lambda { Flac2mp3.convert(@filename, @options) }.should.not.raise(ArgumentError)
|
|
801
866
|
end
|
|
802
867
|
|
|
803
868
|
it 'should not require options' do
|
|
804
|
-
lambda { Flac2mp3.convert(@filename) }.
|
|
869
|
+
lambda { Flac2mp3.convert(@filename) }.should.not.raise(ArgumentError)
|
|
805
870
|
end
|
|
806
871
|
|
|
807
872
|
it 'should require a filename' do
|
|
808
|
-
lambda { Flac2mp3.convert }.should
|
|
873
|
+
lambda { Flac2mp3.convert }.should.raise(ArgumentError)
|
|
809
874
|
end
|
|
810
875
|
|
|
811
876
|
it 'should instantiate a new Flac2mp3 object' do
|
|
812
|
-
Flac2mp3.
|
|
877
|
+
Flac2mp3.should.receive(:new).and_return(@flac2mp3)
|
|
813
878
|
Flac2mp3.convert(@filename)
|
|
814
879
|
end
|
|
815
880
|
|
|
816
881
|
it 'should pass the options when instantiating the Flac2mp3 object' do
|
|
817
|
-
Flac2mp3.
|
|
882
|
+
Flac2mp3.should.receive(:new).with(@options).and_return(@flac2mp3)
|
|
818
883
|
Flac2mp3.convert(@filename, @options)
|
|
819
884
|
end
|
|
820
885
|
|
|
821
886
|
it 'should use the Flac2mp3 object to convert the given file' do
|
|
822
|
-
@flac2mp3.
|
|
887
|
+
@flac2mp3.should.receive(:convert).with(@filename)
|
|
823
888
|
Flac2mp3.convert(@filename)
|
|
824
889
|
end
|
|
825
890
|
end
|
|
826
891
|
|
|
827
892
|
it 'should convert metadata' do
|
|
828
|
-
Flac2mp3.should
|
|
893
|
+
Flac2mp3.should.respond_to(:convert_metadata)
|
|
829
894
|
end
|
|
830
895
|
|
|
831
896
|
describe 'when converting metadata' do
|
|
832
|
-
before
|
|
897
|
+
before do
|
|
833
898
|
@infile = 'test.flac'
|
|
834
899
|
@outfile = 'some.mp3'
|
|
835
|
-
@flac2mp3 =
|
|
836
|
-
Flac2mp3.
|
|
900
|
+
@flac2mp3 = mock('flac2mp3', :convert_metadata => nil)
|
|
901
|
+
Flac2mp3.stub!(:new).and_return(@flac2mp3)
|
|
837
902
|
end
|
|
838
903
|
|
|
839
904
|
it 'should accept two filenames' do
|
|
840
|
-
lambda { Flac2mp3.convert_metadata(@infile, @outfile) }.
|
|
905
|
+
lambda { Flac2mp3.convert_metadata(@infile, @outfile) }.should.not.raise(ArgumentError)
|
|
841
906
|
end
|
|
842
907
|
|
|
843
908
|
it 'should require two filenames' do
|
|
844
|
-
lambda { Flac2mp3.convert_metadata(@infile) }.should
|
|
909
|
+
lambda { Flac2mp3.convert_metadata(@infile) }.should.raise(ArgumentError)
|
|
845
910
|
end
|
|
846
911
|
|
|
847
912
|
it 'should instantiate a new Flac2mp3 object' do
|
|
848
|
-
Flac2mp3.
|
|
913
|
+
Flac2mp3.should.receive(:new).and_return(@flac2mp3)
|
|
849
914
|
Flac2mp3.convert_metadata(@infile, @outfile)
|
|
850
915
|
end
|
|
851
916
|
|
|
852
917
|
it 'should use the Flac2mp3 object to convert the metadata between the given files' do
|
|
853
|
-
@flac2mp3.
|
|
918
|
+
@flac2mp3.should.receive(:convert_metadata).with(@infile, @outfile)
|
|
854
919
|
Flac2mp3.convert_metadata(@infile, @outfile)
|
|
855
920
|
end
|
|
856
921
|
end
|
|
857
922
|
|
|
858
923
|
it 'should provide a tag mapping' do
|
|
859
|
-
Flac2mp3.should
|
|
924
|
+
Flac2mp3.should.respond_to(:tag_mapping)
|
|
860
925
|
end
|
|
861
926
|
|
|
862
927
|
describe 'providing a tag mapping' do
|
|
863
928
|
it 'should return a hash' do
|
|
864
|
-
Flac2mp3.tag_mapping.should
|
|
929
|
+
Flac2mp3.tag_mapping.should.be.kind_of(Hash)
|
|
865
930
|
end
|
|
866
931
|
|
|
867
932
|
it "should map 'album' to 'album'" do
|