ehbrs-tools 0.23.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/.avm.yml +4 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +39 -0
  5. data/Gemfile.lock +285 -0
  6. data/lib/ehbrs/{core_ext.rb → tools/core_ext.rb} +0 -0
  7. data/lib/ehbrs/tools/runner/finances/bb_browser.rb +38 -9
  8. data/lib/ehbrs/tools/runner/fs/selected.rb +1 -1
  9. data/lib/ehbrs/tools/runner/music/lyrics.rb +69 -0
  10. data/lib/ehbrs/tools/runner/web_utils/videos/download.rb +20 -10
  11. data/lib/ehbrs/tools/runner/web_utils/videos/upload.rb +1 -1
  12. data/lib/ehbrs/tools/version.rb +1 -1
  13. data/spec/code/rubocop_spec.rb +3 -0
  14. data/spec/lib/ehbrs/cooking_book/recipe/measure_spec.rb +21 -0
  15. data/spec/lib/ehbrs/observers/base_spec.rb +93 -0
  16. data/spec/lib/ehbrs/tools/runner/fs/used_space_spec.rb +61 -0
  17. data/spec/lib/ehbrs/tools/runner/vg/ips_spec.rb +31 -0
  18. data/spec/lib/ehbrs/tools/runner/vg/ips_spec_files/expected.rom +0 -0
  19. data/spec/lib/ehbrs/tools/runner/vg/ips_spec_files/patch_0.ips +0 -0
  20. data/spec/lib/ehbrs/tools/runner/vg/ips_spec_files/patch_1.ips +0 -0
  21. data/spec/lib/ehbrs/tools/runner/vg/ips_spec_files/source.rom +0 -0
  22. data/spec/lib/ehbrs/tools/runner/videos/probe_spec.rb +19 -0
  23. data/spec/lib/ehbrs/tools/runner/videos/probe_spec_files/fixed.target.yaml +105 -0
  24. data/spec/lib/ehbrs/tools/runner/videos/unsupported_spec.rb +75 -0
  25. data/spec/lib/ehbrs/tools/runner/videos/unsupported_spec_files/dts_audio.probe.yaml +90 -0
  26. data/spec/lib/ehbrs/tools/runner_spec.rb +16 -0
  27. data/spec/lib/ehbrs/vg/wii/game_file_spec.rb +21 -0
  28. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec.rb +11 -0
  29. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/pikmin2_R92P01_wia.source.witdump +27 -0
  30. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/pikmin2_R92P01_wia.target.yaml +22 -0
  31. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/pikmin2_pal_iso.source.witdump +28 -0
  32. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/pikmin2_pal_iso.target.yaml +21 -0
  33. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/resident_evil_code_veronica_disc2_iso.source.witdump +16 -0
  34. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/resident_evil_code_veronica_disc2_iso.target.yaml +19 -0
  35. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/super_mario_galaxy_wbfs.source.witdump +28 -0
  36. data/spec/lib/ehbrs/vg/wii/wit/parsers/dump_spec_files/super_mario_galaxy_wbfs.target.yaml +23 -0
  37. data/spec/lib/ehbrs/vg/wii/wit/path_spec.rb +33 -0
  38. data/spec/spec_helper/videos.rb +30 -0
  39. data/spec/spec_helper/videos_files/stub_source.mp4 +0 -0
  40. data/spec/spec_helper.rb +7 -0
  41. data/vendor/aranha-parsers/aranha-parsers.gemspec +3 -2
  42. data/vendor/aranha-parsers/lib/aranha/parsers/rspec/setup.rb +15 -0
  43. data/vendor/aranha-parsers/lib/aranha/parsers/{spec/source_target_fixtures_example.rb → rspec/shared_examples/source_target_fixtures.rb} +0 -0
  44. data/vendor/aranha-parsers/lib/aranha/parsers/rspec.rb +11 -0
  45. data/vendor/aranha-parsers/lib/aranha/parsers/source_address/fetch_content_error.rb +10 -0
  46. data/vendor/aranha-parsers/lib/aranha/parsers/source_address/http_get.rb +15 -2
  47. data/vendor/aranha-parsers/lib/aranha/parsers/version.rb +1 -1
  48. data/vendor/aranha-parsers/spec/lib/rubocop_check_spec.rb +1 -1
  49. data/vendor/aranha-parsers/spec/spec_helper.rb +2 -9
  50. data/vendor/aranha-selenium/aranha-selenium.gemspec +2 -2
  51. data/vendor/aranha-selenium/lib/aranha/selenium/version.rb +1 -1
  52. data/vendor/aranha-selenium/spec/rubocop_check_spec.rb +1 -5
  53. data/vendor/aranha-selenium/spec/spec_helper.rb +2 -98
  54. data/vendor/eac_cli/eac_cli.gemspec +3 -3
  55. data/vendor/eac_cli/lib/eac_cli/config/entry.rb +0 -2
  56. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  57. data/vendor/eac_cli/spec/rubocop_spec.rb +1 -1
  58. data/vendor/eac_cli/spec/spec_helper.rb +2 -101
  59. data/vendor/eac_config/eac_config.gemspec +2 -2
  60. data/vendor/eac_config/lib/eac_config/version.rb +1 -1
  61. data/vendor/eac_config/spec/rubocop_spec.rb +1 -1
  62. data/vendor/eac_config/spec/spec_helper.rb +2 -15
  63. data/vendor/eac_docker/eac_docker.gemspec +2 -2
  64. data/vendor/eac_docker/lib/eac_docker/container.rb +7 -3
  65. data/vendor/eac_docker/lib/eac_docker/images/templatized.rb +4 -0
  66. data/vendor/eac_docker/lib/eac_docker/rspec/setup.rb +17 -0
  67. data/vendor/eac_docker/lib/eac_docker/rspec.rb +2 -10
  68. data/vendor/eac_docker/lib/eac_docker/version.rb +1 -1
  69. data/vendor/eac_docker/spec/rubocop_spec.rb +1 -1
  70. data/vendor/eac_docker/spec/spec_helper.rb +2 -104
  71. data/vendor/eac_ruby_base0/eac_ruby_base0.gemspec +4 -4
  72. data/vendor/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
  73. data/vendor/eac_ruby_base0/spec/rubocop_spec.rb +1 -1
  74. data/vendor/eac_ruby_base0/spec/spec_helper.rb +2 -101
  75. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +1 -1
  76. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/compact.rb +22 -0
  77. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +15 -3
  78. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs_cache.rb +1 -1
  79. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/gems_registry/gem.rb +75 -0
  80. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/gems_registry.rb +35 -0
  81. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/compact.rb +20 -0
  82. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/string/delimited.rb +16 -0
  83. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb +51 -0
  84. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/default_setup.rb +20 -0
  85. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup/conditionals.rb +17 -0
  86. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup.rb +12 -0
  87. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/setup_manager.rb +49 -0
  88. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb +70 -0
  89. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  90. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/compact_spec.rb +20 -0
  91. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/compact_spec.rb +20 -0
  92. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/string/delimited_spec.rb +34 -0
  93. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/recursive_builder_spec.rb +65 -0
  94. data/vendor/eac_ruby_utils/spec/rubocop_check_spec.rb +1 -1
  95. data/vendor/eac_ruby_utils/spec/spec_helper.rb +6 -6
  96. data/vendor/ehbrs_ruby_utils/ehbrs_ruby_utils.gemspec +9 -4
  97. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/finances/bb_browser/docker_image.rb +18 -0
  98. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/music.rb +9 -0
  99. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/patches/object/template.rb +6 -0
  100. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/version.rb +1 -1
  101. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/videos/container.rb +31 -0
  102. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/videos/stream.rb +1 -1
  103. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/web_utils/videos/file/rename.rb +28 -0
  104. data/vendor/ehbrs_ruby_utils/lib/ehbrs_ruby_utils/web_utils/videos/file.rb +11 -8
  105. data/vendor/ehbrs_ruby_utils/spec/lib/ehbrs_ruby_utils/videos/stream_spec.rb +0 -1
  106. data/vendor/ehbrs_ruby_utils/spec/rubocop_check_spec.rb +1 -1
  107. data/vendor/ehbrs_ruby_utils/spec/spec_helper.rb +2 -101
  108. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Dockerfile +44 -0
  109. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/Makefile +35 -0
  110. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/README.md +16 -0
  111. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/context/firefox.service +8 -0
  112. data/vendor/ehbrs_ruby_utils/template/ehbrs_ruby_utils/finances/bb_browser/docker_image/context/startbrowser.sh +9 -0
  113. data/vendor/ultimate_lyrics/Gemfile +5 -0
  114. data/vendor/ultimate_lyrics/bin/download_parser_spec_files.rb +94 -0
  115. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/field.rb +83 -0
  116. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/lyrics.rb +13 -0
  117. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/parser.rb +28 -0
  118. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/exclude_item.rb +17 -0
  119. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/extract_item.rb +21 -0
  120. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/item.rb +48 -0
  121. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/replace_fields.rb +13 -0
  122. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/rule.rb +52 -0
  123. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider/url_format.rb +21 -0
  124. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider.rb +92 -0
  125. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/provider_search.rb +43 -0
  126. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/providers_data.xml +355 -0
  127. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/song_metadata/field.rb +24 -0
  128. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/song_metadata.rb +28 -0
  129. data/vendor/ultimate_lyrics/lib/ultimate_lyrics/version.rb +5 -0
  130. data/vendor/ultimate_lyrics/lib/ultimate_lyrics.rb +7 -0
  131. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec.rb +20 -0
  132. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__michael_jackson_thriller.source.html +8 -0
  133. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__michael_jackson_thriller.target.yaml +3 -0
  134. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__michael_jackson_thriller.url +1 -0
  135. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__milton_nascimento_rouxinol.source.html +8 -0
  136. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__milton_nascimento_rouxinol.target.yaml +3 -0
  137. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/encyclopaedia_metallum__milton_nascimento_rouxinol.url +1 -0
  138. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__michael_jackson_thriller.source.html +193 -0
  139. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__michael_jackson_thriller.target.yaml +3 -0
  140. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__michael_jackson_thriller.url +1 -0
  141. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__milton_nascimento_rouxinol.source.html +193 -0
  142. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__milton_nascimento_rouxinol.target.yaml +3 -0
  143. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/hindilyrics_net_bollywood_songs__milton_nascimento_rouxinol.url +1 -0
  144. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__michael_jackson_thriller.source.html +87 -0
  145. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__michael_jackson_thriller.target.yaml +36 -0
  146. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__michael_jackson_thriller.url +1 -0
  147. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__milton_nascimento_rouxinol.source.html +4 -0
  148. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__milton_nascimento_rouxinol.target.yaml +5 -0
  149. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyrics_com__milton_nascimento_rouxinol.url +1 -0
  150. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__michael_jackson_thriller.source.html +2 -0
  151. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__michael_jackson_thriller.target.yaml +3 -0
  152. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__michael_jackson_thriller.url +1 -0
  153. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__milton_nascimento_rouxinol.source.html +2 -0
  154. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__milton_nascimento_rouxinol.target.yaml +3 -0
  155. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsplugin_com__milton_nascimento_rouxinol.url +1 -0
  156. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsreg_com__milton_nascimento_rouxinol.source.html +101 -0
  157. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsreg_com__milton_nascimento_rouxinol.target.yaml +3 -0
  158. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/lyricsreg_com__milton_nascimento_rouxinol.url +1 -0
  159. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__michael_jackson_thriller.source.html +29 -0
  160. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__michael_jackson_thriller.target.yaml +3 -0
  161. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__michael_jackson_thriller.url +1 -0
  162. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__milton_nascimento_rouxinol.source.html +29 -0
  163. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__milton_nascimento_rouxinol.target.yaml +3 -0
  164. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/mp3lyrics_org__milton_nascimento_rouxinol.url +1 -0
  165. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/songlyrics_com__michael_jackson_thriller.source.html +1298 -0
  166. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/songlyrics_com__michael_jackson_thriller.target.yaml +3 -0
  167. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/parser_spec_files/songlyrics_com__michael_jackson_thriller.url +1 -0
  168. data/vendor/ultimate_lyrics/spec/lib/ultimate_lyrics/provider_search_spec.rb +72 -0
  169. data/vendor/ultimate_lyrics/spec/rubocop_spec.rb +3 -0
  170. data/vendor/ultimate_lyrics/spec/spec_helper.rb +4 -0
  171. data/vendor/ultimate_lyrics/ultimate_lyrics.gemspec +19 -0
  172. metadata +179 -11
  173. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +0 -35
  174. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/stubbed_ssh.rb +0 -44
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/observers/base'
4
+
5
+ RSpec.describe ::Ehbrs::Observers::Base do
6
+ let(:instance) { described_class.new }
7
+ let(:first_value) { 'a value' }
8
+ let(:same_value) { first_value.dup }
9
+ let(:different_value) { 'another value' }
10
+ let(:first_time) { ::Time.required_zone.local(2020, 5, 1, 12, 45, 0) }
11
+ let(:second_time) { ::Time.required_zone.local(2020, 5, 1, 12, 45, 0) }
12
+
13
+ it { expect(instance.records.count).to be_zero }
14
+ it { expect(instance.last_change_time).to be_blank }
15
+ it { expect(instance.last_check_time).to be_blank }
16
+
17
+ it { expect(instance).to be_changing_value(nil) }
18
+ it { expect(instance).to be_changing_value(first_value) }
19
+ it { expect(instance).to be_changing_value(same_value) }
20
+ it { expect(instance).to be_changing_value(different_value) }
21
+
22
+ context 'when firstly checked' do
23
+ before { instance.check(first_value, first_time) }
24
+
25
+ it { expect(instance.records.count).to eq(1) }
26
+ it { expect(instance.last_value).to eq(first_value) }
27
+ it { expect(instance).not_to be_changing_value(same_value) }
28
+ it { expect(instance).to be_changing_value(different_value) }
29
+ it { expect(instance.last_change_time).to eq(first_time) }
30
+ it { expect(instance.last_check_time).to eq(first_time) }
31
+
32
+ context 'when same first_value is checked' do
33
+ before { instance.check(same_value, second_time) }
34
+
35
+ it { expect(instance.records.count).to eq(1) }
36
+ it { expect(instance.last_value).to eq(same_value) }
37
+ it { expect(instance.last_change_time).to eq(first_time) }
38
+ it { expect(instance.last_check_time).to eq(second_time) }
39
+ end
40
+
41
+ context 'when different first_value is checked' do
42
+ before { instance.check(different_value, second_time) }
43
+
44
+ it { expect(instance.records.count).to eq(2) }
45
+ it { expect(instance.last_value).to eq(different_value) }
46
+ it { expect(instance.last_change_time).to eq(second_time) }
47
+ it { expect(instance.last_check_time).to eq(second_time) }
48
+ end
49
+
50
+ context 'when checked first_value is blank' do
51
+ context 'when blank_value == :add' do
52
+ let(:instance) { described_class.new(blank_value: :add) }
53
+
54
+ before { instance.check(nil, second_time) }
55
+
56
+ it { expect(instance.records.count).to eq(2) }
57
+ it { expect(instance.last_value).to eq(nil) }
58
+ it { expect(instance.last_change_time).to eq(second_time) }
59
+ it { expect(instance.last_check_time).to eq(second_time) }
60
+ end
61
+
62
+ context 'when blank_value == :ignore' do
63
+ let(:instance) { described_class.new(blank_value: :ignore) }
64
+
65
+ before { instance.check(nil, second_time) }
66
+
67
+ it { expect(instance.records.count).to eq(1) }
68
+ it { expect(instance.last_value).to eq(first_value) }
69
+ it { expect(instance.last_change_time).to eq(first_time) }
70
+ it { expect(instance.last_check_time).to eq(second_time) }
71
+ end
72
+
73
+ context 'when blank_value == :raise' do
74
+ let(:instance) { described_class.new(blank_value: :raise) }
75
+
76
+ before do
77
+ @exception = nil
78
+ begin
79
+ instance.check(nil, second_time)
80
+ rescue StandardError => e
81
+ @exception = e
82
+ end
83
+ end
84
+
85
+ it { expect(@exception).to be_a(::ArgumentError) } # rubocop:disable RSpec/InstanceVariable
86
+ it { expect(instance.records.count).to eq(1) }
87
+ it { expect(instance.last_value).to eq(first_value) }
88
+ it { expect(instance.last_change_time).to eq(first_time) }
89
+ it { expect(instance.last_check_time).to eq(second_time) }
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/fs/temp'
4
+ require 'ehbrs/tools/runner'
5
+ require 'ehbrs/tools/runner/fs/used_space'
6
+ require 'ehbrs/observers/with_persistence'
7
+
8
+ RSpec.describe ::Ehbrs::Tools::Runner::Fs::UsedSpace do
9
+ let(:target) { ::EacRubyUtils::Fs::Temp.directory }
10
+ let(:user_dir) { ::EacRubyUtils::Fs::Temp.directory }
11
+ let(:cached_user_dir) { ::EacRubyUtils::FilesystemCache.new(user_dir) }
12
+ let(:observers_user_dir) { cached_user_dir.child('observers') }
13
+ let(:observer_path) do
14
+ observers_user_dir.child(target.to_s.parameterize).content_path.to_pathname
15
+ end
16
+
17
+ before do
18
+ allow(::Ehbrs::UserDirs).to receive(:data).and_return(cached_user_dir)
19
+ end
20
+
21
+ after { [target, user_dir].each(&:remove!) }
22
+
23
+ it { expect(observer_path).not_to exist }
24
+ it { expect(cached_user_dir.path.to_pathname).to exist }
25
+
26
+ %w[--check --verbose].bool_array_combs.each do |comb|
27
+ it "run with options #{comb}" do
28
+ expect { runner_run(*comb, target.to_path) }.not_to raise_error
29
+ end
30
+ end
31
+
32
+ context 'when is firstly checked' do
33
+ before { runner_run('--check', target.to_path) }
34
+
35
+ it { expect(observer_path).to exist }
36
+ it { expect(observer.records.count).to eq(1) }
37
+
38
+ context 'when target does not change' do
39
+ before { runner_run('--check', target.to_path) }
40
+
41
+ it { expect(observer.records.count).to eq(1) }
42
+ end
43
+
44
+ context 'when target changes' do
45
+ before do
46
+ target.join('a_file').write('A' * 1024)
47
+ runner_run('--check', target.to_path)
48
+ end
49
+
50
+ it { expect(observer.records.count).to eq(2) }
51
+ end
52
+ end
53
+
54
+ def observer
55
+ ::Ehbrs::Observers::WithPersistence.new(observer_path)
56
+ end
57
+
58
+ def runner_run(*args)
59
+ ::Ehbrs::Tools::Runner.run(argv: %w[fs used-space] + args)
60
+ end
61
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/fs/temp'
4
+ require 'ehbrs/tools/runner'
5
+ require 'ehbrs/tools/runner/vg/ips'
6
+
7
+ RSpec.describe ::Ehbrs::Tools::Runner::Vg::Ips do
8
+ let(:source_dir) { ::Pathname.new('ips_spec_files').expand_path __dir__ }
9
+ let(:source_file) { source_dir / 'source.rom' }
10
+ let(:patches) { 2.times.map { |i| source_dir / "patch_#{i}.ips" } }
11
+
12
+ describe '#run' do
13
+ let(:output_file) { ::EacRubyUtils::Fs::Temp.file }
14
+ let(:expected_file) { source_dir / 'expected.rom' }
15
+ let(:run_argv) do
16
+ ['vg', 'ips', '--output-file', output_file.to_path, source_file.to_path] +
17
+ patches.map(&:to_path)
18
+ end
19
+
20
+ before do
21
+ ::Ehbrs::Tools::Runner.run(argv: run_argv)
22
+ end
23
+
24
+ after do
25
+ output_file.unlink if output_file.exist?
26
+ end
27
+
28
+ it { expect(output_file).to exist }
29
+ it { expect(::FileUtils.compare_file(output_file.to_path, expected_file.to_path)).to be_truthy }
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/tools/runner'
4
+
5
+ RSpec.describe ::Ehbrs::Tools::Runner::Videos::Probe do
6
+ let(:source_file) { stub_video_source_file }
7
+ let(:target_dir) { ::Pathname.new(__dir__).expand_path / 'probe_spec_files' }
8
+ let(:target_file) { target_dir / 'fixed.target.yaml' }
9
+ let(:target_content) { target_file.read.gsub('%%PATH%%', source_file.to_path) }
10
+
11
+ let(:argv) { %w[videos probe] + [source_file.to_path] }
12
+ let(:runner) { ::Ehbrs::Tools::Runner.create(argv: argv) }
13
+
14
+ describe '#run' do
15
+ it do
16
+ expect { runner.run }.to(output(target_content).to_stdout_from_any_process)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,105 @@
1
+ ---
2
+ :streams:
3
+ - :index: 0
4
+ :codec_name: h264
5
+ :codec_long_name: H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
6
+ :profile: Constrained Baseline
7
+ :codec_type: video
8
+ :codec_time_base: 1/50
9
+ :codec_tag_string: avc1
10
+ :codec_tag: '0x31637661'
11
+ :width: 352
12
+ :height: 288
13
+ :coded_width: 352
14
+ :coded_height: 288
15
+ :has_b_frames: 0
16
+ :sample_aspect_ratio: '1:1'
17
+ :display_aspect_ratio: '11:9'
18
+ :pix_fmt: yuv420p
19
+ :level: 13
20
+ :chroma_location: left
21
+ :refs: 1
22
+ :is_avc: 'true'
23
+ :nal_length_size: '4'
24
+ :r_frame_rate: 25/1
25
+ :avg_frame_rate: 25/1
26
+ :time_base: 1/25
27
+ :start_pts: 0
28
+ :start_time: '0.000000'
29
+ :duration_ts: 168
30
+ :duration: '6.720000'
31
+ :bit_rate: '112583'
32
+ :bits_per_raw_sample: '8'
33
+ :nb_frames: '168'
34
+ :disposition:
35
+ :default: 1
36
+ :dub: 0
37
+ :original: 0
38
+ :comment: 0
39
+ :lyrics: 0
40
+ :karaoke: 0
41
+ :forced: 0
42
+ :hearing_impaired: 0
43
+ :visual_impaired: 0
44
+ :clean_effects: 0
45
+ :attached_pic: 0
46
+ :timed_thumbnails: 0
47
+ :tags:
48
+ :language: und
49
+ :handler_name: VideoHandler
50
+ - :index: 1
51
+ :codec_name: aac
52
+ :codec_long_name: AAC (Advanced Audio Coding)
53
+ :profile: LC
54
+ :codec_type: audio
55
+ :codec_time_base: 1/44100
56
+ :codec_tag_string: mp4a
57
+ :codec_tag: '0x6134706d'
58
+ :sample_fmt: fltp
59
+ :sample_rate: '44100'
60
+ :channels: 2
61
+ :channel_layout: stereo
62
+ :bits_per_sample: 0
63
+ :r_frame_rate: 0/0
64
+ :avg_frame_rate: 0/0
65
+ :time_base: 1/44100
66
+ :start_pts: 0
67
+ :start_time: '0.000000'
68
+ :duration_ts: 299008
69
+ :duration: '6.780227'
70
+ :bit_rate: '95999'
71
+ :max_bit_rate: '100304'
72
+ :nb_frames: '292'
73
+ :disposition:
74
+ :default: 1
75
+ :dub: 0
76
+ :original: 0
77
+ :comment: 0
78
+ :lyrics: 0
79
+ :karaoke: 0
80
+ :forced: 0
81
+ :hearing_impaired: 0
82
+ :visual_impaired: 0
83
+ :clean_effects: 0
84
+ :attached_pic: 0
85
+ :timed_thumbnails: 0
86
+ :tags:
87
+ :creation_time: '2015-05-17T06:08:17.000000Z'
88
+ :language: und
89
+ :handler_name: IsoMedia File Produced by Google, 5-11-2011
90
+ :format:
91
+ :filename: "%%PATH%%"
92
+ :nb_streams: 2
93
+ :nb_programs: 0
94
+ :format_name: mov,mp4,m4a,3gp,3g2,mj2
95
+ :format_long_name: QuickTime / MOV
96
+ :start_time: '0.000000'
97
+ :duration: '6.780000'
98
+ :size: '179200'
99
+ :bit_rate: '211445'
100
+ :probe_score: 100
101
+ :tags:
102
+ :major_brand: mp42
103
+ :minor_version: '0'
104
+ :compatible_brands: isommp42
105
+ :creation_time: '2015-05-17T06:08:17.000000Z'
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/tools/runner'
4
+ require 'eac_ruby_utils/fs/temp'
5
+ require 'ehbrs/tools/runner/videos/unsupported'
6
+ require 'ehbrs_ruby_utils/videos/container'
7
+
8
+ RSpec.describe ::Ehbrs::Tools::Runner::Videos::Unsupported do
9
+ let(:source_dir) { ::Pathname.new(__dir__).expand_path / 'unsupported_spec_files' }
10
+ let(:temp_dir) { ::EacRubyUtils::Fs::Temp.directory }
11
+ let(:dts_audio) do
12
+ stub_video(['-c:v', 'copy', '-c:a', 'dts', '-strict', '-2'], temp_dir / 'to_fix_file.mp4')
13
+ end
14
+
15
+ ['dts_audio'].each do |video_var|
16
+ context "when source file is #{video_var}" do
17
+ let(:to_fix_file) { send(video_var) }
18
+
19
+ before do
20
+ to_fix_file
21
+ end
22
+
23
+ after do
24
+ temp_dir.remove
25
+ end
26
+
27
+ it { expect(to_fix_file.file?).to eq(true) }
28
+ it { expect(to_fix_file.dirname).to eq(temp_dir) }
29
+
30
+ describe '#run' do
31
+ let(:run_argv) { ['videos', 'unsupported', '-f', temp_dir.to_s] }
32
+ let(:converted_file) { to_fix_file.basename_sub { |b| "#{b}.converted" } }
33
+ let(:fixed_file) { to_fix_file.basename_sub { |b| "#{b.basename('.*')}.mkv" } }
34
+ let(:fixed_file_actual_probe_data) do
35
+ sanitize_probe_data(::EhbrsRubyUtils::Videos::Container.new(fixed_file).probe_data)
36
+ end
37
+
38
+ let(:fixed_file_expect_probe_file) { source_dir.join("#{video_var}.probe.yaml") }
39
+ let(:fixed_file_expect_probe_data) do
40
+ ::EacRubyUtils::Yaml.load_file(fixed_file_expect_probe_file)
41
+ end
42
+
43
+ before do
44
+ ::Ehbrs::Tools::Runner.run(argv: run_argv)
45
+ end
46
+
47
+ it { expect(converted_file).to be_a_file }
48
+ it { expect(fixed_file).to be_a_file }
49
+
50
+ it 'has expected probe data' do
51
+ expect(fixed_file_actual_probe_data).to eq(fixed_file_expect_probe_data)
52
+ end
53
+ end
54
+
55
+ def sanitize_probe_data(data)
56
+ sanitize_format_data(data.fetch(:format))
57
+ data.fetch(:streams).each { |stream_data| sanitize_stream_data(stream_data) }
58
+ data
59
+ end
60
+
61
+ def sanitize_stream_data(data)
62
+ data[:tags].if_present do |v|
63
+ %i[HANDLER_NAME ENCODER].each { |field| v.delete(field) }
64
+ end
65
+ end
66
+
67
+ def sanitize_format_data(data)
68
+ data.if_present do |v|
69
+ %i[filename size bit_rate].each { |field| v.delete(field) }
70
+ v[:tags].if_present { |vv| vv.delete(:ENCODER) }
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,90 @@
1
+ ---
2
+ :streams:
3
+ - :index: 0
4
+ :codec_name: h264
5
+ :codec_long_name: H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
6
+ :profile: Constrained Baseline
7
+ :codec_type: video
8
+ :codec_time_base: 1/50
9
+ :codec_tag_string: "[0][0][0][0]"
10
+ :codec_tag: '0x0000'
11
+ :width: 352
12
+ :height: 288
13
+ :coded_width: 352
14
+ :coded_height: 288
15
+ :has_b_frames: 0
16
+ :sample_aspect_ratio: '1:1'
17
+ :display_aspect_ratio: '11:9'
18
+ :pix_fmt: yuv420p
19
+ :level: 13
20
+ :chroma_location: left
21
+ :field_order: progressive
22
+ :refs: 1
23
+ :is_avc: 'true'
24
+ :nal_length_size: '4'
25
+ :r_frame_rate: 25/1
26
+ :avg_frame_rate: 25/1
27
+ :time_base: 1/1000
28
+ :start_pts: 23
29
+ :start_time: '0.023000'
30
+ :bits_per_raw_sample: '8'
31
+ :disposition:
32
+ :default: 1
33
+ :dub: 0
34
+ :original: 0
35
+ :comment: 0
36
+ :lyrics: 0
37
+ :karaoke: 0
38
+ :forced: 0
39
+ :hearing_impaired: 0
40
+ :visual_impaired: 0
41
+ :clean_effects: 0
42
+ :attached_pic: 0
43
+ :timed_thumbnails: 0
44
+ :tags:
45
+ :DURATION: '00:00:06.743000000'
46
+ - :index: 1
47
+ :codec_name: aac
48
+ :codec_long_name: AAC (Advanced Audio Coding)
49
+ :profile: LC
50
+ :codec_type: audio
51
+ :codec_time_base: 1/44100
52
+ :codec_tag_string: "[0][0][0][0]"
53
+ :codec_tag: '0x0000'
54
+ :sample_fmt: fltp
55
+ :sample_rate: '44100'
56
+ :channels: 2
57
+ :channel_layout: stereo
58
+ :bits_per_sample: 0
59
+ :r_frame_rate: 0/0
60
+ :avg_frame_rate: 0/0
61
+ :time_base: 1/1000
62
+ :start_pts: 0
63
+ :start_time: '0.000000'
64
+ :disposition:
65
+ :default: 1
66
+ :dub: 0
67
+ :original: 0
68
+ :comment: 0
69
+ :lyrics: 0
70
+ :karaoke: 0
71
+ :forced: 0
72
+ :hearing_impaired: 0
73
+ :visual_impaired: 0
74
+ :clean_effects: 0
75
+ :attached_pic: 0
76
+ :timed_thumbnails: 0
77
+ :tags:
78
+ :DURATION: '00:00:06.803000000'
79
+ :format:
80
+ :nb_streams: 2
81
+ :nb_programs: 0
82
+ :format_name: matroska,webm
83
+ :format_long_name: Matroska / WebM
84
+ :start_time: '0.000000'
85
+ :duration: '6.803000'
86
+ :probe_score: 100
87
+ :tags:
88
+ :COMPATIBLE_BRANDS: isomiso2avc1mp41
89
+ :MAJOR_BRAND: isom
90
+ :MINOR_VERSION: '512'
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/tools/runner'
4
+ require 'ehbrs/tools/version'
5
+
6
+ RSpec.describe ::Ehbrs::Tools::Runner do
7
+ let(:runner) { described_class.create(argv: argv) }
8
+
9
+ describe '--version option' do
10
+ let(:argv) { %w[--version] }
11
+
12
+ it do
13
+ expect { runner.run }.to(output("#{::Ehbrs::Tools::VERSION}\n").to_stdout_from_any_process)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/vg/wii/game_file'
4
+
5
+ RSpec.describe ::Ehbrs::Vg::Wii::GameFile do
6
+ [['game.iso', 1, 'game'], ['disc1.iso', 1, 'game'], ['disc2.iso', 2, 'disc2'],
7
+ ['Resident Evil - Code - Veronica X (USA) (Disc 1)', 1, 'game'],
8
+ ['Resident Evil - Code - Veronica X (USA) (Disc 2)', 2, 'disc2']].each do |s|
9
+ context "when game file is #{s[0]}" do
10
+ let(:game_file) { described_class.new(s[0]) }
11
+
12
+ it "disc_number should be #{s[1]}" do
13
+ expect(game_file.disc_number).to eq(s[1])
14
+ end
15
+
16
+ it "nintendont_basename should be #{s[2]}" do
17
+ expect(game_file.nintendont_basename).to eq(s[2])
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs/vg/wii/wit/parsers/dump'
4
+
5
+ RSpec.describe ::Ehbrs::Vg::Wii::Wit::Parsers::Dump do
6
+ include_examples 'source_target_fixtures', __FILE__
7
+
8
+ def source_data(source_file)
9
+ described_class.new(::File.read(source_file)).properties
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+
2
+ Dump of file /home/eduardo/storage/roms/wii/games_untested/Pikmin 2 - New Play Control_ [R92P01].wia
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/games_untested/Pikmin 2 - New Play Control_ [R92P01].wia
5
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
6
+ Scrubbed size: 7af30000/hex = 2062745600 = 1967 MiB, 43.9%, 62950*32K
7
+ WIA file size: 63d2da4e/hex = 1674762830 = 1597 MiB, 35.6%, 81.2%
8
+ File & disc type: WIA/WII (v1.00,LZMA2.7@100) & Wii
9
+ Disc & part IDs: disc=R92P01, ticket=R92P, tmd=R92P, boot=R92P01
10
+ Disc name: PIKMIN2 for Wii
11
+ DB title: Pikmin 2
12
+ ID Region: PAL [PAL ]
13
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
14
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
15
+ Partitions: 1 [encrypted, well signed]
16
+ Directories: 593
17
+ Files: 2376
18
+
19
+ 1 partition table with 1 partition:
20
+
21
+ index type offset .. end off size/hex = size/dec = MiB status
22
+ ----------------------------------------------------------------------------------------
23
+ 0 part.tab 40020 .. 40028 8 = 8 1 partition
24
+ ----------------------------------------------------------------------------------------
25
+ 0.0 DATA 0 f800000 .. 1173c0000 107bc0000 = 4424728576 = 4220 enc,signed
26
+ ----------------------------------------------------------------------------------------
27
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/games_untested/Pikmin 2 - New Play Control_
3
+ [R92P01].wia"
4
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
5
+ Scrubbed size: 7af30000/hex = 2062745600 = 1967 MiB, 43.9%, 62950*32K
6
+ WIA file size: 63d2da4e/hex = 1674762830 = 1597 MiB, 35.6%, 81.2%
7
+ File & disc type/type: WIA
8
+ File & disc type/platform_acronym: WII
9
+ File & disc type/type_extra: v1.00,LZMA2.7@100
10
+ File & disc type/platform_name: Wii
11
+ Disc & part IDs/disc: R92P01
12
+ Disc & part IDs/ticket: R92P
13
+ Disc & part IDs/tmd: R92P
14
+ Disc & part IDs/boot: R92P01
15
+ Disc name: PIKMIN2 for Wii
16
+ DB title: Pikmin 2
17
+ ID Region: PAL [PAL ]
18
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
19
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
20
+ Partitions: 1 [encrypted, well signed]
21
+ Directories: '593'
22
+ Files: '2376'
@@ -0,0 +1,28 @@
1
+
2
+ Dump of file pikmin2_pal.iso
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/games_untested/pikmin2_pal.iso
5
+ ISO file size: 118240000/hex = 4699979776 = 4482 MiB
6
+ Scrubbed size: 85790000/hex = 2239299584 = 2136 MiB, 47.6%, 68338*32K
7
+ File & disc type: ISO/WII & Wii
8
+ Disc & part IDs: disc=R92P01, ticket=R92P, tmd=R92P, boot=R92P01
9
+ Disc name: PIKMIN2 for Wii
10
+ DB title: Pikmin 2
11
+ ID Region: PAL [PAL ]
12
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
13
+ System menu: v386 = 3.4E
14
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
15
+ Partitions: 2 [encrypted, well signed]
16
+ Directories: 598
17
+ Files: 2421
18
+
19
+ 1 partition table with 2 partitions:
20
+
21
+ index type offset .. end off size/hex = size/dec = MiB status
22
+ ----------------------------------------------------------------------------------------
23
+ 0 part.tab 40020 .. 40030 10 = 16 2 partitions
24
+ ----------------------------------------------------------------------------------------
25
+ 0.0 UPDATE 1 50000 .. a8b8000 a868000 = 176586752 = 168 enc,signed
26
+ 0.1 DATA 0 f800000 .. 1173c0000 107bc0000 = 4424728576 = 4220 enc,signed
27
+ ----------------------------------------------------------------------------------------
28
+
@@ -0,0 +1,21 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/games_untested/pikmin2_pal.iso"
3
+ ISO file size: 118240000/hex = 4699979776 = 4482 MiB
4
+ Scrubbed size: 85790000/hex = 2239299584 = 2136 MiB, 47.6%, 68338*32K
5
+ File & disc type/type: ISO
6
+ File & disc type/platform_acronym: WII
7
+ File & disc type/type_extra:
8
+ File & disc type/platform_name: Wii
9
+ Disc & part IDs/disc: R92P01
10
+ Disc & part IDs/ticket: R92P
11
+ Disc & part IDs/tmd: R92P
12
+ Disc & part IDs/boot: R92P01
13
+ Disc name: PIKMIN2 for Wii
14
+ DB title: Pikmin 2
15
+ ID Region: PAL [PAL ]
16
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
17
+ System menu: v386 = 3.4E
18
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
19
+ Partitions: 2 [encrypted, well signed]
20
+ Directories: '598'
21
+ Files: '2421'
@@ -0,0 +1,16 @@
1
+
2
+ Dump of file /home/eduardo/storage/roms/gc/RESIDENT EVIL CVX [GCDE08]/disc2.iso
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/disk/games/RESIDENT EVIL CVX [GCDE08]/disc2.iso
5
+ ISO file size: 57058000/hex = 1459978240 = 1392 MiB
6
+ Scrubbed size: 4fcf8000/hex = 1338998784 = 1277 MiB, 91.7%, 40863*32K
7
+ File & disc type: ISO/GC & GameCube
8
+ Disc & part IDs: disc=GCDE08, ticket=...., tmd=-, boot=GCDE08
9
+ Disc name: RESIDENT EVIL CVX
10
+ DB title: Resident Evil Code: Veronica X
11
+ ID Region: NTSC/USA [USA ]
12
+ BI2 Region: 1 [USA]
13
+ Partitions: 1 []
14
+ Directories: 4
15
+ Files: 54
16
+
@@ -0,0 +1,19 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/disk/games/RESIDENT EVIL CVX [GCDE08]/disc2.iso"
3
+ ISO file size: 57058000/hex = 1459978240 = 1392 MiB
4
+ Scrubbed size: 4fcf8000/hex = 1338998784 = 1277 MiB, 91.7%, 40863*32K
5
+ File & disc type/type: ISO
6
+ File & disc type/platform_acronym: GC
7
+ File & disc type/type_extra:
8
+ File & disc type/platform_name: GameCube
9
+ Disc & part IDs/disc: GCDE08
10
+ Disc & part IDs/ticket: "...."
11
+ Disc & part IDs/tmd: "-"
12
+ Disc & part IDs/boot: GCDE08
13
+ Disc name: RESIDENT EVIL CVX
14
+ DB title: 'Resident Evil Code: Veronica X'
15
+ ID Region: NTSC/USA [USA ]
16
+ BI2 Region: 1 [USA]
17
+ Partitions: 1 []
18
+ Directories: '4'
19
+ Files: '54'