revolt 0.5.1

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.
Files changed (74) hide show
  1. data/README +150 -0
  2. data/Rakefile +197 -0
  3. data/bin/rv_find_levels.rb +186 -0
  4. data/bin/rv_install_level_urls.rb +191 -0
  5. data/bin/rv_install_levels.rb +76 -0
  6. data/examples/find_rv_track.rb +17 -0
  7. data/examples/install_rv_track.rb +28 -0
  8. data/lib/revolt/args.rb +46 -0
  9. data/lib/revolt/config.rb +5 -0
  10. data/lib/revolt/exceptions.rb +34 -0
  11. data/lib/revolt/fetcher/file_system.rb +31 -0
  12. data/lib/revolt/fetcher/www.rb +117 -0
  13. data/lib/revolt/fetcher.rb +30 -0
  14. data/lib/revolt/info.rb +40 -0
  15. data/lib/revolt/level.rb +298 -0
  16. data/lib/revolt/levels.rb +362 -0
  17. data/lib/revolt/logger.rb +24 -0
  18. data/lib/revolt/package/archive/analyzer/normalized.rb +50 -0
  19. data/lib/revolt/package/archive/analyzer/troubled.rb +97 -0
  20. data/lib/revolt/package/archive/analyzer.rb +34 -0
  21. data/lib/revolt/package/archive/zip/browser.rb +44 -0
  22. data/lib/revolt/package/archive.rb +35 -0
  23. data/lib/revolt/package/exe.rb +10 -0
  24. data/lib/revolt/package/installer/archive.rb +105 -0
  25. data/lib/revolt/package/installer/exe.rb +10 -0
  26. data/lib/revolt/package.rb +64 -0
  27. data/lib/revolt/util/fs_browser.rb +30 -0
  28. data/lib/revolt/util.rb +20 -0
  29. data/lib/revolt.rb +12 -0
  30. data/test/common.rb +78 -0
  31. data/test/fixtures/files/nodirs_track.zip +0 -0
  32. data/test/fixtures/files/readme.txt +1 -0
  33. data/test/fixtures/files/rickyd_track.zip +0 -0
  34. data/test/fixtures/files/standard_multi.zip +0 -0
  35. data/test/fixtures/files/standard_rev_track.zip +0 -0
  36. data/test/fixtures/files/standard_track.zip +0 -0
  37. data/test/fixtures/files/zips_inside.zip +0 -0
  38. data/test/fixtures/rv/gfx/levid.bmp +1 -0
  39. data/test/fixtures/rv/gfx/levid.bmq +1 -0
  40. data/test/fixtures/rv/gfx/levidrev.bmp +1 -0
  41. data/test/fixtures/rv/gfx/levidrev.bmq +1 -0
  42. data/test/fixtures/rv/gfx/tEsT Level.bmp +1 -0
  43. data/test/fixtures/rv/levels/levid/levid.inf +1 -0
  44. data/test/fixtures/rv/levels/levid/levid.w +1 -0
  45. data/test/fixtures/rv/levels/levid/levida.bmp +1 -0
  46. data/test/fixtures/rv/levels/levid/readme.txt +1 -0
  47. data/test/fixtures/rv/levels/levidrev/levidrev.inf +1 -0
  48. data/test/fixtures/rv/levels/levidrev/levidrev.w +1 -0
  49. data/test/fixtures/rv/levels/levidrev/levidreva.bmp +1 -0
  50. data/test/fixtures/rv/levels/levidrev/readme.txt +1 -0
  51. data/test/fixtures/rv/levels/levidrev/reversed/levidrev.cam +1 -0
  52. data/test/fixtures/rv/levels/levidrev/reversed/levidrev.fan +1 -0
  53. data/test/fixtures/rv/levels/levidrev/reversed/levidrev.fin +1 -0
  54. data/test/fixtures/rv/levels/test lEveL/TEst level.inf +4 -0
  55. data/test/fixtures/rv/levels/test lEveL/TeST level.w +1 -0
  56. data/test/fixtures/rv/levels/test lEveL/readme.txt +1 -0
  57. data/test/fixtures/rv/levels/test lEveL/reversed/TEst level.inf +1 -0
  58. data/test/fixtures/rv/levels/test lEveL/reversed/TeST level.w +1 -0
  59. data/test/fixtures/rv/levels/test lEveL/reversed/readme.txt +1 -0
  60. data/test/fixtures/rv/levels/test lEveL/reversed/test LEVELa.bmp +1 -0
  61. data/test/fixtures/rv/levels/test lEveL/test LEVELa.bmp +1 -0
  62. data/test/tc_archive_analyzer.rb +185 -0
  63. data/test/tc_args.rb +55 -0
  64. data/test/tc_args_external.rb +55 -0
  65. data/test/tc_file_system_fetcher.rb +26 -0
  66. data/test/tc_info.rb +23 -0
  67. data/test/tc_level.rb +182 -0
  68. data/test/tc_level_installer.rb +88 -0
  69. data/test/tc_level_installer_external.rb +124 -0
  70. data/test/tc_levels.rb +68 -0
  71. data/test/tc_package_track_installer.rb +174 -0
  72. data/test/ts_base.rb +14 -0
  73. data/test/ts_external.rb +7 -0
  74. metadata +133 -0
