gdlint fixes
This commit is contained in:
@@ -4,7 +4,7 @@ extends SceneTree
|
||||
##
|
||||
## Tests input validation, file I/O, and error handling.
|
||||
|
||||
const TestHelper = preload("res://tests/helpers/TestHelper.gd")
|
||||
const TestHelperClass = preload("res://tests/helpers/TestHelper.gd")
|
||||
|
||||
var settings_manager: Node
|
||||
var original_settings: Dictionary
|
||||
@@ -23,13 +23,13 @@ func _initialize():
|
||||
|
||||
|
||||
func run_tests():
|
||||
TestHelper.print_test_header("SettingsManager")
|
||||
TestHelperClass.print_test_header("SettingsManager")
|
||||
|
||||
# Get reference to SettingsManager
|
||||
settings_manager = root.get_node("SettingsManager")
|
||||
if not settings_manager:
|
||||
TestHelper.assert_true(false, "SettingsManager autoload not found")
|
||||
TestHelper.print_test_footer("SettingsManager")
|
||||
TestHelperClass.assert_true(false, "SettingsManager autoload not found")
|
||||
TestHelperClass.print_test_footer("SettingsManager")
|
||||
return
|
||||
|
||||
# Store original settings for restoration
|
||||
@@ -49,14 +49,14 @@ func run_tests():
|
||||
# Cleanup and restore original state
|
||||
cleanup_tests()
|
||||
|
||||
TestHelper.print_test_footer("SettingsManager")
|
||||
TestHelperClass.print_test_footer("SettingsManager")
|
||||
|
||||
|
||||
func test_basic_functionality():
|
||||
TestHelper.print_step("Basic Functionality")
|
||||
TestHelperClass.print_step("Basic Functionality")
|
||||
|
||||
# Test that SettingsManager has expected properties
|
||||
TestHelper.assert_has_properties(
|
||||
TestHelperClass.assert_has_properties(
|
||||
settings_manager,
|
||||
["settings", "default_settings", "languages_data"],
|
||||
"SettingsManager properties"
|
||||
@@ -66,66 +66,66 @@ func test_basic_functionality():
|
||||
var expected_methods = [
|
||||
"get_setting", "set_setting", "save_settings", "load_settings", "reset_settings_to_defaults"
|
||||
]
|
||||
TestHelper.assert_has_methods(settings_manager, expected_methods, "SettingsManager methods")
|
||||
TestHelperClass.assert_has_methods(settings_manager, expected_methods, "SettingsManager methods")
|
||||
|
||||
# Test default settings structure
|
||||
var expected_defaults = ["master_volume", "music_volume", "sfx_volume", "language"]
|
||||
for key in expected_defaults:
|
||||
TestHelper.assert_has_key(
|
||||
TestHelperClass.assert_has_key(
|
||||
settings_manager.default_settings, key, "Default setting key: " + key
|
||||
)
|
||||
|
||||
# Test getting settings
|
||||
var master_volume = settings_manager.get_setting("master_volume")
|
||||
TestHelper.assert_not_null(master_volume, "Can get master_volume setting")
|
||||
TestHelper.assert_true(master_volume is float, "master_volume is float type")
|
||||
TestHelperClass.assert_not_null(master_volume, "Can get master_volume setting")
|
||||
TestHelperClass.assert_true(master_volume is float, "master_volume is float type")
|
||||
|
||||
|
||||
func test_input_validation_security():
|
||||
TestHelper.print_step("Input Validation Security")
|
||||
TestHelperClass.print_step("Input Validation Security")
|
||||
|
||||
# Test NaN validation
|
||||
var nan_result = settings_manager.set_setting("master_volume", NAN)
|
||||
TestHelper.assert_false(nan_result, "NaN values rejected for volume settings")
|
||||
TestHelperClass.assert_false(nan_result, "NaN values rejected for volume settings")
|
||||
|
||||
# Test Infinity validation
|
||||
var inf_result = settings_manager.set_setting("master_volume", INF)
|
||||
TestHelper.assert_false(inf_result, "Infinity values rejected for volume settings")
|
||||
TestHelperClass.assert_false(inf_result, "Infinity values rejected for volume settings")
|
||||
|
||||
# Test negative infinity validation
|
||||
var neg_inf_result = settings_manager.set_setting("master_volume", -INF)
|
||||
TestHelper.assert_false(neg_inf_result, "Negative infinity values rejected")
|
||||
TestHelperClass.assert_false(neg_inf_result, "Negative infinity values rejected")
|
||||
|
||||
# Test range validation for volumes
|
||||
var negative_volume = settings_manager.set_setting("master_volume", -0.5)
|
||||
TestHelper.assert_false(negative_volume, "Negative volume values rejected")
|
||||
TestHelperClass.assert_false(negative_volume, "Negative volume values rejected")
|
||||
|
||||
var excessive_volume = settings_manager.set_setting("master_volume", 1.5)
|
||||
TestHelper.assert_false(excessive_volume, "Volume values > 1.0 rejected")
|
||||
TestHelperClass.assert_false(excessive_volume, "Volume values > 1.0 rejected")
|
||||
|
||||
# Test valid volume range
|
||||
var valid_volume = settings_manager.set_setting("master_volume", 0.5)
|
||||
TestHelper.assert_true(valid_volume, "Valid volume values accepted")
|
||||
TestHelper.assert_equal(
|
||||
TestHelperClass.assert_true(valid_volume, "Valid volume values accepted")
|
||||
TestHelperClass.assert_equal(
|
||||
0.5, settings_manager.get_setting("master_volume"), "Volume value set correctly"
|
||||
)
|
||||
|
||||
# Test string length validation for language
|
||||
var long_language = "a".repeat(20) # Exceeds MAX_SETTING_STRING_LENGTH
|
||||
var long_lang_result = settings_manager.set_setting("language", long_language)
|
||||
TestHelper.assert_false(long_lang_result, "Excessively long language codes rejected")
|
||||
TestHelperClass.assert_false(long_lang_result, "Excessively long language codes rejected")
|
||||
|
||||
# Test invalid characters in language code
|
||||
var invalid_chars = settings_manager.set_setting("language", "en<script>")
|
||||
TestHelper.assert_false(invalid_chars, "Language codes with invalid characters rejected")
|
||||
TestHelperClass.assert_false(invalid_chars, "Language codes with invalid characters rejected")
|
||||
|
||||
# Test valid language code
|
||||
var valid_lang = settings_manager.set_setting("language", "en")
|
||||
TestHelper.assert_true(valid_lang, "Valid language codes accepted")
|
||||
TestHelperClass.assert_true(valid_lang, "Valid language codes accepted")
|
||||
|
||||
|
||||
func test_file_io_security():
|
||||
TestHelper.print_step("File I/O Security")
|
||||
TestHelperClass.print_step("File I/O Security")
|
||||
|
||||
# Test file size limits by creating oversized config
|
||||
var oversized_config_path = TestHelper.create_temp_file(
|
||||
@@ -135,18 +135,18 @@ func test_file_io_security():
|
||||
|
||||
# Test that normal save/load operations work
|
||||
var save_result = settings_manager.save_settings()
|
||||
TestHelper.assert_true(save_result, "Normal settings save succeeds")
|
||||
TestHelperClass.assert_true(save_result, "Normal settings save succeeds")
|
||||
|
||||
# Test loading with backup scenario
|
||||
settings_manager.load_settings()
|
||||
TestHelper.assert_not_null(settings_manager.settings, "Settings loaded successfully")
|
||||
TestHelperClass.assert_not_null(settings_manager.settings, "Settings loaded successfully")
|
||||
|
||||
# Test that settings file exists after save
|
||||
TestHelper.assert_file_exists("user://settings.cfg", "Settings file created after save")
|
||||
TestHelperClass.assert_file_exists("user://settings.cfg", "Settings file created after save")
|
||||
|
||||
|
||||
func test_json_parsing_security():
|
||||
TestHelper.print_step("JSON Parsing Security")
|
||||
TestHelperClass.print_step("JSON Parsing Security")
|
||||
|
||||
# Create invalid languages.json for testing
|
||||
var invalid_json_path = TestHelper.create_temp_file(
|
||||
@@ -163,101 +163,101 @@ func test_json_parsing_security():
|
||||
|
||||
# Test that SettingsManager handles invalid JSON gracefully
|
||||
# This should fall back to default languages
|
||||
TestHelper.assert_true(
|
||||
TestHelperClass.assert_true(
|
||||
settings_manager.languages_data.has("languages"),
|
||||
"Default languages loaded on JSON parse failure"
|
||||
)
|
||||
|
||||
|
||||
func test_language_validation():
|
||||
TestHelper.print_step("Language Validation")
|
||||
TestHelperClass.print_step("Language Validation")
|
||||
|
||||
# Test supported languages
|
||||
var supported_langs = ["en", "ru"]
|
||||
for lang in supported_langs:
|
||||
var result = settings_manager.set_setting("language", lang)
|
||||
TestHelper.assert_true(result, "Supported language accepted: " + lang)
|
||||
TestHelperClass.assert_true(result, "Supported language accepted: " + lang)
|
||||
|
||||
# Test unsupported language
|
||||
var unsupported_result = settings_manager.set_setting("language", "xyz")
|
||||
TestHelper.assert_false(unsupported_result, "Unsupported language rejected")
|
||||
TestHelperClass.assert_false(unsupported_result, "Unsupported language rejected")
|
||||
|
||||
# Test empty language
|
||||
var empty_result = settings_manager.set_setting("language", "")
|
||||
TestHelper.assert_false(empty_result, "Empty language rejected")
|
||||
TestHelperClass.assert_false(empty_result, "Empty language rejected")
|
||||
|
||||
# Test null language
|
||||
var null_result = settings_manager.set_setting("language", null)
|
||||
TestHelper.assert_false(null_result, "Null language rejected")
|
||||
TestHelperClass.assert_false(null_result, "Null language rejected")
|
||||
|
||||
|
||||
func test_volume_validation():
|
||||
TestHelper.print_step("Volume Validation")
|
||||
TestHelperClass.print_step("Volume Validation")
|
||||
|
||||
var volume_settings = ["master_volume", "music_volume", "sfx_volume"]
|
||||
|
||||
for setting in volume_settings:
|
||||
# Test boundary values
|
||||
TestHelper.assert_true(
|
||||
TestHelperClass.assert_true(
|
||||
settings_manager.set_setting(setting, 0.0), "Volume 0.0 accepted for " + setting
|
||||
)
|
||||
TestHelper.assert_true(
|
||||
TestHelperClass.assert_true(
|
||||
settings_manager.set_setting(setting, 1.0), "Volume 1.0 accepted for " + setting
|
||||
)
|
||||
|
||||
# Test out of range values
|
||||
TestHelper.assert_false(
|
||||
TestHelperClass.assert_false(
|
||||
settings_manager.set_setting(setting, -0.1), "Negative volume rejected for " + setting
|
||||
)
|
||||
TestHelper.assert_false(
|
||||
TestHelperClass.assert_false(
|
||||
settings_manager.set_setting(setting, 1.1), "Volume > 1.0 rejected for " + setting
|
||||
)
|
||||
|
||||
# Test invalid types
|
||||
TestHelper.assert_false(
|
||||
TestHelperClass.assert_false(
|
||||
settings_manager.set_setting(setting, "0.5"), "String volume rejected for " + setting
|
||||
)
|
||||
TestHelper.assert_false(
|
||||
TestHelperClass.assert_false(
|
||||
settings_manager.set_setting(setting, null), "Null volume rejected for " + setting
|
||||
)
|
||||
|
||||
|
||||
func test_error_handling_and_recovery():
|
||||
TestHelper.print_step("Error Handling and Recovery")
|
||||
TestHelperClass.print_step("Error Handling and Recovery")
|
||||
|
||||
# Test unknown setting key
|
||||
var unknown_result = settings_manager.set_setting("unknown_setting", "value")
|
||||
TestHelper.assert_false(unknown_result, "Unknown setting keys rejected")
|
||||
TestHelperClass.assert_false(unknown_result, "Unknown setting keys rejected")
|
||||
|
||||
# Test recovery from corrupted settings
|
||||
# Save current state
|
||||
var current_volume = settings_manager.get_setting("master_volume")
|
||||
var _current_volume = settings_manager.get_setting("master_volume")
|
||||
|
||||
# Reset settings
|
||||
settings_manager.reset_settings_to_defaults()
|
||||
|
||||
# Verify defaults are loaded
|
||||
var default_volume = settings_manager.default_settings["master_volume"]
|
||||
TestHelper.assert_equal(
|
||||
TestHelperClass.assert_equal(
|
||||
default_volume,
|
||||
settings_manager.get_setting("master_volume"),
|
||||
"Reset to defaults works correctly"
|
||||
)
|
||||
|
||||
# Test fallback language loading
|
||||
TestHelper.assert_true(
|
||||
TestHelperClass.assert_true(
|
||||
settings_manager.languages_data.has("languages"), "Fallback languages loaded"
|
||||
)
|
||||
TestHelper.assert_has_key(
|
||||
TestHelperClass.assert_has_key(
|
||||
settings_manager.languages_data["languages"], "en", "English fallback language available"
|
||||
)
|
||||
TestHelper.assert_has_key(
|
||||
TestHelperClass.assert_has_key(
|
||||
settings_manager.languages_data["languages"], "ru", "Russian fallback language available"
|
||||
)
|
||||
|
||||
|
||||
func test_reset_functionality():
|
||||
TestHelper.print_step("Reset Functionality")
|
||||
TestHelperClass.print_step("Reset Functionality")
|
||||
|
||||
# Modify settings
|
||||
settings_manager.set_setting("master_volume", 0.8)
|
||||
@@ -267,43 +267,43 @@ func test_reset_functionality():
|
||||
settings_manager.reset_settings_to_defaults()
|
||||
|
||||
# Verify reset worked
|
||||
TestHelper.assert_equal(
|
||||
TestHelperClass.assert_equal(
|
||||
settings_manager.default_settings["master_volume"],
|
||||
settings_manager.get_setting("master_volume"),
|
||||
"Volume reset to default"
|
||||
)
|
||||
TestHelper.assert_equal(
|
||||
TestHelperClass.assert_equal(
|
||||
settings_manager.default_settings["language"],
|
||||
settings_manager.get_setting("language"),
|
||||
"Language reset to default"
|
||||
)
|
||||
|
||||
# Test that reset saves automatically
|
||||
TestHelper.assert_file_exists("user://settings.cfg", "Settings file exists after reset")
|
||||
TestHelperClass.assert_file_exists("user://settings.cfg", "Settings file exists after reset")
|
||||
|
||||
|
||||
func test_performance_benchmarks():
|
||||
TestHelper.print_step("Performance Benchmarks")
|
||||
TestHelperClass.print_step("Performance Benchmarks")
|
||||
|
||||
# Test settings load performance
|
||||
TestHelper.start_performance_test("load_settings")
|
||||
TestHelperClass.start_performance_test("load_settings")
|
||||
settings_manager.load_settings()
|
||||
TestHelper.end_performance_test("load_settings", 100.0, "Settings load within 100ms")
|
||||
TestHelperClass.end_performance_test("load_settings", 100.0, "Settings load within 100ms")
|
||||
|
||||
# Test settings save performance
|
||||
TestHelper.start_performance_test("save_settings")
|
||||
TestHelperClass.start_performance_test("save_settings")
|
||||
settings_manager.save_settings()
|
||||
TestHelper.end_performance_test("save_settings", 50.0, "Settings save within 50ms")
|
||||
TestHelperClass.end_performance_test("save_settings", 50.0, "Settings save within 50ms")
|
||||
|
||||
# Test validation performance
|
||||
TestHelper.start_performance_test("validation")
|
||||
TestHelperClass.start_performance_test("validation")
|
||||
for i in range(100):
|
||||
settings_manager.set_setting("master_volume", 0.5)
|
||||
TestHelper.end_performance_test("validation", 50.0, "100 validations within 50ms")
|
||||
TestHelperClass.end_performance_test("validation", 50.0, "100 validations within 50ms")
|
||||
|
||||
|
||||
func cleanup_tests():
|
||||
TestHelper.print_step("Cleanup")
|
||||
TestHelperClass.print_step("Cleanup")
|
||||
|
||||
# Restore original settings
|
||||
if original_settings:
|
||||
@@ -312,6 +312,6 @@ func cleanup_tests():
|
||||
|
||||
# Clean up temporary files
|
||||
for temp_file in temp_files:
|
||||
TestHelper.cleanup_temp_file(temp_file)
|
||||
TestHelperClass.cleanup_temp_file(temp_file)
|
||||
|
||||
TestHelper.assert_true(true, "Test cleanup completed")
|
||||
TestHelperClass.assert_true(true, "Test cleanup completed")
|
||||
|
||||
Reference in New Issue
Block a user