-
Notifications
You must be signed in to change notification settings - Fork 9
/
test_pipeline.rb
192 lines (163 loc) · 7.63 KB
/
test_pipeline.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
require File.expand_path(File.dirname(__FILE__)) + '/helper'
class TestPipeline < Test::Unit::TestCase
def create_stabilizer_file
@stabilizer = "input.stabilizer"
trackers = %w( Foo Bar Baz).map do | name |
t = Tracksperanto::Tracker.new(:name => name)
t.keyframe!(:frame => 3, :abs_x => 100, :abs_y => 200)
t.keyframe!(:frame => 4, :abs_x => 200, :abs_y => 120)
t.keyframe!(:frame => 5, :abs_x => 210, :abs_y => 145)
t
end
File.open(@stabilizer, "wb") do | f |
exporter = Tracksperanto::Export::FlameStabilizer.new(f)
exporter.just_export(trackers, 720, 576)
end
end
def test_supports_block_init
pipeline = Tracksperanto::Pipeline::Base.new(:tool_tuples => [:a, :b])
assert_equal [:a, :b], pipeline.tool_tuples
end
def test_run_with_autodetected_importer_and_size_without_progress_block
in_temp_dir do
create_stabilizer_file
pipeline = Tracksperanto::Pipeline::Base.new
assert_nothing_raised { pipeline.run(@stabilizer) }
assert_equal 3, pipeline.converted_points
assert_equal 9, pipeline.converted_keyframes, "Should report conversion of 9 keyframes"
end
end
def test_run_with_error_picks_up_known_snags_from_importer
in_temp_dir do
create_stabilizer_file
pipeline = Tracksperanto::Pipeline::Base.new
flexmock(Tracksperanto::Import::ShakeScript).should_receive(:known_snags).times(1)
assert_raise(Tracksperanto::Pipeline::NoTrackersRecoveredError) do
pipeline.run(@stabilizer, :importer => "ShakeScript", :width => 2910, :height => 1080)
end
end
end
def test_run_for_unsupported_format_raises_exception
pipeline = Tracksperanto::Pipeline::Base.new
%w( file.MOV file.mb vfx/shots/file.SNI ).each do | path |
assert_raise(Tracksperanto::UnsupportedFormatError) do
pipeline.run(path)
end
end
end
def test_run_with_autodetected_importer_and_size_with_progress_block
in_temp_dir do
create_stabilizer_file
processing_log = ""
accum = lambda do | percent, message |
processing_log << ("%d -> %s\n" % [percent, message])
end
pipeline = Tracksperanto::Pipeline::Base.new(:progress_block => accum)
assert_nothing_raised { pipeline.run(@stabilizer) }
assert processing_log.include?("Parsing the file")
assert processing_log.include?("Parsing channel \"tracker1/ref/y\"")
end
end
def test_run_returns_the_number_of_trackers_and_keyframes_processed
in_temp_dir do
create_stabilizer_file
pipeline = Tracksperanto::Pipeline::Base.new
result = pipeline.run(@stabilizer)
assert_equal [3, 9], result
end
end
def test_run_crashes_with_empty_file
in_temp_dir do
empty_file_path = "input_empty.stabilizer"
f = File.open(empty_file_path, "w"){|f| f.write('') }
pipeline = Tracksperanto::Pipeline::Base.new
assert_raise(Tracksperanto::Pipeline::EmptySourceFileError) { pipeline.run(empty_file_path) }
end
end
def test_run_crashes_with_no_trackers
in_temp_dir do
empty_file_path = "input_empty.stabilizer"
f = File.open(empty_file_path, "w"){|f| f.write('xx') }
pipeline = Tracksperanto::Pipeline::Base.new
assert_raise(Tracksperanto::Pipeline::NoTrackersRecoveredError) { pipeline.run(empty_file_path) }
end
end
def test_tool_initialization_from_tuples
in_temp_dir do
create_stabilizer_file
pipeline = Tracksperanto::Pipeline::Base.new
pipeline.tool_tuples = [
["Bla", {:foo=> 234}]
]
mock_mux = flexmock("MUX")
mock_lint = flexmock("LINT")
flexmock(Tracksperanto::Export::Mux).should_receive(:new).and_return(mock_mux)
flexmock(Tracksperanto::Tool::Lint).should_receive(:new).with(mock_mux).and_return(mock_lint)
m = flexmock("tool object")
mock_tool_class = flexmock("tool class")
flexmock(Tracksperanto).should_receive(:get_tool).with("Bla").once.and_return(mock_tool_class)
mock_tool_class.should_receive(:new).with(mock_lint, {:foo => 234}).once
assert_raise(NoMethodError) { pipeline.run(@stabilizer) }
end
end
def test_run_with_autodetected_importer_that_requires_size
in_temp_dir do
FileUtils.cp( File.dirname(__FILE__) + "/import/samples/shake_script/four_tracks_in_one_stabilizer.shk", "input.shk")
pipeline = Tracksperanto::Pipeline::Base.new
assert_raise(Tracksperanto::Pipeline::DimensionsRequiredError) { pipeline.run("input.shk") }
end
end
def test_run_with_autodetected_importer_that_requires_size_when_size_supplied
in_temp_dir do
FileUtils.cp( File.dirname(__FILE__) + "/import/samples/shake_script/four_tracks_in_one_stabilizer.shk", "input.shk")
pipeline = Tracksperanto::Pipeline::Base.new
assert_nothing_raised { pipeline.run("input.shk", :width => 720, :height => 576) }
end
end
def test_run_with_overridden_importer_and_no_size
in_temp_dir do
FileUtils.cp( File.dirname(__FILE__) + "/import/samples/shake_script/four_tracks_in_one_stabilizer.shk", "input.shk")
pipeline = Tracksperanto::Pipeline::Base.new
num_exporters = Tracksperanto.exporters.length
assert_nothing_raised { pipeline.run("input.shk", :importer => "ShakeScript", :width => 720, :height => 576) }
assert_equal num_exporters, Dir.glob("input_*").length, "#{num_exporters} files should be present for the input and outputs"
end
end
def test_run_with_overridden_importer_and_size_for_file_that_would_be_recognized_differently
in_temp_dir do
FileUtils.cp( File.dirname(__FILE__) + "/import/samples/shake_script/four_tracks_in_one_stabilizer.shk", "input.stabilizer")
pipeline = Tracksperanto::Pipeline::Base.new
assert_nothing_raised { pipeline.run("input.stabilizer", :importer => "ShakeScript", :width => 720, :height => 576) }
end
end
def test_run_with_unknown_format_raises
in_temp_dir do
File.open("input.txt", "w"){|f| f.write("foo") }
pipeline = Tracksperanto::Pipeline::Base.new
assert_raise(Tracksperanto::Pipeline::UnknownFormatError) { pipeline.run("input.txt") }
assert_raise(Tracksperanto::Pipeline::UnknownFormatError) { pipeline.run("input.txt", :width => 100, :height => 100) }
assert_raise(Tracksperanto::Pipeline::DimensionsRequiredError) { pipeline.run("input.txt", :importer => "Syntheyes") }
end
end
def test_importing_file_with_trackers_of_zero_length_does_not_accumulate_any_trackers
in_temp_dir do
pft_with_empty_trackers = File.dirname(__FILE__) + "/import/samples/pftrack5/empty_trackers.2dt"
i = Tracksperanto::Import::PFTrack.new(:io => File.open(pft_with_empty_trackers), :width => 1920, :height => 1080)
tks = i.to_a
assert_equal 3, tks.length
assert_equal 0, tks[0].length, "The tracker should have 0 keyframes for this test to make sense"
FileUtils.cp(pft_with_empty_trackers, "input_empty.2dt")
pipeline = Tracksperanto::Pipeline::Base.new
num_t, num_k = pipeline.run("input_empty.2dt", :width => 1920, :height => 1080)
assert_equal 1, num_t, "Only one tracker should have been sent through the export"
end
end
def test_run_with_overridden_importer_and_size
in_temp_dir do
FileUtils.cp( File.dirname(__FILE__) + "/import/samples/3de_v4/3de_export_cube.txt", "input.txt")
pipeline = Tracksperanto::Pipeline::Base.new
assert_raise(Tracksperanto::Pipeline::DimensionsRequiredError) { pipeline.run("input.txt", :importer => "Equalizer4") }
assert_nothing_raised { pipeline.run("input.txt", :importer => "Equalizer4", :width => 720, :height => 576) }
end
end
end