- {{ $t('config.dd_resolution_option_manual_desc') }}
+ {{ $t('config.dd_manual_resolution') }}
@@ -115,7 +115,7 @@ function addRemappingEntry() {
- {{ $t('config.dd_refresh_rate_option_manual_desc') }}
+ {{ $t('config.dd_manual_refresh_rate') }}
diff --git a/src_assets/common/assets/web/public/assets/locale/en.json b/src_assets/common/assets/web/public/assets/locale/en.json
index ab3907c1..494b5734 100644
--- a/src_assets/common/assets/web/public/assets/locale/en.json
+++ b/src_assets/common/assets/web/public/assets/locale/en.json
@@ -155,7 +155,7 @@
"dd_config_ensure_active": "Activate the display automatically",
"dd_config_ensure_only_display": "Deactivate other displays and activate only the specified display",
"dd_config_ensure_primary": "Activate the display automatically and make it a primary display",
- "dd_config_label": "Device configuration",
+ "dd_configuration_option": "Device configuration",
"dd_config_revert_delay": "Config revert delay",
"dd_config_revert_delay_desc": "Additional delay in milliseconds to wait before reverting configuration when the app has been closed or the last session terminated. Main purpose is to provide a smoother transition when quickly switching between apps.",
"dd_config_revert_on_disconnect": "Config revert on disconnect",
@@ -164,6 +164,8 @@
"dd_hdr_option": "HDR",
"dd_hdr_option_auto": "Switch on/off the HDR mode as requested by the client (default)",
"dd_hdr_option_disabled": "Do not change HDR settings",
+ "dd_manual_refresh_rate": "Manual refresh rate",
+ "dd_manual_resolution": "Manual resolution",
"dd_mode_remapping": "Display mode remapping",
"dd_mode_remapping_add": "Add remapping entry",
"dd_mode_remapping_desc_1": "Specify remapping entries to change the requested resolution and/or refresh rate to other values.",
@@ -182,12 +184,10 @@
"dd_refresh_rate_option_auto": "Use FPS value provided by the client (default)",
"dd_refresh_rate_option_disabled": "Do not change refresh rate",
"dd_refresh_rate_option_manual": "Use manually entered refresh rate",
- "dd_refresh_rate_option_manual_desc": "Enter the refresh rate to be used",
"dd_resolution_option": "Resolution",
"dd_resolution_option_auto": "Use resolution provided by the client (default)",
"dd_resolution_option_disabled": "Do not change resolution",
"dd_resolution_option_manual": "Use manually entered resolution",
- "dd_resolution_option_manual_desc": "Enter the resolution to be used",
"dd_resolution_option_ogs_desc": "\"Optimize game settings\" option must be enabled on the Moonlight client for this to work.",
"dd_wa_hdr_toggle_delay_desc_1": "When using virtual display device (VDD) for streaming, it might incorrectly display HDR color. Sunshine can try to mitigate this issue, by turning HDR off and then on again.",
"dd_wa_hdr_toggle_delay_desc_2": "If the value is set to 0, the workaround is disabled (default). If the value is between 0 and 3000 milliseconds, Sunshine will turn off HDR, wait for the specified amount of time and then turn HDR on again. The recommended delay time is around 500 milliseconds in most cases.",
@@ -238,6 +238,7 @@
"key_repeat_frequency_desc": "How often keys repeat every second. This configurable option supports decimals.",
"key_rightalt_to_key_win": "Map Right Alt key to Windows key",
"key_rightalt_to_key_win_desc": "It may be possible that you cannot send the Windows Key from Moonlight directly. In those cases it may be useful to make Sunshine think the Right Alt key is the Windows key",
+ "keybindings": "Keybindings",
"keyboard": "Enable Keyboard Input",
"keyboard_desc": "Allows guests to control the host system with the keyboard",
"lan_encryption_mode": "LAN Encryption Mode",
@@ -246,21 +247,21 @@
"lan_encryption_mode_desc": "This determines when encryption will be used when streaming over your local network. Encryption can reduce streaming performance, particularly on less powerful hosts and clients.",
"locale": "Locale",
"locale_desc": "The locale used for Sunshine's user interface.",
- "log_level": "Log Level",
- "log_level_0": "Verbose",
- "log_level_1": "Debug",
- "log_level_2": "Info",
- "log_level_3": "Warning",
- "log_level_4": "Error",
- "log_level_5": "Fatal",
- "log_level_6": "None",
- "log_level_desc": "The minimum log level printed to standard out",
"log_path": "Logfile Path",
"log_path_desc": "The file where the current logs of Sunshine are stored.",
"max_bitrate": "Maximum Bitrate",
"max_bitrate_desc": "The maximum bitrate (in Kbps) that Sunshine will encode the stream at. If set to 0, it will always use the bitrate requested by Moonlight.",
"minimum_fps_target": "Minimum FPS Target",
"minimum_fps_target_desc": "The lowest effective FPS a stream can reach. A value of 0 is treated as roughly half of the stream's FPS. A setting of 20 is recommended if you stream 24 or 30fps content.",
+ "min_log_level": "Log Level",
+ "min_log_level_0": "Verbose",
+ "min_log_level_1": "Debug",
+ "min_log_level_2": "Info",
+ "min_log_level_3": "Warning",
+ "min_log_level_4": "Error",
+ "min_log_level_5": "Fatal",
+ "min_log_level_6": "None",
+ "min_log_level_desc": "The minimum log level printed to standard out",
"min_threads": "Minimum CPU Thread Count",
"min_threads_desc": "Increasing the value slightly reduces encoding efficiency, but the tradeoff is usually worth it to gain the use of more CPU cores for encoding. The ideal value is the lowest value that can reliably encode at your desired streaming settings on your hardware.",
"misc": "Miscellaneous options",
@@ -298,10 +299,9 @@
"origin_web_ui_allowed_lan": "Only those in LAN may access Web UI",
"origin_web_ui_allowed_pc": "Only localhost may access Web UI",
"origin_web_ui_allowed_wan": "Anyone may access Web UI",
+ "output_name": "Display Id",
"output_name_desc_unix": "During Sunshine startup, you should see the list of detected displays. Note: You need to use the id value inside the parenthesis. Below is an example; the actual output can be found in the Troubleshooting tab.",
"output_name_desc_windows": "Manually specify a display device id to use for capture. If unset, the primary display is captured. Note: If you specified a GPU above, this display must be connected to that GPU. During Sunshine startup, you should see the list of detected displays. Below is an example; the actual output can be found in the Troubleshooting tab.",
- "output_name_unix": "Display number",
- "output_name_windows": "Display Device Id",
"ping_timeout": "Ping Timeout",
"ping_timeout_desc": "How long to wait in milliseconds for data from moonlight before shutting down the stream",
"pkey": "Private Key",
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index b15a53fd..cc4515dd 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -52,6 +52,24 @@ add_executable(${PROJECT_NAME}
${TEST_SOURCES}
${SUNSHINE_SOURCES})
+# Copy files needed for config consistency tests to build directory
+# This ensures both CLI and CLion can access the same files relative to the test executable
+# Using configure_file ensures files are copied when they change between builds
+set(CONFIG_TEST_FILES
+ "src/config.cpp"
+ "src_assets/common/assets/web/config.html"
+ "docs/configuration.md"
+ "src_assets/common/assets/web/public/assets/locale/en.json"
+)
+
+foreach(file ${CONFIG_TEST_FILES})
+ configure_file(
+ "${CMAKE_SOURCE_DIR}/${file}"
+ "${CMAKE_CURRENT_BINARY_DIR}/${file}"
+ COPYONLY
+ )
+endforeach()
+
foreach(dep ${SUNSHINE_TARGET_DEPENDENCIES})
add_dependencies(${PROJECT_NAME} ${dep}) # compile these before sunshine
endforeach()
diff --git a/tests/integration/test_config_consistency.cpp b/tests/integration/test_config_consistency.cpp
new file mode 100644
index 00000000..01e349b0
--- /dev/null
+++ b/tests/integration/test_config_consistency.cpp
@@ -0,0 +1,667 @@
+/**
+ * @file tests/integration/test_config_consistency.cpp
+ * @brief Test configuration consistency across all configuration files
+ */
+#include "../tests_common.h"
+
+// standard includes
+#include
+#include
+#include
+#include