@@ -0,0 +1,185 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class ArchiveAnalyzer < Test::Unit::TestCase
8
+ include ReVolt::Test
9
+
10
+ def open_browser(file, &block)
11
+ ReVolt::Package::Archive::open(file, &block)
12
+ end
13
+
14
+ def track_analysis_of(browser)
15
+ analyzer = ReVolt::Package::Archive::Analyzer::for_track(browser)
16
+ analyzer.track_files(browser)
17
+ end
18
+
19
+ def test_standard_zip
20
+ open_browser(get_test_file(ZIPS[:standard])) do |browser|
21
+ result = track_analysis_of(browser)
22
+ expect = {
23
+ :level => {
24
+ 'levid' => [
25
+ 'levels/levid/levid.inf',
26
+ 'levels/levid/levida.bmp',
27
+ 'levels/levid/levid.w',
28
+ 'levels/levid/readme.txt'
29
+ ],
30
+ },
31
+ :inf => {
32
+ 'levid' => 'levels/levid/levid.inf'
33
+ },
34
+ :gfx => {
35
+ 'levid' => ['gfx/levid.bmp', 'gfx/levid.bmq']
36
+ }
37
+ }
38
+
39
+ assert_equal(stringify_and_order_structure(expect),
40
+ stringify_and_order_structure(result))
41
+ end
42
+ end
43
+
44
+ def test_standard_rev_zip
45
+ open_browser(get_test_file(ZIPS[:standard_rev])) do |browser|
46
+ result = track_analysis_of(browser)
47
+ expect = {
48
+ :level => {
49
+ 'levidrev' => [
50
+ 'levels/levidrev/levidrev.inf',
51
+ 'levels/levidrev/levidreva.bmp',
52
+ 'levels/levidrev/levidrev.w',
53
+ 'levels/levidrev/readme.txt',
54
+ ],
55
+ },
56
+ :reversed => {
57
+ 'levidrev' => [
58
+ 'levels/levidrev/reversed/levidrev.cam',
59
+ 'levels/levidrev/reversed/levidrev.fan',
60
+ 'levels/levidrev/reversed/levidrev.fin'
61
+ ],
62
+ },
63
+ :inf => {
64
+ 'levidrev' => 'levels/levidrev/levidrev.inf'
65
+ },
66
+ :gfx => {
67
+ 'levidrev' => ['gfx/levidrev.bmp', 'gfx/levidrev.bmq']
68
+ }
69
+ }
70
+
71
+ assert_equal(stringify_and_order_structure(expect),
72
+ stringify_and_order_structure(result))
73
+ end
74
+ end
75
+
76
+ def test_standard_multi_zip
77
+ open_browser(get_test_file(ZIPS[:standard_multi])) do |browser|
78
+ result = track_analysis_of(browser)
79
+ expect = {
80
+ :level => {
81
+ 'levidrev' => [
82
+ 'levels/levidrev/levidrev.inf',
83
+ 'levels/levidrev/levidreva.bmp',
84
+ 'levels/levidrev/levidrev.w',
85
+ 'levels/levidrev/readme.txt',
86
+ ],
87
+ 'levid' => [
88
+ 'levels/levid/levid.inf',
89
+ 'levels/levid/levida.bmp',
90
+ 'levels/levid/levid.w',
91
+ 'levels/levid/readme.txt'
92
+ ],
93
+ },
94
+ :reversed => {
95
+ 'levidrev' => [
96
+ 'levels/levidrev/reversed/levidrev.cam',
97
+ 'levels/levidrev/reversed/levidrev.fan',
98
+ 'levels/levidrev/reversed/levidrev.fin'
99
+ ],
100
+ },
101
+ :inf => {
102
+ 'levidrev' => 'levels/levidrev/levidrev.inf',
103
+ 'levid' => 'levels/levid/levid.inf'
104
+ },
105
+ :gfx => {
106
+ 'levidrev' => ['gfx/levidrev.bmp', 'gfx/levidrev.bmq'],
107
+ 'levid' => ['gfx/levid.bmp', 'gfx/levid.bmq']
108
+ }
109
+ }
110
+
111
+ assert_equal(stringify_and_order_structure(expect),
112
+ stringify_and_order_structure(result))
113
+ end
114
+ end
115
+
116
+ def test_rickyd_zip
117
+ open_browser(get_test_file(ZIPS[:rickyd_style])) do |browser|
118
+ result = track_analysis_of(browser)
119
+ expect = {
120
+ :level => {
121
+ 'levidrev' => [
122
+ 'levidrev/levidreva.bmp',
123
+ 'levidrev/levidrev.inf',
124
+ 'levidrev/levidrev.w',
125
+ 'levidrev/readme.txt'
126
+ ],
127
+ },
128
+ :reversed => {
129
+ 'levidrev' => [
130
+ 'levidrev/reversed/levidrev.cam',
131
+ 'levidrev/reversed/levidrev.fan',
132
+ 'levidrev/reversed/levidrev.fin'
133
+ ],
134
+ },
135
+ :inf => {
136
+ 'levidrev' => 'levidrev/levidrev.inf'
137
+ },
138
+ :gfx => {
139
+ 'levidrev' => ['levidrev/gfx/levidrev.bmp', 'levidrev/gfx/levidrev.bmq']
140
+ }
141
+ }
142
+
143
+ assert_equal(stringify_and_order_structure(expect),
144
+ stringify_and_order_structure(result))
145
+ end
146
+ end
147
+
148
+ def test_nodirs_zip
149
+ open_browser(get_test_file(ZIPS[:nodirs_style])) do |browser|
150
+ result = track_analysis_of(browser)
151
+ expect = {
152
+ :level => {
153
+ 'levid' => [
154
+ 'levid.inf',
155
+ 'levida.bmp',
156
+ 'levid.w',
157
+ 'readme.txt'
158
+ ],
159
+ },
160
+ :inf => {
161
+ 'levid' => 'levid.inf'
162
+ },
163
+ :gfx => {
164
+ 'levid' => ['levid.bmp', 'levid.bmq']
165
+ }
166
+ }
167
+
168
+ assert_equal(stringify_and_order_structure(expect),
169
+ stringify_and_order_structure(result))
170
+ end
171
+ end
172
+
173
+ def test_zips_inside_package
174
+ open_browser(get_test_file(ZIPS[:zips_inside])) do |browser|
175
+ result = track_analysis_of(browser)
176
+ expect = {
177
+ :possible => ['standard_track.zip', 'standard_rev_track.zip']
178
+ }
179
+
180
+ assert_equal(stringify_and_order_structure(expect),
181
+ stringify_and_order_structure(result))
182
+ end
183
+ end
184
+
185
+ end
data/test/tc_args.rb ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class ArgsTest < Test::Unit::TestCase
8
+ include ReVolt::Test
9
+
10
+ def setup
11
+ super
12
+ ReVolt::global_args = nil
13
+ end
14
+
15
+ def test_global_args
16
+ ReVolt::global_args = { :test1 => 'test1', :test2 => 'test2' }
17
+ assert_equal(ReVolt::global_args[:test1], 'test1')
18
+ assert_equal(ReVolt::global_args[:test2], 'test2')
19
+ assert_equal(ReVolt::global_args[:test3], nil)
20
+ assert_equal(ReVolt::arg(:test1), 'test1')
21
+ assert_equal(ReVolt::arg(:test2), 'test2')
22
+ assert_equal(ReVolt::arg(:test3), nil)
23
+ end
24
+
25
+ def test_local_args
26
+ a = { :test1 => 'test1', :test2 => 'test2' }
27
+ assert_equal(ReVolt::arg(:test1, a), 'test1')
28
+ assert_equal(ReVolt::arg(:test2, a), 'test2')
29
+ assert_equal(ReVolt::arg(:test3, a), nil)
30
+ end
31
+
32
+ def test_local_global_args
33
+ ReVolt::global_args = { :test1 => 'test1', :test2 => 'test2' }
34
+ a = { :test1 => 'ltest1' }
35
+ assert_equal(ReVolt::arg(:test1, a), 'ltest1')
36
+ assert_equal(ReVolt::arg(:test2, a), 'test2')
37
+ assert_equal(ReVolt::arg(:test3, a), nil)
38
+ end
39
+
40
+ def test_arg_install_url
41
+ testurl = 'http://www.test.com/dohdah.zip'
42
+ levels = ReVolt::Levels.at(get_test_output_dir('rvtmp'))
43
+ called = false
44
+ a = {
45
+ ReVolt::ARG_INSTALL_URL => lambda {|url|
46
+ called = true
47
+ assert_equal(testurl, url)
48
+ nil
49
+ }
50
+ }
51
+ ReVolt::global_args = a
52
+ levels.install_urls(testurl, a)
53
+ assert(called)
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class ArgsTest < Test::Unit::TestCase
8
+ include ReVolt::Test
9
+
10
+ def setup
11
+ super
12
+ ReVolt::global_args = nil
13
+ end
14
+
15
+ def test_global_args
16
+ ReVolt::global_args = { :test1 => 'test1', :test2 => 'test2' }
17
+ assert_equal(ReVolt::global_args[:test1], 'test1')
18
+ assert_equal(ReVolt::global_args[:test2], 'test2')
19
+ assert_equal(ReVolt::global_args[:test3], nil)
20
+ assert_equal(ReVolt::arg(:test1), 'test1')
21
+ assert_equal(ReVolt::arg(:test2), 'test2')
22
+ assert_equal(ReVolt::arg(:test3), nil)
23
+ end
24
+
25
+ def test_local_args
26
+ a = { :test1 => 'test1', :test2 => 'test2' }
27
+ assert_equal(ReVolt::arg(:test1, a), 'test1')
28
+ assert_equal(ReVolt::arg(:test2, a), 'test2')
29
+ assert_equal(ReVolt::arg(:test3, a), nil)
30
+ end
31
+
32
+ def test_local_global_args
33
+ ReVolt::global_args = { :test1 => 'test1', :test2 => 'test2' }
34
+ a = { :test1 => 'ltest1' }
35
+ assert_equal(ReVolt::arg(:test1, a), 'ltest1')
36
+ assert_equal(ReVolt::arg(:test2, a), 'test2')
37
+ assert_equal(ReVolt::arg(:test3, a), nil)
38
+ end
39
+
40
+ def test_arg_install_url
41
+ testurl = 'http://www.test.com/dohdah.zip'
42
+ levels = ReVolt::Levels.at(get_test_output_dir('rvtmp'))
43
+ called = false
44
+ a = {
45
+ ReVolt::ARG_INSTALL_URL => lambda {|url|
46
+ called = true
47
+ assert_equal(testurl, url)
48
+ nil
49
+ }
50
+ }
51
+ ReVolt::global_args = a
52
+ levels.install_urls(testurl, a)
53
+ assert(called)
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class FileSystemFetcher < Test::Unit::TestCase
8
+ include ReVolt::Package
9
+ include ReVolt::Test
10
+
11
+ def test_fetcher_success
12
+ source = get_test_file(ZIPS[:standard])
13
+ STDERR.puts("Source: #{source}")
14
+ f = ReVolt::Fetcher.for(source)
15
+ f.run
16
+ assert_equal(source, f.target.to_s)
17
+ end
18
+
19
+ def test_fetcher_non_exists
20
+ source = get_test_file('this_one_doesnt_exist.zip')
21
+ f = ReVolt::Fetcher.for(source)
22
+ assert_raise(ReVolt::FileNotFoundError) do
23
+ f.run
24
+ end
25
+ end
26
+ end
data/test/tc_info.rb ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class InfoTest < Test::Unit::TestCase
8
+ include ReVolt::Test
9
+
10
+ def test_exe_path
11
+ path = ReVolt::Info::exe_path
12
+
13
+ assert_not_nil(path, 'Could not get Re-Volt exe path!')
14
+ assert(path.file?, "Re-Volt not found from returned path #{path}")
15
+ end
16
+
17
+ def test_path
18
+ path = ReVolt::Info::path
19
+
20
+ assert_not_nil(path, 'Could not get Re-Volt exe path!')
21
+ assert(path.directory?, "Re-Volt directory from returned path #{path}")
22
+ end
23
+ end
data/test/tc_level.rb ADDED
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+ require 'test/unit'
6
+
7
+ class LevelTest < Test::Unit::TestCase
8
+ include ReVolt::Test
9
+
10
+ ID, NAME = 'test level'.to_sym, 'Test Level'
11
+ RVPATH = File.join(File.dirname(__FILE__), 'fixtures/rv')
12
+
13
+ STOCK_TRACKS = [
14
+ :nhood1,
15
+ :market2,
16
+ :muse2,
17
+ :garden1,
18
+ :toylite,
19
+ :wild_west1,
20
+ :toy2,
21
+ :ship1,
22
+ :nhood2,
23
+ :muse1,
24
+ :market1,
25
+ :wild_west2,
26
+ :ship2,
27
+ ]
28
+
29
+ def setup
30
+ super
31
+
32
+ @levels = ReVolt::Levels.new RVPATH
33
+ @level = ReVolt::Level.new ID, { :name => NAME }
34
+ @level.parent = @levels
35
+ end
36
+
37
+ def test_name
38
+ @level.parent = nil # name should work even without parent levels
39
+ assert_equal NAME, @level.name
40
+ end
41
+
42
+ def test_id
43
+ @level.parent = nil # id should work even without parent levels
44
+ assert_equal ID, @level.id
45
+ assert_equal ID.to_s, @level.id.to_s
46
+ assert_equal ReVolt::Level.new(ID.to_s).id, @level.id
47
+ end
48
+
49
+ def test_load_level
50
+ @level = ReVolt::Level.new('test level', :parent => @levels)
51
+ assert_equal false, @level.loaded?
52
+ assert_not_nil @level.inf
53
+ pp @level.inf
54
+ assert_equal 'Test Level', @level.inf[:name]
55
+ assert_equal 'Test Level', @level.name
56
+ assert_equal '3', @level.inf[:startgrid]
57
+ assert_equal true, @level.loaded?
58
+ end
59
+
60
+ def test_reversed
61
+ target = ReVolt::Levels.new(get_test_output_dir('revolt'))
62
+ target.create_dir_structure
63
+ @level.copy_to(target)
64
+ level = target[ID]
65
+ assert_not_nil(level)
66
+ assert(level.reverse?)
67
+
68
+ rpath = level.path + 'reversed'
69
+ assert(rpath.exist?)
70
+ assert(Dir[rpath + '*'].size > 0)
71
+
72
+ # Delete the reversed directory
73
+ rpath.rmtree
74
+ assert(level.reverse? == false)
75
+ end
76
+
77
+ def test_dirs_and_files
78
+ (dirs, files) = @level.dirs_and_files
79
+ dirs_expect = ['levels/test level/emptydir',
80
+ 'levels/test level/reversed']
81
+ fils_expect = ['levels/test level/test level.inf',
82
+ 'levels/test level/test level.w',
83
+ 'levels/test level/test levela.bmp',
84
+ 'levels/test level/readme.txt',
85
+ 'levels/test level/reversed/test level.inf',
86
+ 'levels/test level/reversed/test level.w',
87
+ 'levels/test level/reversed/test levela.bmp',
88
+ 'levels/test level/reversed/readme.txt',
89
+ 'gfx/test level.bmp'
90
+ ]
91
+ assert_equal(strdowncase_and_order_structure(fils_expect),
92
+ strdowncase_and_order_structure(files))
93
+ assert_equal(strdowncase_and_order_structure(dirs_expect),
94
+ strdowncase_and_order_structure(dirs))
95
+ end
96
+
97
+ def test_copy_level
98
+ target = ReVolt::Levels.new(get_test_output_dir('revolt'))
99
+ target.create_dir_structure
100
+ STDERR.puts("Target dir: #{target.path}")
101
+ expect = @levels[@level].files
102
+ @level.copy_to(target)
103
+ result = target[@level.id].files
104
+ assert_not_nil(target[ID])
105
+ assert_not_nil(@levels[ID])
106
+ assert_equal(stringify_and_order_structure(expect),
107
+ stringify_and_order_structure(result))
108
+ assert_equal(stringify_and_order_structure(expect),
109
+ stringify_and_order_structure(@levels[@level].files))
110
+ end
111
+
112
+ def test_move_level
113
+ source = ReVolt::Levels.new(get_test_output_dir('revolt_from'))
114
+ target = ReVolt::Levels.new(get_test_output_dir('revolt_to'))
115
+ source.create_dir_structure
116
+ target.create_dir_structure
117
+ STDERR.puts("Target dir: #{target.path}")
118
+ expect = @levels[@level].files
119
+ @level.copy_to(source)
120
+
121
+ assert(source.member?(@level) == true)
122
+ source.move_level_to(source[@level], target)
123
+
124
+ assert(target.member?(@level) == true)
125
+ assert(source.include?(@level) == false)
126
+ assert((target.path + @level.id.to_s).exist? == true)
127
+ assert((source.path + @level.id.to_s).exist? == false)
128
+ result = target[@level.id].files
129
+ assert_equal(stringify_and_order_structure(expect),
130
+ stringify_and_order_structure(result))
131
+ assert_nil(source[@level])
132
+ assert_equal(stringify_and_order_structure(expect),
133
+ stringify_and_order_structure(@levels[@level].files))
134
+ end
135
+
136
+ def test_delete_level
137
+ source = ReVolt::Levels.new(get_test_output_dir('revolt_delete'))
138
+ source.create_dir_structure
139
+
140
+ assert_nil(source[@level.id])
141
+ @level.copy_to(source)
142
+ tlevel = source[@level.id]
143
+ tlevel_dir = source.path + @level.id.to_s
144
+ tlevel_files = tlevel.files
145
+ assert(tlevel_dir.exist? == true)
146
+
147
+ assert(tlevel.files != 0)
148
+ tlevel_files.each do |f|
149
+ fullpath = source.base_path + f
150
+ assert(fullpath.exist? == true, "Path don't exist: #{fullpath}")
151
+ end
152
+ tlevel.delete
153
+ assert(tlevel_dir.exist? == false)
154
+ assert_nil(tlevel.parent)
155
+ tlevel_files.each do |f|
156
+ fullpath = source.base_path + f
157
+ assert(fullpath.exist? == false, "Path exists: #{fullpath}")
158
+ end
159
+ end
160
+
161
+ def test_inf_file_missing
162
+ @level = ReVolt::Level.new 'inf_missing_level', :parent => @levels
163
+ assert_raise(ReVolt::InfFileNotFoundError) { @level.reload }
164
+ end
165
+
166
+ def test_load_level_no_parent
167
+ @level.parent = nil
168
+ assert_raise(RuntimeError) { @level.reload }
169
+ end
170
+
171
+ def test_stock
172
+ STOCK_TRACKS.each do |stock_id|
173
+ level = ReVolt::Level.new stock_id
174
+ assert(level.stock?, 'level id #{stock_id} not stock')
175
+ end
176
+ end
177
+
178
+ def test_custom
179
+ assert(@level.custom?, 'level id #{@level.id} not custom')
180
+ end
181
+
182
+ end
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/revolt')
4
+ require File.join(File.dirname(__FILE__), 'common')
5
+
6
+ require 'test/unit'
7
+ require 'fileutils'
8
+
9
+ class LevelInstaller < Test::Unit::TestCase
10
+ include ReVolt::Test
11
+ include ReVolt::Package
12
+
13
+ RVZT_URL = 'http://revolt.speedweek.net/main/dload.php?trackname=Rickyd%27s+Garden'
14
+
15
+ def setup
16
+ super
17
+
18
+ @rv_base_dir = Pathname.new(get_test_output_dir('rv'))# @output_dir + 'rv';
19
+
20
+ # Create the levels structure so that levels can
21
+ # be installed
22
+ @levels = ReVolt::Levels.new(@rv_base_dir)
23
+ @levels.create_dir_structure
24
+ end
25
+
26
+ def teardown
27
+ # clean_working_dir
28
+ end
29
+
30
+ def installed_tracks
31
+ dir = ReVolt::Util::FsBrowser.new(@rv_base_dir)
32
+ dir.map {|f| Pathname.new(f).relative_path_from(@rv_base_dir).to_s}
33
+ end
34
+
35
+ def test_install_local_zip
36
+ zip_id = :standard
37
+ ids = @levels.install(get_test_file(ZIPS[zip_id]), @output_dir)
38
+ result = installed_tracks
39
+ expect = %w(
40
+ gfx
41
+ gfx/levid.bmp
42
+ gfx/levid.bmq
43
+ levels
44
+ levels/levid
45
+ levels/levid/levid.inf
46
+ levels/levid/levid.w
47
+ levels/levid/levida.bmp
48
+ levels/levid/readme.txt
49
+ )
50
+
51
+ assert_equal(stringify_and_order_structure(expect),
52
+ stringify_and_order_structure(result))
53
+ assert_equal(stringify_and_order_structure(ids),
54
+ stringify_and_order_structure(ZIPS_IDS[zip_id]))
55
+ end
56
+
57
+ def test_install_local_zip_overwrite
58
+ test_install_local_zip
59
+ test_install_local_zip
60
+ end
61
+
62
+ def test_install_local_zip_nl
63
+ zip_id = :standard
64
+ f = get_test_file(ZIPS[zip_id])
65
+ # This tests that installing works easily even
66
+ # when the file name is read from for example STDIN.each
67
+ f = f.to_s + "\n"
68
+ ids = @levels.install(f, @output_dir)
69
+ result = installed_tracks
70
+ expect = %w(
71
+ gfx
72
+ gfx/levid.bmp
73
+ gfx/levid.bmq
74
+ levels
75
+ levels/levid
76
+ levels/levid/levid.inf
77
+ levels/levid/levid.w
78
+ levels/levid/levida.bmp
79
+ levels/levid/readme.txt
80
+ )
81
+
82
+ assert_equal(stringify_and_order_structure(expect),
83
+ stringify_and_order_structure(result))
84
+ assert_equal(stringify_and_order_structure(ids),
85
+ stringify_and_order_structure(ZIPS_IDS[zip_id]))
86
+ end
87
+
88
+ end