From 0eb9b414c13a67203b0d1cc5bd878afe63d3676b Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 1 May 2021 23:09:48 +0200 Subject: [PATCH] Add `Engine.print_error_messages` property to disable printing errors This can be used during unit test suite runs to hide error and warning messages. Care should be taken when using this feature, as it can hide important information if used wrongly. --- core/config/engine.cpp | 8 ++++++++ core/config/engine.h | 3 +++ core/core_bind.cpp | 12 ++++++++++++ core/core_bind.h | 3 +++ doc/classes/Engine.xml | 5 +++++ doc/classes/ProjectSettings.xml | 2 +- 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/core/config/engine.cpp b/core/config/engine.cpp index 2360d66438d3..02a183cef590 100644 --- a/core/config/engine.cpp +++ b/core/config/engine.cpp @@ -189,6 +189,14 @@ bool Engine::is_validation_layers_enabled() const { return use_validation_layers; } +void Engine::set_print_error_messages(bool p_enabled) { + _print_error_enabled = p_enabled; +} + +bool Engine::is_printing_error_messages() const { + return _print_error_enabled; +} + void Engine::add_singleton(const Singleton &p_singleton) { singletons.push_back(p_singleton); singleton_ptrs[p_singleton.name] = p_singleton.ptr; diff --git a/core/config/engine.h b/core/config/engine.h index a9080e3dfd21..85a8884a0548 100644 --- a/core/config/engine.h +++ b/core/config/engine.h @@ -98,6 +98,9 @@ class Engine { void set_time_scale(float p_scale); float get_time_scale() const; + void set_print_error_messages(bool p_enabled); + bool is_printing_error_messages() const; + void set_frame_delay(uint32_t p_msec); uint32_t get_frame_delay() const; diff --git a/core/core_bind.cpp b/core/core_bind.cpp index 84d8d0d4d39e..bcc1cd484f4f 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -2321,6 +2321,14 @@ bool _Engine::is_editor_hint() const { return Engine::get_singleton()->is_editor_hint(); } +void _Engine::set_print_error_messages(bool p_enabled) { + Engine::get_singleton()->set_print_error_messages(p_enabled); +} + +bool _Engine::is_printing_error_messages() const { + return Engine::get_singleton()->is_printing_error_messages(); +} + void _Engine::_bind_methods() { ClassDB::bind_method(D_METHOD("set_iterations_per_second", "iterations_per_second"), &_Engine::set_iterations_per_second); ClassDB::bind_method(D_METHOD("get_iterations_per_second"), &_Engine::get_iterations_per_second); @@ -2355,7 +2363,11 @@ void _Engine::_bind_methods() { ClassDB::bind_method(D_METHOD("set_editor_hint", "enabled"), &_Engine::set_editor_hint); ClassDB::bind_method(D_METHOD("is_editor_hint"), &_Engine::is_editor_hint); + ClassDB::bind_method(D_METHOD("set_print_error_messages", "enabled"), &_Engine::set_print_error_messages); + ClassDB::bind_method(D_METHOD("is_printing_error_messages"), &_Engine::is_printing_error_messages); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_hint"), "set_editor_hint", "is_editor_hint"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "print_error_messages"), "set_print_error_messages", "is_printing_error_messages"); ADD_PROPERTY(PropertyInfo(Variant::INT, "iterations_per_second"), "set_iterations_per_second", "get_iterations_per_second"); ADD_PROPERTY(PropertyInfo(Variant::INT, "target_fps"), "set_target_fps", "get_target_fps"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "time_scale"), "set_time_scale", "get_time_scale"); diff --git a/core/core_bind.h b/core/core_bind.h index 3920116ca44f..9fc9e8a39e06 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -660,6 +660,9 @@ class _Engine : public Object { void set_editor_hint(bool p_enabled); bool is_editor_hint() const; + void set_print_error_messages(bool p_enabled); + bool is_printing_error_messages() const; + _Engine() { singleton = this; } }; diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml index 1147b5210228..9573e83cb479 100644 --- a/doc/classes/Engine.xml +++ b/doc/classes/Engine.xml @@ -172,6 +172,11 @@ Controls how much physics ticks are synchronized with real time. For 0 or less, the ticks are synchronized. Such values are recommended for network games, where clock synchronization matters. Higher values cause higher deviation of in-game clock and real clock, but allows smoothing out framerate jitters. The default value of 0.5 should be fine for most; values above 2 could cause the game to react to dropped frames with a noticeable delay and are not recommended. + + If [code]false[/code], stops printing error and warning messages to the console and editor Output log. This can be used to hide error and warning messages during unit test suite runs. This property is equivalent to the [member ProjectSettings.application/run/disable_stderr] project setting. + [b]Warning:[/b] If you set this to [code]false[/code] anywhere in the project, important error messages may be hidden even if they are emitted from other scripts. If this is set to [code]false[/code] in a [code]@tool[/code] script, this will also impact the editor itself. Do [i]not[/i] report bugs before ensuring error messages are enabled (as they are by default). + [b]Note:[/b] This property does not impact the editor's Errors tab when running a project from the editor. + The desired frames per second. If the hardware cannot keep up, this setting may not be respected. A value of 0 means no limit. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 00966ca09708..fa28eaa526bc 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -266,7 +266,7 @@ Icon set in [code].ico[/code] format used on Windows to set the game's icon. This is done automatically on start by calling [method DisplayServer.set_native_icon]. - If [code]true[/code], disables printing to standard error in an exported build. + If [code]true[/code], disables printing to standard error in an exported build. If [code]true[/code], this also hides error and warning messages printed by [method @GlobalScope.push_error] and [method @GlobalScope.push_warning]. If [code]true[/code], disables printing to standard output in an exported build.