gemba 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/THIRD_PARTY_NOTICES +37 -2
- data/assets/placeholder_boxart.png +0 -0
- data/bin/gemba +2 -2
- data/ext/gemba/extconf.rb +23 -1
- data/ext/gemba/gemba_ext.c +436 -2
- data/ext/gemba/gemba_ext.h +2 -0
- data/gemba.gemspec +5 -3
- data/lib/gemba/achievements/achievement.rb +23 -0
- data/lib/gemba/achievements/backend.rb +190 -0
- data/lib/gemba/achievements/cache.rb +70 -0
- data/lib/gemba/achievements/credentials_presenter.rb +142 -0
- data/lib/gemba/achievements/fake_backend.rb +205 -0
- data/lib/gemba/achievements/null_backend.rb +11 -0
- data/lib/gemba/achievements/offline_backend.rb +168 -0
- data/lib/gemba/achievements/retro_achievements/backend.rb +511 -0
- data/lib/gemba/achievements/retro_achievements/cli_sync_requester.rb +64 -0
- data/lib/gemba/achievements/retro_achievements/ping_worker.rb +28 -0
- data/lib/gemba/achievements/retro_achievements/unlock_retry_worker.rb +35 -0
- data/lib/gemba/achievements.rb +19 -0
- data/lib/gemba/achievements_window.rb +556 -0
- data/lib/gemba/app_controller.rb +1036 -0
- data/lib/gemba/bios.rb +54 -0
- data/lib/gemba/boxart_fetcher/libretro_backend.rb +39 -0
- data/lib/gemba/boxart_fetcher/null_backend.rb +12 -0
- data/lib/gemba/boxart_fetcher.rb +79 -0
- data/lib/gemba/bus_emitter.rb +13 -0
- data/lib/gemba/child_window.rb +24 -1
- data/lib/gemba/cli/commands/config_cmd.rb +83 -0
- data/lib/gemba/cli/commands/decode.rb +154 -0
- data/lib/gemba/cli/commands/patch.rb +78 -0
- data/lib/gemba/cli/commands/play.rb +78 -0
- data/lib/gemba/cli/commands/record.rb +114 -0
- data/lib/gemba/cli/commands/replay.rb +161 -0
- data/lib/gemba/cli/commands/retro_achievements.rb +213 -0
- data/lib/gemba/cli/commands/version.rb +22 -0
- data/lib/gemba/cli.rb +52 -364
- data/lib/gemba/config.rb +154 -1
- data/lib/gemba/data/gb_games.json +1 -0
- data/lib/gemba/data/gb_md5.json +1 -0
- data/lib/gemba/data/gba_games.json +1 -0
- data/lib/gemba/data/gba_md5.json +1 -0
- data/lib/gemba/data/gbc_games.json +1 -0
- data/lib/gemba/data/gbc_md5.json +1 -0
- data/lib/gemba/emulator_frame.rb +1084 -0
- data/lib/gemba/event_bus.rb +48 -0
- data/lib/gemba/frame_stack.rb +70 -0
- data/lib/gemba/game_index.rb +84 -0
- data/lib/gemba/game_picker_frame.rb +309 -0
- data/lib/gemba/gamepad_map.rb +103 -0
- data/lib/gemba/headless.rb +6 -5
- data/lib/gemba/headless_player.rb +33 -3
- data/lib/gemba/help_window.rb +61 -0
- data/lib/gemba/hotkey_map.rb +3 -1
- data/lib/gemba/input_recorder.rb +107 -0
- data/lib/gemba/input_replayer.rb +119 -0
- data/lib/gemba/keyboard_map.rb +90 -0
- data/lib/gemba/list_picker_frame.rb +271 -0
- data/lib/gemba/locales/en.yml +109 -5
- data/lib/gemba/locales/ja.yml +109 -5
- data/lib/gemba/main_window.rb +56 -0
- data/lib/gemba/modal_stack.rb +81 -0
- data/lib/gemba/patcher_window.rb +223 -0
- data/lib/gemba/platform/gb.rb +21 -0
- data/lib/gemba/platform/gba.rb +21 -0
- data/lib/gemba/platform/gbc.rb +23 -0
- data/lib/gemba/platform.rb +20 -0
- data/lib/gemba/platform_open.rb +19 -0
- data/lib/gemba/recorder.rb +4 -3
- data/lib/gemba/replay_player.rb +691 -0
- data/lib/gemba/rom_info.rb +57 -0
- data/lib/gemba/rom_info_window.rb +16 -3
- data/lib/gemba/rom_library.rb +106 -0
- data/lib/gemba/rom_overrides.rb +47 -0
- data/lib/gemba/rom_patcher/bps.rb +161 -0
- data/lib/gemba/rom_patcher/ips.rb +101 -0
- data/lib/gemba/rom_patcher/ups.rb +119 -0
- data/lib/gemba/rom_patcher.rb +109 -0
- data/lib/gemba/{rom_loader.rb → rom_resolver.rb} +7 -6
- data/lib/gemba/runtime.rb +59 -26
- data/lib/gemba/save_state_manager.rb +4 -7
- data/lib/gemba/save_state_picker.rb +17 -4
- data/lib/gemba/session_logger.rb +64 -0
- data/lib/gemba/settings/audio_tab.rb +77 -0
- data/lib/gemba/settings/gamepad_tab.rb +351 -0
- data/lib/gemba/settings/hotkeys_tab.rb +259 -0
- data/lib/gemba/settings/paths.rb +11 -0
- data/lib/gemba/settings/recording_tab.rb +83 -0
- data/lib/gemba/settings/save_states_tab.rb +91 -0
- data/lib/gemba/settings/system_tab.rb +377 -0
- data/lib/gemba/settings/video_tab.rb +318 -0
- data/lib/gemba/settings_window.rb +162 -1036
- data/lib/gemba/version.rb +1 -1
- data/lib/gemba/virtual_keyboard.rb +19 -0
- data/lib/gemba.rb +2 -12
- data/test/achievements_window/test_bulk_sync.rb +218 -0
- data/test/achievements_window/test_bus_events.rb +125 -0
- data/test/achievements_window/test_close_confirmation.rb +201 -0
- data/test/achievements_window/test_initial_state.rb +164 -0
- data/test/achievements_window/test_sorting.rb +227 -0
- data/test/achievements_window/test_tree_rendering.rb +133 -0
- data/test/fixtures/fake_bios.bin +0 -0
- data/test/fixtures/pong.gba +0 -0
- data/test/fixtures/test.gb +0 -0
- data/test/fixtures/test.gbc +0 -0
- data/test/fixtures/test_quicksave.ss +0 -0
- data/test/screenshots/no_focus.png +0 -0
- data/test/shared/teek_test_worker.rb +17 -1
- data/test/shared/tk_test_helper.rb +92 -4
- data/test/support/achievements_window_helpers.rb +18 -0
- data/test/support/fake_core.rb +25 -0
- data/test/support/fake_ra_runtime.rb +74 -0
- data/test/support/fake_requester.rb +78 -0
- data/test/support/player_helpers.rb +20 -5
- data/test/test_achievement.rb +32 -0
- data/test/{test_player.rb → test_app_controller.rb} +353 -85
- data/test/test_bios.rb +123 -0
- data/test/test_boxart_fetcher.rb +150 -0
- data/test/test_cli.rb +17 -265
- data/test/test_cli_config.rb +64 -0
- data/test/test_cli_decode.rb +97 -0
- data/test/test_cli_patch.rb +58 -0
- data/test/test_cli_play.rb +213 -0
- data/test/test_cli_ra.rb +175 -0
- data/test/test_cli_record.rb +69 -0
- data/test/test_cli_replay.rb +72 -0
- data/test/test_cli_sync_requester.rb +152 -0
- data/test/test_cli_version.rb +27 -0
- data/test/test_config.rb +3 -3
- data/test/test_config_ra.rb +69 -0
- data/test/test_core.rb +62 -1
- data/test/test_credentials_presenter.rb +192 -0
- data/test/test_event_bus.rb +100 -0
- data/test/test_fake_backend_achievements.rb +130 -0
- data/test/test_fake_backend_auth.rb +68 -0
- data/test/test_game_index.rb +77 -0
- data/test/test_game_picker_frame.rb +310 -0
- data/test/test_gamepad_map.rb +1 -3
- data/test/test_headless_player.rb +17 -3
- data/test/test_help_window.rb +82 -0
- data/test/test_hotkey_map.rb +22 -1
- data/test/test_input_recorder.rb +179 -0
- data/test/test_input_replay_determinism.rb +113 -0
- data/test/test_input_replayer.rb +162 -0
- data/test/test_keyboard_map.rb +1 -3
- data/test/test_libretro_backend.rb +41 -0
- data/test/test_list_picker_frame.rb +391 -0
- data/test/test_locale.rb +1 -1
- data/test/test_logging.rb +123 -0
- data/test/test_null_backend.rb +42 -0
- data/test/test_offline_backend.rb +116 -0
- data/test/test_overlay_renderer.rb +1 -1
- data/test/test_platform.rb +149 -0
- data/test/test_ra_backend.rb +313 -0
- data/test/test_ra_backend_unlock_gate.rb +56 -0
- data/test/test_ra_backend_unlock_retry.rb +123 -0
- data/test/test_recorder.rb +0 -3
- data/test/test_replay_player.rb +316 -0
- data/test/test_rom_info.rb +149 -0
- data/test/test_rom_overrides.rb +86 -0
- data/test/test_rom_patcher.rb +383 -0
- data/test/{test_rom_loader.rb → test_rom_resolver.rb} +25 -26
- data/test/test_save_state_manager.rb +2 -4
- data/test/test_settings_audio.rb +107 -0
- data/test/test_settings_hotkeys.rb +83 -66
- data/test/test_settings_recording.rb +49 -0
- data/test/test_settings_save_states.rb +97 -0
- data/test/test_settings_system.rb +133 -0
- data/test/test_settings_video.rb +450 -0
- data/test/test_settings_window.rb +76 -507
- data/test/test_tip_service.rb +6 -6
- data/test/test_toast_overlay.rb +1 -1
- data/test/test_virtual_events.rb +221 -0
- data/test/test_virtual_keyboard.rb +1 -1
- data/vendor/rcheevos/CHANGELOG.md +495 -0
- data/vendor/rcheevos/LICENSE +21 -0
- data/vendor/rcheevos/Package.swift +33 -0
- data/vendor/rcheevos/README.md +67 -0
- data/vendor/rcheevos/include/module.modulemap +70 -0
- data/vendor/rcheevos/include/rc_api_editor.h +296 -0
- data/vendor/rcheevos/include/rc_api_info.h +280 -0
- data/vendor/rcheevos/include/rc_api_request.h +77 -0
- data/vendor/rcheevos/include/rc_api_runtime.h +417 -0
- data/vendor/rcheevos/include/rc_api_user.h +262 -0
- data/vendor/rcheevos/include/rc_client.h +877 -0
- data/vendor/rcheevos/include/rc_client_raintegration.h +101 -0
- data/vendor/rcheevos/include/rc_consoles.h +138 -0
- data/vendor/rcheevos/include/rc_error.h +59 -0
- data/vendor/rcheevos/include/rc_export.h +100 -0
- data/vendor/rcheevos/include/rc_hash.h +200 -0
- data/vendor/rcheevos/include/rc_runtime.h +148 -0
- data/vendor/rcheevos/include/rc_runtime_types.h +452 -0
- data/vendor/rcheevos/include/rc_util.h +51 -0
- data/vendor/rcheevos/include/rcheevos.h +8 -0
- data/vendor/rcheevos/src/rapi/rc_api_common.c +1379 -0
- data/vendor/rcheevos/src/rapi/rc_api_common.h +88 -0
- data/vendor/rcheevos/src/rapi/rc_api_editor.c +625 -0
- data/vendor/rcheevos/src/rapi/rc_api_info.c +587 -0
- data/vendor/rcheevos/src/rapi/rc_api_runtime.c +901 -0
- data/vendor/rcheevos/src/rapi/rc_api_user.c +483 -0
- data/vendor/rcheevos/src/rc_client.c +6941 -0
- data/vendor/rcheevos/src/rc_client_external.c +281 -0
- data/vendor/rcheevos/src/rc_client_external.h +177 -0
- data/vendor/rcheevos/src/rc_client_external_versions.h +171 -0
- data/vendor/rcheevos/src/rc_client_internal.h +409 -0
- data/vendor/rcheevos/src/rc_client_raintegration.c +566 -0
- data/vendor/rcheevos/src/rc_client_raintegration_internal.h +61 -0
- data/vendor/rcheevos/src/rc_client_types.natvis +396 -0
- data/vendor/rcheevos/src/rc_compat.c +251 -0
- data/vendor/rcheevos/src/rc_compat.h +121 -0
- data/vendor/rcheevos/src/rc_libretro.c +915 -0
- data/vendor/rcheevos/src/rc_libretro.h +98 -0
- data/vendor/rcheevos/src/rc_util.c +199 -0
- data/vendor/rcheevos/src/rc_version.c +11 -0
- data/vendor/rcheevos/src/rc_version.h +32 -0
- data/vendor/rcheevos/src/rcheevos/alloc.c +312 -0
- data/vendor/rcheevos/src/rcheevos/condition.c +754 -0
- data/vendor/rcheevos/src/rcheevos/condset.c +777 -0
- data/vendor/rcheevos/src/rcheevos/consoleinfo.c +1215 -0
- data/vendor/rcheevos/src/rcheevos/format.c +330 -0
- data/vendor/rcheevos/src/rcheevos/lboard.c +287 -0
- data/vendor/rcheevos/src/rcheevos/memref.c +805 -0
- data/vendor/rcheevos/src/rcheevos/operand.c +607 -0
- data/vendor/rcheevos/src/rcheevos/rc_internal.h +390 -0
- data/vendor/rcheevos/src/rcheevos/rc_runtime_types.natvis +541 -0
- data/vendor/rcheevos/src/rcheevos/rc_validate.c +1406 -0
- data/vendor/rcheevos/src/rcheevos/rc_validate.h +18 -0
- data/vendor/rcheevos/src/rcheevos/richpresence.c +922 -0
- data/vendor/rcheevos/src/rcheevos/runtime.c +852 -0
- data/vendor/rcheevos/src/rcheevos/runtime_progress.c +1073 -0
- data/vendor/rcheevos/src/rcheevos/trigger.c +344 -0
- data/vendor/rcheevos/src/rcheevos/value.c +935 -0
- data/vendor/rcheevos/src/rhash/aes.c +480 -0
- data/vendor/rcheevos/src/rhash/aes.h +49 -0
- data/vendor/rcheevos/src/rhash/cdreader.c +838 -0
- data/vendor/rcheevos/src/rhash/hash.c +1402 -0
- data/vendor/rcheevos/src/rhash/hash_disc.c +1340 -0
- data/vendor/rcheevos/src/rhash/hash_encrypted.c +566 -0
- data/vendor/rcheevos/src/rhash/hash_rom.c +426 -0
- data/vendor/rcheevos/src/rhash/hash_zip.c +460 -0
- data/vendor/rcheevos/src/rhash/md5.c +382 -0
- data/vendor/rcheevos/src/rhash/md5.h +91 -0
- data/vendor/rcheevos/src/rhash/rc_hash_internal.h +116 -0
- data/vendor/rcheevos/test/libretro.h +205 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_common.c +941 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_editor.c +931 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_info.c +545 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_runtime.c +2213 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_user.c +998 -0
- data/vendor/rcheevos/test/rcheevos/mock_memory.h +32 -0
- data/vendor/rcheevos/test/rcheevos/test_condition.c +570 -0
- data/vendor/rcheevos/test/rcheevos/test_condset.c +5170 -0
- data/vendor/rcheevos/test/rcheevos/test_consoleinfo.c +203 -0
- data/vendor/rcheevos/test/rcheevos/test_format.c +112 -0
- data/vendor/rcheevos/test/rcheevos/test_lboard.c +746 -0
- data/vendor/rcheevos/test/rcheevos/test_memref.c +520 -0
- data/vendor/rcheevos/test/rcheevos/test_operand.c +692 -0
- data/vendor/rcheevos/test/rcheevos/test_rc_validate.c +502 -0
- data/vendor/rcheevos/test/rcheevos/test_richpresence.c +1564 -0
- data/vendor/rcheevos/test/rcheevos/test_runtime.c +1667 -0
- data/vendor/rcheevos/test/rcheevos/test_runtime_progress.c +1821 -0
- data/vendor/rcheevos/test/rcheevos/test_timing.c +166 -0
- data/vendor/rcheevos/test/rcheevos/test_trigger.c +2521 -0
- data/vendor/rcheevos/test/rcheevos/test_value.c +870 -0
- data/vendor/rcheevos/test/rcheevos-test.sln +46 -0
- data/vendor/rcheevos/test/rcheevos-test.vcxproj +239 -0
- data/vendor/rcheevos/test/rcheevos-test.vcxproj.filters +335 -0
- data/vendor/rcheevos/test/rhash/data.c +657 -0
- data/vendor/rcheevos/test/rhash/data.h +32 -0
- data/vendor/rcheevos/test/rhash/mock_filereader.c +236 -0
- data/vendor/rcheevos/test/rhash/mock_filereader.h +31 -0
- data/vendor/rcheevos/test/rhash/test_cdreader.c +920 -0
- data/vendor/rcheevos/test/rhash/test_hash.c +310 -0
- data/vendor/rcheevos/test/rhash/test_hash_disc.c +1450 -0
- data/vendor/rcheevos/test/rhash/test_hash_rom.c +899 -0
- data/vendor/rcheevos/test/rhash/test_hash_zip.c +551 -0
- data/vendor/rcheevos/test/test.c +113 -0
- data/vendor/rcheevos/test/test_framework.h +205 -0
- data/vendor/rcheevos/test/test_rc_client.c +10509 -0
- data/vendor/rcheevos/test/test_rc_client_external.c +2197 -0
- data/vendor/rcheevos/test/test_rc_client_raintegration.c +441 -0
- data/vendor/rcheevos/test/test_rc_libretro.c +952 -0
- data/vendor/rcheevos/test/test_types.natvis +9 -0
- data/vendor/rcheevos/validator/validator.c +658 -0
- data/vendor/rcheevos/validator/validator.vcxproj +152 -0
- data/vendor/rcheevos/validator/validator.vcxproj.filters +82 -0
- metadata +277 -10
- data/lib/gemba/input_mappings.rb +0 -214
- data/lib/gemba/player.rb +0 -1525
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "minitest/autorun"
|
|
4
|
+
require_relative "shared/tk_test_helper"
|
|
5
|
+
|
|
6
|
+
class TestSettingsVideoTab < Minitest::Test
|
|
7
|
+
include TeekTestHelper
|
|
8
|
+
|
|
9
|
+
def test_video_tab_exists
|
|
10
|
+
assert_tk_app("video tab exists in notebook") do
|
|
11
|
+
require "gemba/headless"
|
|
12
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
13
|
+
sw.show
|
|
14
|
+
app.update
|
|
15
|
+
|
|
16
|
+
tabs = app.command(Gemba::Settings::Paths::NB, 'tabs')
|
|
17
|
+
assert_includes tabs, Gemba::Settings::VideoTab::FRAME
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# -- Scale combobox --------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
def test_scale_defaults_to_3x
|
|
24
|
+
assert_tk_app("scale combobox defaults to 3x") do
|
|
25
|
+
require "gemba/headless"
|
|
26
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
27
|
+
sw.show
|
|
28
|
+
app.update
|
|
29
|
+
|
|
30
|
+
assert_equal '3x', app.get_variable(Gemba::Settings::VideoTab::VAR_SCALE)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_selecting_2x_scale_fires_callback
|
|
35
|
+
assert_tk_app("selecting 2x scale fires on_scale_change") do
|
|
36
|
+
require "gemba/headless"
|
|
37
|
+
received = nil
|
|
38
|
+
Gemba.bus = Gemba::EventBus.new
|
|
39
|
+
Gemba.bus.on(:scale_changed) { |s| received = s }
|
|
40
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
41
|
+
sw.show
|
|
42
|
+
app.update
|
|
43
|
+
|
|
44
|
+
app.set_variable(Gemba::Settings::VideoTab::VAR_SCALE, '2x')
|
|
45
|
+
app.command(:event, 'generate', Gemba::Settings::VideoTab::SCALE_COMBO, '<<ComboboxSelected>>')
|
|
46
|
+
app.update
|
|
47
|
+
|
|
48
|
+
assert_equal 2, received
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_selecting_4x_scale_fires_callback
|
|
53
|
+
assert_tk_app("selecting 4x scale fires on_scale_change") do
|
|
54
|
+
require "gemba/headless"
|
|
55
|
+
received = nil
|
|
56
|
+
Gemba.bus = Gemba::EventBus.new
|
|
57
|
+
Gemba.bus.on(:scale_changed) { |s| received = s }
|
|
58
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
59
|
+
sw.show
|
|
60
|
+
app.update
|
|
61
|
+
|
|
62
|
+
app.set_variable(Gemba::Settings::VideoTab::VAR_SCALE, '4x')
|
|
63
|
+
app.command(:event, 'generate', Gemba::Settings::VideoTab::SCALE_COMBO, '<<ComboboxSelected>>')
|
|
64
|
+
app.update
|
|
65
|
+
|
|
66
|
+
assert_equal 4, received
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# -- Turbo speed combobox --------------------------------------------------
|
|
71
|
+
|
|
72
|
+
def test_turbo_defaults_to_2x
|
|
73
|
+
assert_tk_app("turbo speed defaults to 2x") do
|
|
74
|
+
require "gemba/headless"
|
|
75
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
76
|
+
sw.show
|
|
77
|
+
app.update
|
|
78
|
+
|
|
79
|
+
assert_equal '2x', app.get_variable(Gemba::Settings::VideoTab::VAR_TURBO)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_selecting_4x_turbo_fires_callback
|
|
84
|
+
assert_tk_app("selecting 4x turbo fires on_turbo_speed_change") do
|
|
85
|
+
require "gemba/headless"
|
|
86
|
+
received = nil
|
|
87
|
+
Gemba.bus = Gemba::EventBus.new
|
|
88
|
+
Gemba.bus.on(:turbo_speed_changed) { |s| received = s }
|
|
89
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
90
|
+
sw.show
|
|
91
|
+
app.update
|
|
92
|
+
|
|
93
|
+
app.set_variable(Gemba::Settings::VideoTab::VAR_TURBO, '4x')
|
|
94
|
+
app.command(:event, 'generate', Gemba::Settings::VideoTab::TURBO_COMBO, '<<ComboboxSelected>>')
|
|
95
|
+
app.update
|
|
96
|
+
|
|
97
|
+
assert_equal 4, received
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# -- Aspect ratio checkbox -------------------------------------------------
|
|
102
|
+
|
|
103
|
+
def test_aspect_ratio_defaults_to_on
|
|
104
|
+
assert_tk_app("aspect ratio checkbox defaults to on") do
|
|
105
|
+
require "gemba/headless"
|
|
106
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
107
|
+
sw.show
|
|
108
|
+
app.update
|
|
109
|
+
|
|
110
|
+
assert_equal '1', app.get_variable(Gemba::Settings::VideoTab::VAR_ASPECT_RATIO)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_unchecking_aspect_ratio_fires_callback
|
|
115
|
+
assert_tk_app("unchecking aspect ratio fires on_aspect_ratio_change") do
|
|
116
|
+
require "gemba/headless"
|
|
117
|
+
received = nil
|
|
118
|
+
Gemba.bus = Gemba::EventBus.new
|
|
119
|
+
Gemba.bus.on(:aspect_ratio_changed) { |keep| received = keep }
|
|
120
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
121
|
+
sw.show
|
|
122
|
+
app.update
|
|
123
|
+
|
|
124
|
+
app.command(Gemba::Settings::VideoTab::ASPECT_CHECK, 'invoke')
|
|
125
|
+
app.update
|
|
126
|
+
|
|
127
|
+
assert_equal false, received
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_checking_aspect_ratio_fires_callback
|
|
132
|
+
assert_tk_app("re-checking aspect ratio fires callback with true") do
|
|
133
|
+
require "gemba/headless"
|
|
134
|
+
received = nil
|
|
135
|
+
Gemba.bus = Gemba::EventBus.new
|
|
136
|
+
Gemba.bus.on(:aspect_ratio_changed) { |keep| received = keep }
|
|
137
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
138
|
+
sw.show
|
|
139
|
+
app.update
|
|
140
|
+
|
|
141
|
+
app.command(Gemba::Settings::VideoTab::ASPECT_CHECK, 'invoke')
|
|
142
|
+
app.update
|
|
143
|
+
app.command(Gemba::Settings::VideoTab::ASPECT_CHECK, 'invoke')
|
|
144
|
+
app.update
|
|
145
|
+
|
|
146
|
+
assert_equal true, received
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# -- Show FPS checkbox -----------------------------------------------------
|
|
151
|
+
|
|
152
|
+
def test_show_fps_defaults_to_on
|
|
153
|
+
assert_tk_app("show fps checkbox defaults to on") do
|
|
154
|
+
require "gemba/headless"
|
|
155
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
156
|
+
sw.show
|
|
157
|
+
app.update
|
|
158
|
+
|
|
159
|
+
assert_equal '1', app.get_variable(Gemba::Settings::VideoTab::VAR_SHOW_FPS)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_unchecking_show_fps_fires_callback
|
|
164
|
+
assert_tk_app("unchecking show fps fires on_show_fps_change") do
|
|
165
|
+
require "gemba/headless"
|
|
166
|
+
received = nil
|
|
167
|
+
Gemba.bus = Gemba::EventBus.new
|
|
168
|
+
Gemba.bus.on(:show_fps_changed) { |show| received = show }
|
|
169
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
170
|
+
sw.show
|
|
171
|
+
app.update
|
|
172
|
+
|
|
173
|
+
app.command(Gemba::Settings::VideoTab::SHOW_FPS_CHECK, 'invoke')
|
|
174
|
+
app.update
|
|
175
|
+
|
|
176
|
+
assert_equal false, received
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# -- Pause on focus loss checkbox ------------------------------------------
|
|
181
|
+
|
|
182
|
+
def test_pause_focus_defaults_to_on
|
|
183
|
+
assert_tk_app("pause on focus loss defaults to on") do
|
|
184
|
+
require "gemba/headless"
|
|
185
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
186
|
+
sw.show
|
|
187
|
+
app.update
|
|
188
|
+
|
|
189
|
+
assert_equal '1', app.get_variable(Gemba::Settings::VideoTab::VAR_PAUSE_FOCUS)
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_unchecking_pause_focus_fires_callback
|
|
194
|
+
assert_tk_app("unchecking pause on focus loss fires callback") do
|
|
195
|
+
require "gemba/headless"
|
|
196
|
+
received = nil
|
|
197
|
+
Gemba.bus = Gemba::EventBus.new
|
|
198
|
+
Gemba.bus.on(:pause_on_focus_loss_changed) { |v| received = v }
|
|
199
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
200
|
+
sw.show
|
|
201
|
+
app.update
|
|
202
|
+
|
|
203
|
+
# The pause focus checkbox path
|
|
204
|
+
pause_check = "#{Gemba::Settings::VideoTab::FRAME}.pause_focus_row.check"
|
|
205
|
+
app.command(pause_check, 'invoke')
|
|
206
|
+
app.update
|
|
207
|
+
|
|
208
|
+
assert_equal false, received
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# -- Toast duration combobox -----------------------------------------------
|
|
213
|
+
|
|
214
|
+
def test_toast_duration_defaults_to_1_5s
|
|
215
|
+
assert_tk_app("toast duration defaults to 1.5s") do
|
|
216
|
+
require "gemba/headless"
|
|
217
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
218
|
+
sw.show
|
|
219
|
+
app.update
|
|
220
|
+
|
|
221
|
+
assert_equal '1.5s', app.get_variable(Gemba::Settings::VideoTab::VAR_TOAST_DURATION)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def test_selecting_3s_toast_fires_callback
|
|
226
|
+
assert_tk_app("selecting 3s toast fires on_toast_duration_change") do
|
|
227
|
+
require "gemba/headless"
|
|
228
|
+
received = nil
|
|
229
|
+
Gemba.bus = Gemba::EventBus.new
|
|
230
|
+
Gemba.bus.on(:toast_duration_changed) { |s| received = s }
|
|
231
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
232
|
+
sw.show
|
|
233
|
+
app.update
|
|
234
|
+
|
|
235
|
+
app.set_variable(Gemba::Settings::VideoTab::VAR_TOAST_DURATION, '3s')
|
|
236
|
+
app.command(:event, 'generate', Gemba::Settings::VideoTab::TOAST_COMBO, '<<ComboboxSelected>>')
|
|
237
|
+
app.update
|
|
238
|
+
|
|
239
|
+
assert_in_delta 3.0, received
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# -- Pixel filter combobox -------------------------------------------------
|
|
244
|
+
|
|
245
|
+
def test_pixel_filter_defaults_to_nearest
|
|
246
|
+
assert_tk_app("pixel filter defaults to Nearest Neighbor") do
|
|
247
|
+
require "gemba/headless"
|
|
248
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
249
|
+
sw.show
|
|
250
|
+
app.update
|
|
251
|
+
|
|
252
|
+
assert_equal 'Nearest Neighbor', app.get_variable(Gemba::Settings::VideoTab::VAR_FILTER)
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def test_selecting_bilinear_fires_callback
|
|
257
|
+
assert_tk_app("selecting Bilinear fires on_filter_change") do
|
|
258
|
+
require "gemba/headless"
|
|
259
|
+
received = nil
|
|
260
|
+
Gemba.bus = Gemba::EventBus.new
|
|
261
|
+
Gemba.bus.on(:filter_changed) { |f| received = f }
|
|
262
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
263
|
+
sw.show
|
|
264
|
+
app.update
|
|
265
|
+
|
|
266
|
+
app.set_variable(Gemba::Settings::VideoTab::VAR_FILTER, 'Bilinear')
|
|
267
|
+
app.command(:event, 'generate', Gemba::Settings::VideoTab::FILTER_COMBO, '<<ComboboxSelected>>')
|
|
268
|
+
app.update
|
|
269
|
+
|
|
270
|
+
assert_equal 'linear', received
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# -- Integer scaling checkbox ----------------------------------------------
|
|
275
|
+
|
|
276
|
+
def test_integer_scale_defaults_to_off
|
|
277
|
+
assert_tk_app("integer scale checkbox defaults to off") do
|
|
278
|
+
require "gemba/headless"
|
|
279
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
280
|
+
sw.show
|
|
281
|
+
app.update
|
|
282
|
+
|
|
283
|
+
assert_equal '0', app.get_variable(Gemba::Settings::VideoTab::VAR_INTEGER_SCALE)
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def test_clicking_integer_scale_fires_callback
|
|
288
|
+
assert_tk_app("clicking integer scale fires on_integer_scale_change") do
|
|
289
|
+
require "gemba/headless"
|
|
290
|
+
received = nil
|
|
291
|
+
Gemba.bus = Gemba::EventBus.new
|
|
292
|
+
Gemba.bus.on(:integer_scale_changed) { |v| received = v }
|
|
293
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
294
|
+
sw.show
|
|
295
|
+
app.update
|
|
296
|
+
|
|
297
|
+
app.command(Gemba::Settings::VideoTab::INTEGER_SCALE_CHECK, 'invoke')
|
|
298
|
+
app.update
|
|
299
|
+
|
|
300
|
+
assert_equal true, received
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# -- Color correction checkbox ---------------------------------------------
|
|
305
|
+
|
|
306
|
+
def test_color_correction_defaults_to_off
|
|
307
|
+
assert_tk_app("color correction checkbox defaults to off") do
|
|
308
|
+
require "gemba/headless"
|
|
309
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
310
|
+
sw.show
|
|
311
|
+
app.update
|
|
312
|
+
|
|
313
|
+
assert_equal '0', app.get_variable(Gemba::Settings::VideoTab::VAR_COLOR_CORRECTION)
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def test_clicking_color_correction_fires_callback
|
|
318
|
+
assert_tk_app("clicking color correction fires on_color_correction_change") do
|
|
319
|
+
require "gemba/headless"
|
|
320
|
+
received = nil
|
|
321
|
+
Gemba.bus = Gemba::EventBus.new
|
|
322
|
+
Gemba.bus.on(:color_correction_changed) { |v| received = v }
|
|
323
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
324
|
+
sw.show
|
|
325
|
+
app.update
|
|
326
|
+
|
|
327
|
+
app.command(Gemba::Settings::VideoTab::COLOR_CORRECTION_CHECK, 'invoke')
|
|
328
|
+
app.update
|
|
329
|
+
|
|
330
|
+
assert_equal true, received
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def test_unchecking_color_correction_fires_false
|
|
335
|
+
assert_tk_app("unchecking color correction fires callback with false") do
|
|
336
|
+
require "gemba/headless"
|
|
337
|
+
received = nil
|
|
338
|
+
Gemba.bus = Gemba::EventBus.new
|
|
339
|
+
Gemba.bus.on(:color_correction_changed) { |v| received = v }
|
|
340
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
341
|
+
sw.show
|
|
342
|
+
app.update
|
|
343
|
+
|
|
344
|
+
app.command(Gemba::Settings::VideoTab::COLOR_CORRECTION_CHECK, 'invoke')
|
|
345
|
+
app.update
|
|
346
|
+
app.command(Gemba::Settings::VideoTab::COLOR_CORRECTION_CHECK, 'invoke')
|
|
347
|
+
app.update
|
|
348
|
+
|
|
349
|
+
assert_equal false, received
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# -- Frame blending checkbox -----------------------------------------------
|
|
354
|
+
|
|
355
|
+
def test_frame_blending_defaults_to_off
|
|
356
|
+
assert_tk_app("frame blending checkbox defaults to off") do
|
|
357
|
+
require "gemba/headless"
|
|
358
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
359
|
+
sw.show
|
|
360
|
+
app.update
|
|
361
|
+
|
|
362
|
+
assert_equal '0', app.get_variable(Gemba::Settings::VideoTab::VAR_FRAME_BLENDING)
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def test_clicking_frame_blending_fires_callback
|
|
367
|
+
assert_tk_app("clicking frame blending fires on_frame_blending_change") do
|
|
368
|
+
require "gemba/headless"
|
|
369
|
+
received = nil
|
|
370
|
+
Gemba.bus = Gemba::EventBus.new
|
|
371
|
+
Gemba.bus.on(:frame_blending_changed) { |v| received = v }
|
|
372
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
373
|
+
sw.show
|
|
374
|
+
app.update
|
|
375
|
+
|
|
376
|
+
app.command(Gemba::Settings::VideoTab::FRAME_BLENDING_CHECK, 'invoke')
|
|
377
|
+
app.update
|
|
378
|
+
|
|
379
|
+
assert_equal true, received
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
def test_unchecking_frame_blending_fires_false
|
|
384
|
+
assert_tk_app("unchecking frame blending fires callback with false") do
|
|
385
|
+
require "gemba/headless"
|
|
386
|
+
received = nil
|
|
387
|
+
Gemba.bus = Gemba::EventBus.new
|
|
388
|
+
Gemba.bus.on(:frame_blending_changed) { |v| received = v }
|
|
389
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
390
|
+
sw.show
|
|
391
|
+
app.update
|
|
392
|
+
|
|
393
|
+
app.command(Gemba::Settings::VideoTab::FRAME_BLENDING_CHECK, 'invoke')
|
|
394
|
+
app.update
|
|
395
|
+
app.command(Gemba::Settings::VideoTab::FRAME_BLENDING_CHECK, 'invoke')
|
|
396
|
+
app.update
|
|
397
|
+
|
|
398
|
+
assert_equal false, received
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
# -- Rewind checkbox -------------------------------------------------------
|
|
403
|
+
|
|
404
|
+
def test_rewind_defaults_to_on
|
|
405
|
+
assert_tk_app("rewind checkbox defaults to on") do
|
|
406
|
+
require "gemba/headless"
|
|
407
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
408
|
+
sw.show
|
|
409
|
+
app.update
|
|
410
|
+
|
|
411
|
+
assert_equal '1', app.get_variable(Gemba::Settings::VideoTab::VAR_REWIND_ENABLED)
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
def test_clicking_rewind_fires_callback
|
|
416
|
+
assert_tk_app("clicking rewind fires on_rewind_toggle") do
|
|
417
|
+
require "gemba/headless"
|
|
418
|
+
received = nil
|
|
419
|
+
Gemba.bus = Gemba::EventBus.new
|
|
420
|
+
Gemba.bus.on(:rewind_toggled) { |v| received = v }
|
|
421
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
422
|
+
sw.show
|
|
423
|
+
app.update
|
|
424
|
+
|
|
425
|
+
app.command(Gemba::Settings::VideoTab::REWIND_CHECK, 'invoke')
|
|
426
|
+
app.update
|
|
427
|
+
|
|
428
|
+
assert_equal false, received
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
def test_rechecking_rewind_fires_true
|
|
433
|
+
assert_tk_app("re-checking rewind fires callback with true") do
|
|
434
|
+
require "gemba/headless"
|
|
435
|
+
received = nil
|
|
436
|
+
Gemba.bus = Gemba::EventBus.new
|
|
437
|
+
Gemba.bus.on(:rewind_toggled) { |v| received = v }
|
|
438
|
+
sw = Gemba::SettingsWindow.new(app)
|
|
439
|
+
sw.show
|
|
440
|
+
app.update
|
|
441
|
+
|
|
442
|
+
app.command(Gemba::Settings::VideoTab::REWIND_CHECK, 'invoke')
|
|
443
|
+
app.update
|
|
444
|
+
app.command(Gemba::Settings::VideoTab::REWIND_CHECK, 'invoke')
|
|
445
|
+
app.update
|
|
446
|
+
|
|
447
|
+
assert_equal true, received
|
|
448
|
+
end
|
|
449
|
+
end
|
|
450
|
+
end
|