gemba 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +186 -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 +453 -0
- data/lib/gemba/achievements/retro_achievements/cli_sync_requester.rb +64 -0
- data/lib/gemba/achievements/retro_achievements/ping_worker.rb +27 -0
- data/lib/gemba/achievements.rb +19 -0
- data/lib/gemba/achievements_window.rb +556 -0
- data/lib/gemba/app_controller.rb +1015 -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 +134 -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 +1060 -0
- data/lib/gemba/event_bus.rb +48 -0
- data/lib/gemba/frame_stack.rb +60 -0
- data/lib/gemba/game_index.rb +84 -0
- data/lib/gemba/game_picker_frame.rb +268 -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/locales/en.yml +97 -5
- data/lib/gemba/locales/ja.yml +97 -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 +118 -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 +362 -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 +91 -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 +68 -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 +2 -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_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_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 +382 -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 +156 -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 +274 -11
- data/lib/gemba/input_mappings.rb +0 -214
- data/lib/gemba/player.rb +0 -1525
|
@@ -0,0 +1,931 @@
|
|
|
1
|
+
#include "rc_api_editor.h"
|
|
2
|
+
#include "rc_api_runtime.h"
|
|
3
|
+
|
|
4
|
+
#include "../src/rapi/rc_api_common.h"
|
|
5
|
+
#include "../test_framework.h"
|
|
6
|
+
#include "../rc_compat.h"
|
|
7
|
+
#include "rc_consoles.h"
|
|
8
|
+
|
|
9
|
+
#define DOREQUEST_URL "https://retroachievements.org/dorequest.php"
|
|
10
|
+
|
|
11
|
+
static void test_init_fetch_code_notes_request()
|
|
12
|
+
{
|
|
13
|
+
rc_api_fetch_code_notes_request_t fetch_code_notes_request;
|
|
14
|
+
rc_api_request_t request;
|
|
15
|
+
|
|
16
|
+
memset(&fetch_code_notes_request, 0, sizeof(fetch_code_notes_request));
|
|
17
|
+
fetch_code_notes_request.game_id = 1234;
|
|
18
|
+
|
|
19
|
+
ASSERT_NUM_EQUALS(rc_api_init_fetch_code_notes_request(&request, &fetch_code_notes_request), RC_OK);
|
|
20
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
21
|
+
ASSERT_STR_EQUALS(request.post_data, "r=codenotes2&g=1234");
|
|
22
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
23
|
+
|
|
24
|
+
rc_api_destroy_request(&request);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static void test_init_fetch_code_notes_request_no_game_id()
|
|
28
|
+
{
|
|
29
|
+
rc_api_fetch_code_notes_request_t fetch_code_notes_request;
|
|
30
|
+
rc_api_request_t request;
|
|
31
|
+
|
|
32
|
+
memset(&fetch_code_notes_request, 0, sizeof(fetch_code_notes_request));
|
|
33
|
+
|
|
34
|
+
ASSERT_NUM_EQUALS(rc_api_init_fetch_code_notes_request(&request, &fetch_code_notes_request), RC_INVALID_STATE);
|
|
35
|
+
|
|
36
|
+
rc_api_destroy_request(&request);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static void test_init_fetch_code_notes_response_empty_array()
|
|
40
|
+
{
|
|
41
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
42
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":[]}";
|
|
43
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
44
|
+
|
|
45
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
46
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
47
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
48
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.notes);
|
|
49
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 0);
|
|
50
|
+
|
|
51
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static void test_init_fetch_code_notes_response_one_item()
|
|
55
|
+
{
|
|
56
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
57
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":["
|
|
58
|
+
"{\"User\":\"User\",\"Address\":\"0x001234\",\"Note\":\"01=true\"}"
|
|
59
|
+
"]}";
|
|
60
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
61
|
+
|
|
62
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
63
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
64
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
65
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 1);
|
|
66
|
+
ASSERT_PTR_NOT_NULL(fetch_code_notes_response.notes);
|
|
67
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[0].address, 0x1234);
|
|
68
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].author, "User");
|
|
69
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].note, "01=true");
|
|
70
|
+
|
|
71
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static void test_init_fetch_code_notes_response_several_items()
|
|
75
|
+
{
|
|
76
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
77
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":["
|
|
78
|
+
"{\"User\":\"User\",\"Address\":\"0x001234\",\"Note\":\"01=true\"},"
|
|
79
|
+
"{\"User\":\"User\",\"Address\":\"0x002000\",\"Note\":\"Happy\"},"
|
|
80
|
+
"{\"User\":\"User2\",\"Address\":\"0x002002\",\"Note\":\"Sad\"},"
|
|
81
|
+
"{\"User\":\"User\",\"Address\":\"0x002ABC\",\"Note\":\"Banana\\n0=a\"}"
|
|
82
|
+
"]}";
|
|
83
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
84
|
+
|
|
85
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
86
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
87
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
88
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 4);
|
|
89
|
+
ASSERT_PTR_NOT_NULL(fetch_code_notes_response.notes);
|
|
90
|
+
|
|
91
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[0].address, 0x1234);
|
|
92
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].author, "User");
|
|
93
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].note, "01=true");
|
|
94
|
+
|
|
95
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[1].address, 0x2000);
|
|
96
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[1].author, "User");
|
|
97
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[1].note, "Happy");
|
|
98
|
+
|
|
99
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[2].address, 0x2002);
|
|
100
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[2].author, "User2");
|
|
101
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[2].note, "Sad");
|
|
102
|
+
|
|
103
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[3].address, 0x2ABC);
|
|
104
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[3].author, "User");
|
|
105
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[3].note, "Banana\n0=a");
|
|
106
|
+
|
|
107
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
static void test_init_fetch_code_notes_response_deleted_items()
|
|
111
|
+
{
|
|
112
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
113
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":["
|
|
114
|
+
"{\"User\":\"User\",\"Address\":\"0x001234\",\"Note\":\"\"},"
|
|
115
|
+
"{\"User\":\"User\",\"Address\":\"0x002000\",\"Note\":\"Happy\"},"
|
|
116
|
+
"{\"User\":\"User2\",\"Address\":\"0x002002\",\"Note\":\"''\"},"
|
|
117
|
+
"{\"User\":\"User\",\"Address\":\"0x002ABC\",\"Note\":\"\"}"
|
|
118
|
+
"]}";
|
|
119
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
120
|
+
|
|
121
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
122
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
123
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
124
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 1);
|
|
125
|
+
ASSERT_PTR_NOT_NULL(fetch_code_notes_response.notes);
|
|
126
|
+
|
|
127
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[0].address, 0x2000);
|
|
128
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].author, "User");
|
|
129
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].note, "Happy");
|
|
130
|
+
|
|
131
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static void test_init_fetch_code_notes_response_null_user()
|
|
135
|
+
{
|
|
136
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
137
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":["
|
|
138
|
+
"{\"User\":\"User\",\"Address\":\"0x001234\",\"Note\":\"01=true\"},"
|
|
139
|
+
"{\"User\":\"User\",\"Address\":\"0x002000\",\"Note\":\"Happy\"},"
|
|
140
|
+
"{\"User\":null,\"Address\":\"0x002002\",\"Note\":\"Sad\"},"
|
|
141
|
+
"{\"User\":\"User\",\"Address\":\"0x002ABC\",\"Note\":\"Banana\\n0=a\"}"
|
|
142
|
+
"]}";
|
|
143
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
144
|
+
|
|
145
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
146
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
147
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
148
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 4);
|
|
149
|
+
ASSERT_PTR_NOT_NULL(fetch_code_notes_response.notes);
|
|
150
|
+
|
|
151
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[0].address, 0x1234);
|
|
152
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].author, "User");
|
|
153
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].note, "01=true");
|
|
154
|
+
|
|
155
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[1].address, 0x2000);
|
|
156
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[1].author, "User");
|
|
157
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[1].note, "Happy");
|
|
158
|
+
|
|
159
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[2].address, 0x2002);
|
|
160
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[2].author, "");
|
|
161
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[2].note, "Sad");
|
|
162
|
+
|
|
163
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[3].address, 0x2ABC);
|
|
164
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[3].author, "User");
|
|
165
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[3].note, "Banana\n0=a");
|
|
166
|
+
|
|
167
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static void test_init_fetch_code_notes_response_unsigned()
|
|
171
|
+
{
|
|
172
|
+
rc_api_fetch_code_notes_response_t fetch_code_notes_response;
|
|
173
|
+
const char* server_response = "{\"Success\":true,\"CodeNotes\":["
|
|
174
|
+
"{\"User\":\"User\",\"Address\":\"0x98765432\",\"Note\":\"01=true\"}"
|
|
175
|
+
"]}";
|
|
176
|
+
memset(&fetch_code_notes_response, 0, sizeof(fetch_code_notes_response));
|
|
177
|
+
|
|
178
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_code_notes_response(&fetch_code_notes_response, server_response), RC_OK);
|
|
179
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.response.succeeded, 1);
|
|
180
|
+
ASSERT_PTR_NULL(fetch_code_notes_response.response.error_message);
|
|
181
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.num_notes, 1);
|
|
182
|
+
ASSERT_PTR_NOT_NULL(fetch_code_notes_response.notes);
|
|
183
|
+
ASSERT_NUM_EQUALS(fetch_code_notes_response.notes[0].address, 0x98765432);
|
|
184
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].author, "User");
|
|
185
|
+
ASSERT_STR_EQUALS(fetch_code_notes_response.notes[0].note, "01=true");
|
|
186
|
+
|
|
187
|
+
rc_api_destroy_fetch_code_notes_response(&fetch_code_notes_response);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
static void test_init_update_code_note_request()
|
|
191
|
+
{
|
|
192
|
+
rc_api_update_code_note_request_t update_code_note_request;
|
|
193
|
+
rc_api_request_t request;
|
|
194
|
+
|
|
195
|
+
memset(&update_code_note_request, 0, sizeof(update_code_note_request));
|
|
196
|
+
update_code_note_request.username = "Dev";
|
|
197
|
+
update_code_note_request.api_token = "API_TOKEN";
|
|
198
|
+
update_code_note_request.game_id = 1234;
|
|
199
|
+
update_code_note_request.address = 0x1C00;
|
|
200
|
+
update_code_note_request.note = "flags\n1=first\n2=second";
|
|
201
|
+
|
|
202
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_code_note_request(&request, &update_code_note_request), RC_OK);
|
|
203
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
204
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitcodenote&u=Dev&t=API_TOKEN&g=1234&m=7168&n=flags%0a1%3dfirst%0a2%3dsecond");
|
|
205
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
206
|
+
|
|
207
|
+
rc_api_destroy_request(&request);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static void test_init_update_code_note_request_no_game_id()
|
|
211
|
+
{
|
|
212
|
+
rc_api_update_code_note_request_t update_code_note_request;
|
|
213
|
+
rc_api_request_t request;
|
|
214
|
+
|
|
215
|
+
memset(&update_code_note_request, 0, sizeof(update_code_note_request));
|
|
216
|
+
update_code_note_request.username = "Dev";
|
|
217
|
+
update_code_note_request.api_token = "API_TOKEN";
|
|
218
|
+
update_code_note_request.address = 0x1C00;
|
|
219
|
+
update_code_note_request.note = "flags\n1=first\n2=second";
|
|
220
|
+
|
|
221
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_code_note_request(&request, &update_code_note_request), RC_INVALID_STATE);
|
|
222
|
+
|
|
223
|
+
rc_api_destroy_request(&request);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
static void test_init_update_code_note_request_no_note()
|
|
227
|
+
{
|
|
228
|
+
rc_api_update_code_note_request_t update_code_note_request;
|
|
229
|
+
rc_api_request_t request;
|
|
230
|
+
|
|
231
|
+
memset(&update_code_note_request, 0, sizeof(update_code_note_request));
|
|
232
|
+
update_code_note_request.username = "Dev";
|
|
233
|
+
update_code_note_request.api_token = "API_TOKEN";
|
|
234
|
+
update_code_note_request.game_id = 1234;
|
|
235
|
+
update_code_note_request.address = 0x1C00;
|
|
236
|
+
update_code_note_request.note = NULL;
|
|
237
|
+
|
|
238
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_code_note_request(&request, &update_code_note_request), RC_OK);
|
|
239
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
240
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitcodenote&u=Dev&t=API_TOKEN&g=1234&m=7168");
|
|
241
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
242
|
+
|
|
243
|
+
rc_api_destroy_request(&request);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
static void test_init_update_code_note_request_empty_note()
|
|
247
|
+
{
|
|
248
|
+
rc_api_update_code_note_request_t update_code_note_request;
|
|
249
|
+
rc_api_request_t request;
|
|
250
|
+
|
|
251
|
+
memset(&update_code_note_request, 0, sizeof(update_code_note_request));
|
|
252
|
+
update_code_note_request.username = "Dev";
|
|
253
|
+
update_code_note_request.api_token = "API_TOKEN";
|
|
254
|
+
update_code_note_request.game_id = 1234;
|
|
255
|
+
update_code_note_request.address = 0x1C00;
|
|
256
|
+
update_code_note_request.note = "";
|
|
257
|
+
|
|
258
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_code_note_request(&request, &update_code_note_request), RC_OK);
|
|
259
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
260
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitcodenote&u=Dev&t=API_TOKEN&g=1234&m=7168");
|
|
261
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
262
|
+
|
|
263
|
+
rc_api_destroy_request(&request);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static void test_init_update_code_note_response()
|
|
267
|
+
{
|
|
268
|
+
rc_api_update_code_note_response_t update_code_note_response;
|
|
269
|
+
const char* server_response = "{\"Success\":true,\"GameID\":1234,\"Address\":7168,\"Note\":\"test\"}";
|
|
270
|
+
memset(&update_code_note_response, 0, sizeof(update_code_note_response));
|
|
271
|
+
|
|
272
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_code_note_response(&update_code_note_response, server_response), RC_OK);
|
|
273
|
+
ASSERT_NUM_EQUALS(update_code_note_response.response.succeeded, 1);
|
|
274
|
+
ASSERT_PTR_NULL(update_code_note_response.response.error_message);
|
|
275
|
+
|
|
276
|
+
rc_api_destroy_update_code_note_response(&update_code_note_response);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
static void test_init_update_code_note_response_invalid_credentials()
|
|
280
|
+
{
|
|
281
|
+
rc_api_update_code_note_response_t update_code_note_response;
|
|
282
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Credentials invalid (0)\"}";
|
|
283
|
+
memset(&update_code_note_response, 0, sizeof(update_code_note_response));
|
|
284
|
+
|
|
285
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_code_note_response(&update_code_note_response, server_response), RC_OK);
|
|
286
|
+
ASSERT_NUM_EQUALS(update_code_note_response.response.succeeded, 0);
|
|
287
|
+
ASSERT_STR_EQUALS(update_code_note_response.response.error_message, "Credentials invalid (0)");
|
|
288
|
+
|
|
289
|
+
rc_api_destroy_update_code_note_response(&update_code_note_response);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
static void test_init_update_achievement_request()
|
|
293
|
+
{
|
|
294
|
+
rc_api_update_achievement_request_t update_achievement_request;
|
|
295
|
+
rc_api_request_t request;
|
|
296
|
+
|
|
297
|
+
memset(&update_achievement_request, 0, sizeof(update_achievement_request));
|
|
298
|
+
update_achievement_request.username = "Dev";
|
|
299
|
+
update_achievement_request.api_token = "API_TOKEN";
|
|
300
|
+
update_achievement_request.game_id = 1234;
|
|
301
|
+
update_achievement_request.achievement_id = 5555;
|
|
302
|
+
update_achievement_request.title = "Title";
|
|
303
|
+
update_achievement_request.description = "Description";
|
|
304
|
+
update_achievement_request.badge = "123456";
|
|
305
|
+
update_achievement_request.trigger = "0xH1234=1";
|
|
306
|
+
update_achievement_request.points = 5;
|
|
307
|
+
update_achievement_request.category = RC_ACHIEVEMENT_CATEGORY_CORE;
|
|
308
|
+
|
|
309
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
310
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
311
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&a=5555&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=3&b=123456&x=&h=7cd9d3f0bfdf84734968353b5a430cfd");
|
|
312
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
313
|
+
|
|
314
|
+
rc_api_destroy_request(&request);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
static void test_init_update_achievement_request_new()
|
|
318
|
+
{
|
|
319
|
+
rc_api_update_achievement_request_t update_achievement_request;
|
|
320
|
+
rc_api_request_t request;
|
|
321
|
+
|
|
322
|
+
memset(&update_achievement_request, 0, sizeof(update_achievement_request));
|
|
323
|
+
update_achievement_request.username = "Dev";
|
|
324
|
+
update_achievement_request.api_token = "API_TOKEN";
|
|
325
|
+
update_achievement_request.game_id = 1234;
|
|
326
|
+
update_achievement_request.title = "Title";
|
|
327
|
+
update_achievement_request.description = "Description";
|
|
328
|
+
update_achievement_request.badge = "123456";
|
|
329
|
+
update_achievement_request.trigger = "0xH1234=1";
|
|
330
|
+
update_achievement_request.points = 5;
|
|
331
|
+
update_achievement_request.category = RC_ACHIEVEMENT_CATEGORY_UNOFFICIAL;
|
|
332
|
+
|
|
333
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
334
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
335
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=5&b=123456&x=&h=10dd1fd6e0201f634b1b7536d4860ccb");
|
|
336
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
337
|
+
|
|
338
|
+
rc_api_destroy_request(&request);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
static void test_init_update_achievement_request_no_game_id()
|
|
342
|
+
{
|
|
343
|
+
rc_api_update_achievement_request_t update_achievement_request;
|
|
344
|
+
rc_api_request_t request;
|
|
345
|
+
|
|
346
|
+
memset(&update_achievement_request, 0, sizeof(update_achievement_request));
|
|
347
|
+
update_achievement_request.username = "Dev";
|
|
348
|
+
update_achievement_request.api_token = "API_TOKEN";
|
|
349
|
+
update_achievement_request.achievement_id = 5555;
|
|
350
|
+
update_achievement_request.title = "Title";
|
|
351
|
+
update_achievement_request.description = "Description";
|
|
352
|
+
update_achievement_request.badge = "123456";
|
|
353
|
+
update_achievement_request.trigger = "0xH1234=1";
|
|
354
|
+
update_achievement_request.points = 5;
|
|
355
|
+
update_achievement_request.category = RC_ACHIEVEMENT_CATEGORY_CORE;
|
|
356
|
+
|
|
357
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_INVALID_STATE);
|
|
358
|
+
|
|
359
|
+
rc_api_destroy_request(&request);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
static void test_init_update_achievement_request_type()
|
|
363
|
+
{
|
|
364
|
+
rc_api_update_achievement_request_t update_achievement_request;
|
|
365
|
+
rc_api_request_t request;
|
|
366
|
+
|
|
367
|
+
memset(&update_achievement_request, 0, sizeof(update_achievement_request));
|
|
368
|
+
update_achievement_request.username = "Dev";
|
|
369
|
+
update_achievement_request.api_token = "API_TOKEN";
|
|
370
|
+
update_achievement_request.game_id = 1234;
|
|
371
|
+
update_achievement_request.achievement_id = 5555;
|
|
372
|
+
update_achievement_request.title = "Title";
|
|
373
|
+
update_achievement_request.description = "Description";
|
|
374
|
+
update_achievement_request.badge = "123456";
|
|
375
|
+
update_achievement_request.trigger = "0xH1234=1";
|
|
376
|
+
update_achievement_request.points = 5;
|
|
377
|
+
update_achievement_request.category = RC_ACHIEVEMENT_CATEGORY_CORE;
|
|
378
|
+
update_achievement_request.type = RC_ACHIEVEMENT_TYPE_MISSABLE;
|
|
379
|
+
|
|
380
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
381
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
382
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&a=5555&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=3&b=123456&x=missable&h=7cd9d3f0bfdf84734968353b5a430cfd");
|
|
383
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
384
|
+
|
|
385
|
+
update_achievement_request.type = RC_ACHIEVEMENT_TYPE_PROGRESSION;
|
|
386
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
387
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&a=5555&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=3&b=123456&x=progression&h=7cd9d3f0bfdf84734968353b5a430cfd");
|
|
388
|
+
|
|
389
|
+
update_achievement_request.type = RC_ACHIEVEMENT_TYPE_WIN;
|
|
390
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
391
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&a=5555&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=3&b=123456&x=win_condition&h=7cd9d3f0bfdf84734968353b5a430cfd");
|
|
392
|
+
|
|
393
|
+
update_achievement_request.type = RC_ACHIEVEMENT_TYPE_STANDARD;
|
|
394
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_achievement_request(&request, &update_achievement_request), RC_OK);
|
|
395
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadachievement&u=Dev&t=API_TOKEN&a=5555&g=1234&n=Title&d=Description&m=0xH1234%3d1&z=5&f=3&b=123456&x=&h=7cd9d3f0bfdf84734968353b5a430cfd");
|
|
396
|
+
|
|
397
|
+
rc_api_destroy_request(&request);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
static void test_init_update_achievement_response()
|
|
401
|
+
{
|
|
402
|
+
rc_api_update_achievement_response_t update_achievement_response;
|
|
403
|
+
const char* server_response = "{\"Success\":true,\"AchievementID\":1234}";
|
|
404
|
+
memset(&update_achievement_response, 0, sizeof(update_achievement_response));
|
|
405
|
+
|
|
406
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_achievement_response(&update_achievement_response, server_response), RC_OK);
|
|
407
|
+
ASSERT_NUM_EQUALS(update_achievement_response.response.succeeded, 1);
|
|
408
|
+
ASSERT_PTR_NULL(update_achievement_response.response.error_message);
|
|
409
|
+
ASSERT_UNUM_EQUALS(update_achievement_response.achievement_id, 1234);
|
|
410
|
+
|
|
411
|
+
rc_api_destroy_update_achievement_response(&update_achievement_response);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
static void test_init_update_achievement_response_invalid_credentials()
|
|
415
|
+
{
|
|
416
|
+
rc_api_update_achievement_response_t update_achievement_response;
|
|
417
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Credentials invalid (0)\"}";
|
|
418
|
+
memset(&update_achievement_response, 0, sizeof(update_achievement_response));
|
|
419
|
+
|
|
420
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_achievement_response(&update_achievement_response, server_response), RC_OK);
|
|
421
|
+
ASSERT_NUM_EQUALS(update_achievement_response.response.succeeded, 0);
|
|
422
|
+
ASSERT_STR_EQUALS(update_achievement_response.response.error_message, "Credentials invalid (0)");
|
|
423
|
+
ASSERT_UNUM_EQUALS(update_achievement_response.achievement_id, 0);
|
|
424
|
+
|
|
425
|
+
rc_api_destroy_update_achievement_response(&update_achievement_response);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
static void test_init_update_achievement_response_invalid_perms()
|
|
429
|
+
{
|
|
430
|
+
rc_api_update_achievement_response_t update_achievement_response;
|
|
431
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"You must be a developer to perform this action! Please drop a message in the forums to apply.\"}";
|
|
432
|
+
memset(&update_achievement_response, 0, sizeof(update_achievement_response));
|
|
433
|
+
|
|
434
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_achievement_response(&update_achievement_response, server_response), RC_OK);
|
|
435
|
+
ASSERT_NUM_EQUALS(update_achievement_response.response.succeeded, 0);
|
|
436
|
+
ASSERT_STR_EQUALS(update_achievement_response.response.error_message, "You must be a developer to perform this action! Please drop a message in the forums to apply.");
|
|
437
|
+
ASSERT_UNUM_EQUALS(update_achievement_response.achievement_id, 0);
|
|
438
|
+
|
|
439
|
+
rc_api_destroy_update_achievement_response(&update_achievement_response);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
static void test_init_update_leaderboard_request()
|
|
443
|
+
{
|
|
444
|
+
rc_api_update_leaderboard_request_t update_leaderboard_request;
|
|
445
|
+
rc_api_request_t request;
|
|
446
|
+
|
|
447
|
+
memset(&update_leaderboard_request, 0, sizeof(update_leaderboard_request));
|
|
448
|
+
update_leaderboard_request.username = "Dev";
|
|
449
|
+
update_leaderboard_request.api_token = "API_TOKEN";
|
|
450
|
+
update_leaderboard_request.game_id = 1234;
|
|
451
|
+
update_leaderboard_request.leaderboard_id = 5555;
|
|
452
|
+
update_leaderboard_request.title = "Title";
|
|
453
|
+
update_leaderboard_request.description = "Description";
|
|
454
|
+
update_leaderboard_request.start_trigger = "0xH1234=1";
|
|
455
|
+
update_leaderboard_request.submit_trigger = "0xH1234=2";
|
|
456
|
+
update_leaderboard_request.cancel_trigger = "0xH1234=3";
|
|
457
|
+
update_leaderboard_request.value_definition = "0xH2345";
|
|
458
|
+
update_leaderboard_request.lower_is_better = 1;
|
|
459
|
+
update_leaderboard_request.format = "SCORE";
|
|
460
|
+
|
|
461
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_leaderboard_request(&request, &update_leaderboard_request), RC_OK);
|
|
462
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
463
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadleaderboard&u=Dev&t=API_TOKEN&i=5555&g=1234&n=Title&d=Description&s=0xH1234%3d1&b=0xH1234%3d2&c=0xH1234%3d3&l=0xH2345&w=1&f=SCORE&h=bbdb85cb1eb82773d5740c2d5d515ec0");
|
|
464
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
465
|
+
|
|
466
|
+
rc_api_destroy_request(&request);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
static void test_init_update_leaderboard_request_new()
|
|
470
|
+
{
|
|
471
|
+
rc_api_update_leaderboard_request_t update_leaderboard_request;
|
|
472
|
+
rc_api_request_t request;
|
|
473
|
+
|
|
474
|
+
memset(&update_leaderboard_request, 0, sizeof(update_leaderboard_request));
|
|
475
|
+
update_leaderboard_request.username = "Dev";
|
|
476
|
+
update_leaderboard_request.api_token = "API_TOKEN";
|
|
477
|
+
update_leaderboard_request.game_id = 1234;
|
|
478
|
+
update_leaderboard_request.title = "Title";
|
|
479
|
+
update_leaderboard_request.description = "Description";
|
|
480
|
+
update_leaderboard_request.start_trigger = "0xH1234=1";
|
|
481
|
+
update_leaderboard_request.submit_trigger = "0xH1234=2";
|
|
482
|
+
update_leaderboard_request.cancel_trigger = "0xH1234=3";
|
|
483
|
+
update_leaderboard_request.value_definition = "0xH2345";
|
|
484
|
+
update_leaderboard_request.lower_is_better = 1;
|
|
485
|
+
update_leaderboard_request.format = "SCORE";
|
|
486
|
+
|
|
487
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_leaderboard_request(&request, &update_leaderboard_request), RC_OK);
|
|
488
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
489
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadleaderboard&u=Dev&t=API_TOKEN&g=1234&n=Title&d=Description&s=0xH1234%3d1&b=0xH1234%3d2&c=0xH1234%3d3&l=0xH2345&w=1&f=SCORE&h=739e28608a9e93d7351103d2f43fc6dc");
|
|
490
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
491
|
+
|
|
492
|
+
rc_api_destroy_request(&request);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
static void test_init_update_leaderboard_request_no_game_id()
|
|
496
|
+
{
|
|
497
|
+
rc_api_update_leaderboard_request_t update_leaderboard_request;
|
|
498
|
+
rc_api_request_t request;
|
|
499
|
+
|
|
500
|
+
memset(&update_leaderboard_request, 0, sizeof(update_leaderboard_request));
|
|
501
|
+
update_leaderboard_request.username = "Dev";
|
|
502
|
+
update_leaderboard_request.api_token = "API_TOKEN";
|
|
503
|
+
update_leaderboard_request.title = "Title";
|
|
504
|
+
update_leaderboard_request.description = "Description";
|
|
505
|
+
update_leaderboard_request.start_trigger = "0xH1234=1";
|
|
506
|
+
update_leaderboard_request.submit_trigger = "0xH1234=2";
|
|
507
|
+
update_leaderboard_request.cancel_trigger = "0xH1234=3";
|
|
508
|
+
update_leaderboard_request.value_definition = "0xH2345";
|
|
509
|
+
update_leaderboard_request.lower_is_better = 1;
|
|
510
|
+
update_leaderboard_request.format = "SCORE";
|
|
511
|
+
|
|
512
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_leaderboard_request(&request, &update_leaderboard_request), RC_INVALID_STATE);
|
|
513
|
+
|
|
514
|
+
rc_api_destroy_request(&request);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
static void test_init_update_leaderboard_request_no_description()
|
|
518
|
+
{
|
|
519
|
+
rc_api_update_leaderboard_request_t update_leaderboard_request;
|
|
520
|
+
rc_api_request_t request;
|
|
521
|
+
|
|
522
|
+
memset(&update_leaderboard_request, 0, sizeof(update_leaderboard_request));
|
|
523
|
+
update_leaderboard_request.username = "Dev";
|
|
524
|
+
update_leaderboard_request.api_token = "API_TOKEN";
|
|
525
|
+
update_leaderboard_request.game_id = 1234;
|
|
526
|
+
update_leaderboard_request.leaderboard_id = 5555;
|
|
527
|
+
update_leaderboard_request.title = "Title";
|
|
528
|
+
update_leaderboard_request.description = "";
|
|
529
|
+
update_leaderboard_request.start_trigger = "0xH1234=1";
|
|
530
|
+
update_leaderboard_request.submit_trigger = "0xH1234=2";
|
|
531
|
+
update_leaderboard_request.cancel_trigger = "0xH1234=3";
|
|
532
|
+
update_leaderboard_request.value_definition = "0xH2345";
|
|
533
|
+
update_leaderboard_request.lower_is_better = 1;
|
|
534
|
+
update_leaderboard_request.format = "SCORE";
|
|
535
|
+
|
|
536
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_leaderboard_request(&request, &update_leaderboard_request), RC_OK);
|
|
537
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
538
|
+
ASSERT_STR_EQUALS(request.post_data, "r=uploadleaderboard&u=Dev&t=API_TOKEN&i=5555&g=1234&n=Title&d=&s=0xH1234%3d1&b=0xH1234%3d2&c=0xH1234%3d3&l=0xH2345&w=1&f=SCORE&h=bbdb85cb1eb82773d5740c2d5d515ec0");
|
|
539
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
540
|
+
|
|
541
|
+
rc_api_destroy_request(&request);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
static void test_init_update_leaderboard_response()
|
|
545
|
+
{
|
|
546
|
+
rc_api_update_leaderboard_response_t update_leaderboard_response;
|
|
547
|
+
const char* server_response = "{\"Success\":true,\"LeaderboardID\":1234}";
|
|
548
|
+
memset(&update_leaderboard_response, 0, sizeof(update_leaderboard_response));
|
|
549
|
+
|
|
550
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_leaderboard_response(&update_leaderboard_response, server_response), RC_OK);
|
|
551
|
+
ASSERT_NUM_EQUALS(update_leaderboard_response.response.succeeded, 1);
|
|
552
|
+
ASSERT_PTR_NULL(update_leaderboard_response.response.error_message);
|
|
553
|
+
ASSERT_UNUM_EQUALS(update_leaderboard_response.leaderboard_id, 1234);
|
|
554
|
+
|
|
555
|
+
rc_api_destroy_update_leaderboard_response(&update_leaderboard_response);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
static void test_init_update_leaderboard_response_invalid_credentials()
|
|
559
|
+
{
|
|
560
|
+
rc_api_update_leaderboard_response_t update_leaderboard_response;
|
|
561
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Credentials invalid (0)\"}";
|
|
562
|
+
memset(&update_leaderboard_response, 0, sizeof(update_leaderboard_response));
|
|
563
|
+
|
|
564
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_leaderboard_response(&update_leaderboard_response, server_response), RC_OK);
|
|
565
|
+
ASSERT_NUM_EQUALS(update_leaderboard_response.response.succeeded, 0);
|
|
566
|
+
ASSERT_STR_EQUALS(update_leaderboard_response.response.error_message, "Credentials invalid (0)");
|
|
567
|
+
ASSERT_UNUM_EQUALS(update_leaderboard_response.leaderboard_id, 0);
|
|
568
|
+
|
|
569
|
+
rc_api_destroy_update_leaderboard_response(&update_leaderboard_response);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
static void test_init_update_leaderboard_response_invalid_perms()
|
|
573
|
+
{
|
|
574
|
+
rc_api_update_leaderboard_response_t update_leaderboard_response;
|
|
575
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"You must be a developer to perform this action! Please drop a message in the forums to apply.\"}";
|
|
576
|
+
memset(&update_leaderboard_response, 0, sizeof(update_leaderboard_response));
|
|
577
|
+
|
|
578
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_leaderboard_response(&update_leaderboard_response, server_response), RC_OK);
|
|
579
|
+
ASSERT_NUM_EQUALS(update_leaderboard_response.response.succeeded, 0);
|
|
580
|
+
ASSERT_STR_EQUALS(update_leaderboard_response.response.error_message, "You must be a developer to perform this action! Please drop a message in the forums to apply.");
|
|
581
|
+
ASSERT_UNUM_EQUALS(update_leaderboard_response.leaderboard_id, 0);
|
|
582
|
+
|
|
583
|
+
rc_api_destroy_update_leaderboard_response(&update_leaderboard_response);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
static void test_init_update_rich_presence_request()
|
|
587
|
+
{
|
|
588
|
+
rc_api_update_rich_presence_request_t update_rich_presence_request;
|
|
589
|
+
rc_api_request_t request;
|
|
590
|
+
|
|
591
|
+
memset(&update_rich_presence_request, 0, sizeof(update_rich_presence_request));
|
|
592
|
+
update_rich_presence_request.username = "Dev";
|
|
593
|
+
update_rich_presence_request.api_token = "API_TOKEN";
|
|
594
|
+
update_rich_presence_request.game_id = 1234;
|
|
595
|
+
update_rich_presence_request.script = "Display:\nThis is a test.";
|
|
596
|
+
|
|
597
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_rich_presence_request(&request, &update_rich_presence_request), RC_OK);
|
|
598
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
599
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitrichpresence&u=Dev&t=API_TOKEN&g=1234&d=Display%3a%0aThis+is+a+test.");
|
|
600
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
601
|
+
|
|
602
|
+
rc_api_destroy_request(&request);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
static void test_init_update_rich_presence_request_no_game_id()
|
|
606
|
+
{
|
|
607
|
+
rc_api_update_rich_presence_request_t update_rich_presence_request;
|
|
608
|
+
rc_api_request_t request;
|
|
609
|
+
|
|
610
|
+
memset(&update_rich_presence_request, 0, sizeof(update_rich_presence_request));
|
|
611
|
+
update_rich_presence_request.username = "Dev";
|
|
612
|
+
update_rich_presence_request.api_token = "API_TOKEN";
|
|
613
|
+
update_rich_presence_request.script = "Display:\nThis is a test.";
|
|
614
|
+
|
|
615
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_rich_presence_request(&request, &update_rich_presence_request), RC_INVALID_STATE);
|
|
616
|
+
|
|
617
|
+
rc_api_destroy_request(&request);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
static void test_init_update_rich_presence_request_no_script()
|
|
621
|
+
{
|
|
622
|
+
rc_api_update_rich_presence_request_t update_rich_presence_request;
|
|
623
|
+
rc_api_request_t request;
|
|
624
|
+
|
|
625
|
+
memset(&update_rich_presence_request, 0, sizeof(update_rich_presence_request));
|
|
626
|
+
update_rich_presence_request.username = "Dev";
|
|
627
|
+
update_rich_presence_request.api_token = "API_TOKEN";
|
|
628
|
+
update_rich_presence_request.game_id = 1234;
|
|
629
|
+
|
|
630
|
+
ASSERT_NUM_EQUALS(rc_api_init_update_rich_presence_request(&request, &update_rich_presence_request), RC_INVALID_STATE);
|
|
631
|
+
|
|
632
|
+
rc_api_destroy_request(&request);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
static void test_init_update_rich_presence_response()
|
|
636
|
+
{
|
|
637
|
+
rc_api_server_response_t response_obj;
|
|
638
|
+
rc_api_update_rich_presence_response_t update_rich_presence_response;
|
|
639
|
+
const char* server_response = "{\"Success\":true}";
|
|
640
|
+
memset(&update_rich_presence_response, 0, sizeof(update_rich_presence_response));
|
|
641
|
+
|
|
642
|
+
memset(&response_obj, 0, sizeof(response_obj));
|
|
643
|
+
response_obj.body = server_response;
|
|
644
|
+
response_obj.body_length = strlen(server_response);
|
|
645
|
+
|
|
646
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_rich_presence_server_response(&update_rich_presence_response, &response_obj), RC_OK);
|
|
647
|
+
ASSERT_NUM_EQUALS(update_rich_presence_response.response.succeeded, 1);
|
|
648
|
+
ASSERT_PTR_NULL(update_rich_presence_response.response.error_message);
|
|
649
|
+
|
|
650
|
+
rc_api_destroy_update_rich_presence_response(&update_rich_presence_response);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
static void test_init_update_rich_presence_response_invalid_credentials()
|
|
654
|
+
{
|
|
655
|
+
rc_api_server_response_t response_obj;
|
|
656
|
+
rc_api_update_rich_presence_response_t update_rich_presence_response;
|
|
657
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Invalid user/token combination.\",\"Code\":\"invalid_credentials\",\"Status\":401}";
|
|
658
|
+
memset(&update_rich_presence_response, 0, sizeof(update_rich_presence_response));
|
|
659
|
+
|
|
660
|
+
memset(&response_obj, 0, sizeof(response_obj));
|
|
661
|
+
response_obj.body = server_response;
|
|
662
|
+
response_obj.body_length = strlen(server_response);
|
|
663
|
+
|
|
664
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_rich_presence_server_response(&update_rich_presence_response, &response_obj), RC_INVALID_CREDENTIALS);
|
|
665
|
+
ASSERT_NUM_EQUALS(update_rich_presence_response.response.succeeded, 0);
|
|
666
|
+
ASSERT_STR_EQUALS(update_rich_presence_response.response.error_message, "Invalid user/token combination.");
|
|
667
|
+
|
|
668
|
+
rc_api_destroy_update_rich_presence_response(&update_rich_presence_response);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
static void test_init_update_rich_presence_response_invalid_perms()
|
|
672
|
+
{
|
|
673
|
+
rc_api_server_response_t response_obj;
|
|
674
|
+
rc_api_update_rich_presence_response_t update_rich_presence_response;
|
|
675
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Access denied.\",\"Code\":\"access_denied\",\"Status\":400}";
|
|
676
|
+
memset(&update_rich_presence_response, 0, sizeof(update_rich_presence_response));
|
|
677
|
+
|
|
678
|
+
memset(&response_obj, 0, sizeof(response_obj));
|
|
679
|
+
response_obj.body = server_response;
|
|
680
|
+
response_obj.body_length = strlen(server_response);
|
|
681
|
+
|
|
682
|
+
ASSERT_NUM_EQUALS(rc_api_process_update_rich_presence_server_response(&update_rich_presence_response, &response_obj), RC_ACCESS_DENIED);
|
|
683
|
+
ASSERT_NUM_EQUALS(update_rich_presence_response.response.succeeded, 0);
|
|
684
|
+
ASSERT_STR_EQUALS(update_rich_presence_response.response.error_message, "Access denied.");
|
|
685
|
+
|
|
686
|
+
rc_api_destroy_update_rich_presence_response(&update_rich_presence_response);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
static void test_init_fetch_badge_range_request()
|
|
690
|
+
{
|
|
691
|
+
rc_api_fetch_badge_range_request_t fetch_badge_range_request;
|
|
692
|
+
rc_api_request_t request;
|
|
693
|
+
|
|
694
|
+
memset(&fetch_badge_range_request, 0, sizeof(fetch_badge_range_request));
|
|
695
|
+
|
|
696
|
+
ASSERT_NUM_EQUALS(rc_api_init_fetch_badge_range_request(&request, &fetch_badge_range_request), RC_OK);
|
|
697
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
698
|
+
ASSERT_STR_EQUALS(request.post_data, "r=badgeiter");
|
|
699
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
700
|
+
|
|
701
|
+
rc_api_destroy_request(&request);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
static void test_init_fetch_badge_range_response()
|
|
705
|
+
{
|
|
706
|
+
rc_api_fetch_badge_range_response_t fetch_badge_range_response;
|
|
707
|
+
const char* server_response = "{\"Success\":true,\"FirstBadge\":12,\"NextBadge\":123456}";
|
|
708
|
+
memset(&fetch_badge_range_response, 0, sizeof(fetch_badge_range_response));
|
|
709
|
+
|
|
710
|
+
ASSERT_NUM_EQUALS(rc_api_process_fetch_badge_range_response(&fetch_badge_range_response, server_response), RC_OK);
|
|
711
|
+
ASSERT_NUM_EQUALS(fetch_badge_range_response.response.succeeded, 1);
|
|
712
|
+
ASSERT_PTR_NULL(fetch_badge_range_response.response.error_message);
|
|
713
|
+
ASSERT_UNUM_EQUALS(fetch_badge_range_response.first_badge_id, 12);
|
|
714
|
+
ASSERT_UNUM_EQUALS(fetch_badge_range_response.next_badge_id, 123456);
|
|
715
|
+
|
|
716
|
+
rc_api_destroy_fetch_badge_range_response(&fetch_badge_range_response);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
static void test_init_add_game_hash_request()
|
|
720
|
+
{
|
|
721
|
+
rc_api_add_game_hash_request_t add_game_hash_request;
|
|
722
|
+
rc_api_request_t request;
|
|
723
|
+
|
|
724
|
+
memset(&add_game_hash_request, 0, sizeof(add_game_hash_request));
|
|
725
|
+
add_game_hash_request.username = "Dev";
|
|
726
|
+
add_game_hash_request.api_token = "API_TOKEN";
|
|
727
|
+
add_game_hash_request.console_id = RC_CONSOLE_NINTENDO;
|
|
728
|
+
add_game_hash_request.game_id = 1234;
|
|
729
|
+
add_game_hash_request.title = "Game Name";
|
|
730
|
+
add_game_hash_request.hash = "NEW_HASH";
|
|
731
|
+
add_game_hash_request.hash_description = "Game Name [No Intro].nes";
|
|
732
|
+
|
|
733
|
+
ASSERT_NUM_EQUALS(rc_api_init_add_game_hash_request(&request, &add_game_hash_request), RC_OK);
|
|
734
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
735
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitgametitle&u=Dev&t=API_TOKEN&c=7&m=NEW_HASH&i=Game+Name&g=1234&d=Game+Name+%5bNo+Intro%5d.nes");
|
|
736
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
737
|
+
|
|
738
|
+
rc_api_destroy_request(&request);
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
static void test_init_add_game_hash_request_no_game_id()
|
|
742
|
+
{
|
|
743
|
+
rc_api_add_game_hash_request_t add_game_hash_request;
|
|
744
|
+
rc_api_request_t request;
|
|
745
|
+
|
|
746
|
+
memset(&add_game_hash_request, 0, sizeof(add_game_hash_request));
|
|
747
|
+
add_game_hash_request.username = "Dev";
|
|
748
|
+
add_game_hash_request.api_token = "API_TOKEN";
|
|
749
|
+
add_game_hash_request.console_id = RC_CONSOLE_NINTENDO;
|
|
750
|
+
add_game_hash_request.title = "Game Name";
|
|
751
|
+
add_game_hash_request.hash = "NEW_HASH";
|
|
752
|
+
add_game_hash_request.hash_description = "Game Name [No Intro].nes";
|
|
753
|
+
|
|
754
|
+
ASSERT_NUM_EQUALS(rc_api_init_add_game_hash_request(&request, &add_game_hash_request), RC_OK);
|
|
755
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
756
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitgametitle&u=Dev&t=API_TOKEN&c=7&m=NEW_HASH&i=Game+Name&d=Game+Name+%5bNo+Intro%5d.nes");
|
|
757
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
758
|
+
|
|
759
|
+
rc_api_destroy_request(&request);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
static void test_init_add_game_hash_request_no_console_id()
|
|
763
|
+
{
|
|
764
|
+
rc_api_add_game_hash_request_t add_game_hash_request;
|
|
765
|
+
rc_api_request_t request;
|
|
766
|
+
|
|
767
|
+
memset(&add_game_hash_request, 0, sizeof(add_game_hash_request));
|
|
768
|
+
add_game_hash_request.username = "Dev";
|
|
769
|
+
add_game_hash_request.api_token = "API_TOKEN";
|
|
770
|
+
add_game_hash_request.game_id = 1234;
|
|
771
|
+
add_game_hash_request.title = "Game Name";
|
|
772
|
+
add_game_hash_request.hash = "NEW_HASH";
|
|
773
|
+
add_game_hash_request.hash_description = "Game Name [No Intro].nes";
|
|
774
|
+
|
|
775
|
+
ASSERT_NUM_EQUALS(rc_api_init_add_game_hash_request(&request, &add_game_hash_request), RC_INVALID_STATE);
|
|
776
|
+
|
|
777
|
+
rc_api_destroy_request(&request);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
static void test_init_add_game_hash_request_no_title()
|
|
781
|
+
{
|
|
782
|
+
rc_api_add_game_hash_request_t add_game_hash_request;
|
|
783
|
+
rc_api_request_t request;
|
|
784
|
+
|
|
785
|
+
memset(&add_game_hash_request, 0, sizeof(add_game_hash_request));
|
|
786
|
+
add_game_hash_request.username = "Dev";
|
|
787
|
+
add_game_hash_request.api_token = "API_TOKEN";
|
|
788
|
+
add_game_hash_request.console_id = RC_CONSOLE_NINTENDO;
|
|
789
|
+
add_game_hash_request.game_id = 1234;
|
|
790
|
+
add_game_hash_request.hash = "NEW_HASH";
|
|
791
|
+
add_game_hash_request.hash_description = "Game Name [No Intro].nes";
|
|
792
|
+
|
|
793
|
+
/* title is not required when a game id is provided (at least at the client
|
|
794
|
+
* level - the server will generate an error, but that could change) */
|
|
795
|
+
ASSERT_NUM_EQUALS(rc_api_init_add_game_hash_request(&request, &add_game_hash_request), RC_OK);
|
|
796
|
+
ASSERT_STR_EQUALS(request.url, DOREQUEST_URL);
|
|
797
|
+
ASSERT_STR_EQUALS(request.post_data, "r=submitgametitle&u=Dev&t=API_TOKEN&c=7&m=NEW_HASH&g=1234&d=Game+Name+%5bNo+Intro%5d.nes");
|
|
798
|
+
ASSERT_STR_EQUALS(request.content_type, RC_CONTENT_TYPE_URLENCODED);
|
|
799
|
+
|
|
800
|
+
rc_api_destroy_request(&request);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
static void test_init_add_game_hash_request_no_title_or_game_id()
|
|
804
|
+
{
|
|
805
|
+
rc_api_add_game_hash_request_t add_game_hash_request;
|
|
806
|
+
rc_api_request_t request;
|
|
807
|
+
|
|
808
|
+
memset(&add_game_hash_request, 0, sizeof(add_game_hash_request));
|
|
809
|
+
add_game_hash_request.username = "Dev";
|
|
810
|
+
add_game_hash_request.api_token = "API_TOKEN";
|
|
811
|
+
add_game_hash_request.console_id = RC_CONSOLE_NINTENDO;
|
|
812
|
+
add_game_hash_request.hash = "NEW_HASH";
|
|
813
|
+
add_game_hash_request.hash_description = "Game Name [No Intro].nes";
|
|
814
|
+
|
|
815
|
+
ASSERT_NUM_EQUALS(rc_api_init_add_game_hash_request(&request, &add_game_hash_request), RC_INVALID_STATE);
|
|
816
|
+
|
|
817
|
+
rc_api_destroy_request(&request);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
static void test_init_add_game_hash_response()
|
|
821
|
+
{
|
|
822
|
+
rc_api_add_game_hash_response_t add_game_hash_response;
|
|
823
|
+
const char* server_response = "{\"Success\":true,\"Response\":{\"GameID\":1234}}";
|
|
824
|
+
memset(&add_game_hash_response, 0, sizeof(add_game_hash_response));
|
|
825
|
+
|
|
826
|
+
ASSERT_NUM_EQUALS(rc_api_process_add_game_hash_response(&add_game_hash_response, server_response), RC_OK);
|
|
827
|
+
ASSERT_NUM_EQUALS(add_game_hash_response.response.succeeded, 1);
|
|
828
|
+
ASSERT_PTR_NULL(add_game_hash_response.response.error_message);
|
|
829
|
+
ASSERT_UNUM_EQUALS(add_game_hash_response.game_id, 1234);
|
|
830
|
+
|
|
831
|
+
rc_api_destroy_add_game_hash_response(&add_game_hash_response);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
static void test_init_add_game_hash_response_error()
|
|
835
|
+
{
|
|
836
|
+
rc_api_add_game_hash_response_t add_game_hash_response;
|
|
837
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"The ROM you are trying to load is not in the database.\"}";
|
|
838
|
+
memset(&add_game_hash_response, 0, sizeof(add_game_hash_response));
|
|
839
|
+
|
|
840
|
+
ASSERT_NUM_EQUALS(rc_api_process_add_game_hash_response(&add_game_hash_response, server_response), RC_OK);
|
|
841
|
+
ASSERT_NUM_EQUALS(add_game_hash_response.response.succeeded, 0);
|
|
842
|
+
ASSERT_STR_EQUALS(add_game_hash_response.response.error_message, "The ROM you are trying to load is not in the database.");
|
|
843
|
+
ASSERT_UNUM_EQUALS(add_game_hash_response.game_id, 0);
|
|
844
|
+
|
|
845
|
+
rc_api_destroy_add_game_hash_response(&add_game_hash_response);
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
static void test_init_add_game_hash_response_invalid_credentials()
|
|
849
|
+
{
|
|
850
|
+
rc_api_add_game_hash_response_t add_game_hash_response;
|
|
851
|
+
const char* server_response = "{\"Success\":false,\"Error\":\"Credentials invalid (0)\"}";
|
|
852
|
+
memset(&add_game_hash_response, 0, sizeof(add_game_hash_response));
|
|
853
|
+
|
|
854
|
+
ASSERT_NUM_EQUALS(rc_api_process_add_game_hash_response(&add_game_hash_response, server_response), RC_OK);
|
|
855
|
+
ASSERT_NUM_EQUALS(add_game_hash_response.response.succeeded, 0);
|
|
856
|
+
ASSERT_STR_EQUALS(add_game_hash_response.response.error_message, "Credentials invalid (0)");
|
|
857
|
+
ASSERT_UNUM_EQUALS(add_game_hash_response.game_id, 0);
|
|
858
|
+
|
|
859
|
+
rc_api_destroy_add_game_hash_response(&add_game_hash_response);
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
void test_rapi_editor(void) {
|
|
863
|
+
TEST_SUITE_BEGIN();
|
|
864
|
+
|
|
865
|
+
/* fetch code notes */
|
|
866
|
+
TEST(test_init_fetch_code_notes_request);
|
|
867
|
+
TEST(test_init_fetch_code_notes_request_no_game_id);
|
|
868
|
+
|
|
869
|
+
TEST(test_init_fetch_code_notes_response_empty_array);
|
|
870
|
+
TEST(test_init_fetch_code_notes_response_one_item);
|
|
871
|
+
TEST(test_init_fetch_code_notes_response_several_items);
|
|
872
|
+
TEST(test_init_fetch_code_notes_response_deleted_items);
|
|
873
|
+
TEST(test_init_fetch_code_notes_response_null_user);
|
|
874
|
+
TEST(test_init_fetch_code_notes_response_unsigned);
|
|
875
|
+
|
|
876
|
+
/* update code note */
|
|
877
|
+
TEST(test_init_update_code_note_request);
|
|
878
|
+
TEST(test_init_update_code_note_request_no_game_id);
|
|
879
|
+
TEST(test_init_update_code_note_request_no_note);
|
|
880
|
+
TEST(test_init_update_code_note_request_empty_note);
|
|
881
|
+
|
|
882
|
+
TEST(test_init_update_code_note_response);
|
|
883
|
+
TEST(test_init_update_code_note_response_invalid_credentials);
|
|
884
|
+
|
|
885
|
+
/* update achievement */
|
|
886
|
+
TEST(test_init_update_achievement_request);
|
|
887
|
+
TEST(test_init_update_achievement_request_new);
|
|
888
|
+
TEST(test_init_update_achievement_request_no_game_id);
|
|
889
|
+
TEST(test_init_update_achievement_request_type);
|
|
890
|
+
|
|
891
|
+
TEST(test_init_update_achievement_response);
|
|
892
|
+
TEST(test_init_update_achievement_response_invalid_credentials);
|
|
893
|
+
TEST(test_init_update_achievement_response_invalid_perms);
|
|
894
|
+
|
|
895
|
+
/* update leaderboard */
|
|
896
|
+
TEST(test_init_update_leaderboard_request);
|
|
897
|
+
TEST(test_init_update_leaderboard_request_new);
|
|
898
|
+
TEST(test_init_update_leaderboard_request_no_game_id);
|
|
899
|
+
TEST(test_init_update_leaderboard_request_no_description);
|
|
900
|
+
|
|
901
|
+
TEST(test_init_update_leaderboard_response);
|
|
902
|
+
TEST(test_init_update_leaderboard_response_invalid_credentials);
|
|
903
|
+
TEST(test_init_update_leaderboard_response_invalid_perms);
|
|
904
|
+
|
|
905
|
+
/* update rich presence */
|
|
906
|
+
TEST(test_init_update_rich_presence_request);
|
|
907
|
+
TEST(test_init_update_rich_presence_request_no_game_id);
|
|
908
|
+
TEST(test_init_update_rich_presence_request_no_script);
|
|
909
|
+
|
|
910
|
+
TEST(test_init_update_rich_presence_response);
|
|
911
|
+
TEST(test_init_update_rich_presence_response_invalid_credentials);
|
|
912
|
+
TEST(test_init_update_rich_presence_response_invalid_perms);
|
|
913
|
+
|
|
914
|
+
/* fetch badge range */
|
|
915
|
+
TEST(test_init_fetch_badge_range_request);
|
|
916
|
+
|
|
917
|
+
TEST(test_init_fetch_badge_range_response);
|
|
918
|
+
|
|
919
|
+
/* add game hash */
|
|
920
|
+
TEST(test_init_add_game_hash_request);
|
|
921
|
+
TEST(test_init_add_game_hash_request_no_game_id);
|
|
922
|
+
TEST(test_init_add_game_hash_request_no_console_id);
|
|
923
|
+
TEST(test_init_add_game_hash_request_no_title);
|
|
924
|
+
TEST(test_init_add_game_hash_request_no_title_or_game_id);
|
|
925
|
+
|
|
926
|
+
TEST(test_init_add_game_hash_response);
|
|
927
|
+
TEST(test_init_add_game_hash_response_error);
|
|
928
|
+
TEST(test_init_add_game_hash_response_invalid_credentials);
|
|
929
|
+
|
|
930
|
+
TEST_SUITE_END();
|
|
931
|
+
}
|