Don't right-align escaped newlines, e.g. for #define. This has previously led to long diffs in the commit history.

This commit is contained in:
Lukas Tenbrink 2025-11-04 10:58:10 +01:00
parent f4f0679a2d
commit c5df0cb82b
144 changed files with 4519 additions and 4519 deletions

View file

@ -255,109 +255,109 @@ public:
}
};
#define DEFINE_DUPLICATE_GUINEA_PIG(m_class_name, m_property_usage) \
class m_class_name : public Resource { \
GDCLASS(m_class_name, Resource) \
\
DuplicateGuineaPigData data; \
\
public: \
void set_obj(Object *p_obj) { \
data.obj = p_obj; \
} \
Object *get_obj() const { \
return data.obj; \
} \
\
void set_arr(const Array &p_arr) { \
data.arr = p_arr; \
} \
Array get_arr() const { \
return data.arr; \
} \
\
void set_dict(const Dictionary &p_dict) { \
data.dict = p_dict; \
} \
Dictionary get_dict() const { \
return data.dict; \
} \
\
void set_packed(const Variant &p_packed) { \
data.packed = p_packed; \
} \
Variant get_packed() const { \
return data.packed; \
} \
\
void set_subres(const Ref<Resource> &p_subres) { \
data.subres = p_subres; \
} \
Ref<Resource> get_subres() const { \
return data.subres; \
} \
\
void set_subres_sl(const Ref<Resource> &p_subres) { \
data.subres_sl = p_subres; \
} \
Ref<Resource> get_subres_sl() const { \
return data.subres_sl; \
} \
\
void set_defaults() { \
data.set_defaults(); \
} \
\
Object *get_data() { \
return &data; \
} \
\
void verify_duplication(const Ref<Resource> &p_orig, int p_test_mode, int p_deep_mode) const { \
const DuplicateGuineaPigData *orig_data = Object::cast_to<DuplicateGuineaPigData>(p_orig->call("get_data")); \
data.verify_duplication(orig_data, m_property_usage, (TestDuplicateMode)p_test_mode, (ResourceDeepDuplicateMode)p_deep_mode); \
} \
\
protected: \
static void _bind_methods() { \
ClassDB::bind_method(D_METHOD("set_obj", "obj"), &m_class_name::set_obj); \
ClassDB::bind_method(D_METHOD("get_obj"), &m_class_name::get_obj); \
\
ClassDB::bind_method(D_METHOD("set_arr", "arr"), &m_class_name::set_arr); \
ClassDB::bind_method(D_METHOD("get_arr"), &m_class_name::get_arr); \
\
ClassDB::bind_method(D_METHOD("set_dict", "dict"), &m_class_name::set_dict); \
ClassDB::bind_method(D_METHOD("get_dict"), &m_class_name::get_dict); \
\
ClassDB::bind_method(D_METHOD("set_packed", "packed"), &m_class_name::set_packed); \
ClassDB::bind_method(D_METHOD("get_packed"), &m_class_name::get_packed); \
\
ClassDB::bind_method(D_METHOD("set_subres", "subres"), &m_class_name::set_subres); \
ClassDB::bind_method(D_METHOD("get_subres"), &m_class_name::get_subres); \
\
ClassDB::bind_method(D_METHOD("set_subres_sl", "subres"), &m_class_name::set_subres_sl); \
ClassDB::bind_method(D_METHOD("get_subres_sl"), &m_class_name::get_subres_sl); \
\
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "obj", PROPERTY_HINT_NONE, "", m_property_usage), "set_obj", "get_obj"); \
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "arr", PROPERTY_HINT_NONE, "", m_property_usage), "set_arr", "get_arr"); \
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "dict", PROPERTY_HINT_NONE, "", m_property_usage), "set_dict", "get_dict"); \
#define DEFINE_DUPLICATE_GUINEA_PIG(m_class_name, m_property_usage) \
class m_class_name : public Resource { \
GDCLASS(m_class_name, Resource) \
\
DuplicateGuineaPigData data; \
\
public: \
void set_obj(Object *p_obj) { \
data.obj = p_obj; \
} \
Object *get_obj() const { \
return data.obj; \
} \
\
void set_arr(const Array &p_arr) { \
data.arr = p_arr; \
} \
Array get_arr() const { \
return data.arr; \
} \
\
void set_dict(const Dictionary &p_dict) { \
data.dict = p_dict; \
} \
Dictionary get_dict() const { \
return data.dict; \
} \
\
void set_packed(const Variant &p_packed) { \
data.packed = p_packed; \
} \
Variant get_packed() const { \
return data.packed; \
} \
\
void set_subres(const Ref<Resource> &p_subres) { \
data.subres = p_subres; \
} \
Ref<Resource> get_subres() const { \
return data.subres; \
} \
\
void set_subres_sl(const Ref<Resource> &p_subres) { \
data.subres_sl = p_subres; \
} \
Ref<Resource> get_subres_sl() const { \
return data.subres_sl; \
} \
\
void set_defaults() { \
data.set_defaults(); \
} \
\
Object *get_data() { \
return &data; \
} \
\
void verify_duplication(const Ref<Resource> &p_orig, int p_test_mode, int p_deep_mode) const { \
const DuplicateGuineaPigData *orig_data = Object::cast_to<DuplicateGuineaPigData>(p_orig->call("get_data")); \
data.verify_duplication(orig_data, m_property_usage, (TestDuplicateMode)p_test_mode, (ResourceDeepDuplicateMode)p_deep_mode); \
} \
\
protected: \
static void _bind_methods() { \
ClassDB::bind_method(D_METHOD("set_obj", "obj"), &m_class_name::set_obj); \
ClassDB::bind_method(D_METHOD("get_obj"), &m_class_name::get_obj); \
\
ClassDB::bind_method(D_METHOD("set_arr", "arr"), &m_class_name::set_arr); \
ClassDB::bind_method(D_METHOD("get_arr"), &m_class_name::get_arr); \
\
ClassDB::bind_method(D_METHOD("set_dict", "dict"), &m_class_name::set_dict); \
ClassDB::bind_method(D_METHOD("get_dict"), &m_class_name::get_dict); \
\
ClassDB::bind_method(D_METHOD("set_packed", "packed"), &m_class_name::set_packed); \
ClassDB::bind_method(D_METHOD("get_packed"), &m_class_name::get_packed); \
\
ClassDB::bind_method(D_METHOD("set_subres", "subres"), &m_class_name::set_subres); \
ClassDB::bind_method(D_METHOD("get_subres"), &m_class_name::get_subres); \
\
ClassDB::bind_method(D_METHOD("set_subres_sl", "subres"), &m_class_name::set_subres_sl); \
ClassDB::bind_method(D_METHOD("get_subres_sl"), &m_class_name::get_subres_sl); \
\
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "obj", PROPERTY_HINT_NONE, "", m_property_usage), "set_obj", "get_obj"); \
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "arr", PROPERTY_HINT_NONE, "", m_property_usage), "set_arr", "get_arr"); \
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "dict", PROPERTY_HINT_NONE, "", m_property_usage), "set_dict", "get_dict"); \
ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "packed", PROPERTY_HINT_NONE, "", m_property_usage), "set_packed", "get_packed"); \
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "subres", PROPERTY_HINT_NONE, "", m_property_usage), "set_subres", "get_subres"); \
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "subres_sl", PROPERTY_HINT_NONE, "", m_property_usage), "set_subres_sl", "get_subres_sl"); \
\
ClassDB::bind_method(D_METHOD("set_defaults"), &m_class_name::set_defaults); \
ClassDB::bind_method(D_METHOD("get_data"), &m_class_name::get_data); \
ClassDB::bind_method(D_METHOD("verify_duplication", "orig", "test_mode", "deep_mode"), &m_class_name::verify_duplication); \
} \
\
public: \
static m_class_name *register_and_instantiate() { \
static bool registered = false; \
if (!registered) { \
GDREGISTER_CLASS(m_class_name); \
registered = true; \
} \
return memnew(m_class_name); \
} \
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "subres", PROPERTY_HINT_NONE, "", m_property_usage), "set_subres", "get_subres"); \
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "subres_sl", PROPERTY_HINT_NONE, "", m_property_usage), "set_subres_sl", "get_subres_sl"); \
\
ClassDB::bind_method(D_METHOD("set_defaults"), &m_class_name::set_defaults); \
ClassDB::bind_method(D_METHOD("get_data"), &m_class_name::get_data); \
ClassDB::bind_method(D_METHOD("verify_duplication", "orig", "test_mode", "deep_mode"), &m_class_name::verify_duplication); \
} \
\
public: \
static m_class_name *register_and_instantiate() { \
static bool registered = false; \
if (!registered) { \
GDREGISTER_CLASS(m_class_name); \
registered = true; \
} \
return memnew(m_class_name); \
} \
};
DEFINE_DUPLICATE_GUINEA_PIG(DuplicateGuineaPig_None, PROPERTY_USAGE_NONE)

View file

@ -1622,9 +1622,9 @@ TEST_CASE("[String] Checking string is empty when it should be") {
}
TEST_CASE("[String] lstrip and rstrip") {
#define STRIP_TEST(x) \
{ \
bool success = x; \
#define STRIP_TEST(x) \
{ \
bool success = x; \
state = state && success; \
}
@ -2183,17 +2183,17 @@ TEST_CASE("[String] Variant ptr indexed set") {
TEST_CASE("[String][URL] Parse URL") {
#define CHECK_URL(m_url_to_parse, m_expected_schema, m_expected_host, m_expected_port, m_expected_path, m_expected_fragment, m_expected_error) \
if (true) { \
int port; \
String url(m_url_to_parse), schema, host, path, fragment; \
\
CHECK_EQ(url.parse_url(schema, host, port, path, fragment), m_expected_error); \
CHECK_EQ(schema, m_expected_schema); \
CHECK_EQ(host, m_expected_host); \
CHECK_EQ(path, m_expected_path); \
CHECK_EQ(fragment, m_expected_fragment); \
CHECK_EQ(port, m_expected_port); \
} else \
if (true) { \
int port; \
String url(m_url_to_parse), schema, host, path, fragment; \
\
CHECK_EQ(url.parse_url(schema, host, port, path, fragment), m_expected_error); \
CHECK_EQ(schema, m_expected_schema); \
CHECK_EQ(host, m_expected_host); \
CHECK_EQ(path, m_expected_path); \
CHECK_EQ(fragment, m_expected_fragment); \
CHECK_EQ(port, m_expected_port); \
} else \
((void)0)
// All elements.

View file

@ -37,9 +37,9 @@
namespace TestSplitContainer {
#define CHECK_RECTS(m_rects, m_child_rects) \
CHECK(m_rects.size() == m_child_rects.size()); \
for (int i = 0; i < (int)m_child_rects.size(); i++) { \
#define CHECK_RECTS(m_rects, m_child_rects) \
CHECK(m_rects.size() == m_child_rects.size()); \
for (int i = 0; i < (int)m_child_rects.size(); i++) { \
CHECK_MESSAGE(m_child_rects[i] == m_rects[i], vformat("Child %s is the wrong size. Child rect: %s, expected: %s.", i, m_child_rects[i], m_rects[i])); \
}

View file

@ -65,22 +65,22 @@
// Stringify all `Variant` compatible types for doctest output by default.
// https://github.com/onqtam/doctest/blob/master/doc/markdown/stringification.md
#define DOCTEST_STRINGIFY_VARIANT(m_type) \
template <> \
struct doctest::StringMaker<m_type> { \
#define DOCTEST_STRINGIFY_VARIANT(m_type) \
template <> \
struct doctest::StringMaker<m_type> { \
static doctest::String convert(const m_type &p_val) { \
const Variant val = p_val; \
const Variant val = p_val; \
return val.operator ::String().utf8().get_data(); \
} \
} \
};
#define DOCTEST_STRINGIFY_VARIANT_POINTER(m_type) \
template <> \
struct doctest::StringMaker<m_type> { \
#define DOCTEST_STRINGIFY_VARIANT_POINTER(m_type) \
template <> \
struct doctest::StringMaker<m_type> { \
static doctest::String convert(const m_type *p_val) { \
const Variant val = p_val; \
const Variant val = p_val; \
return val.operator ::String().utf8().get_data(); \
} \
} \
};
DOCTEST_STRINGIFY_VARIANT(Variant);
@ -131,7 +131,7 @@ typedef void (*TestFunc)();
extern HashMap<String, TestFunc> *test_commands;
int register_test_command(String p_command, TestFunc p_function);
#define REGISTER_TEST_COMMAND(m_command, m_function) \
#define REGISTER_TEST_COMMAND(m_command, m_function) \
DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
register_test_command(m_command, m_function))
@ -147,98 +147,98 @@ int register_test_command(String p_command, TestFunc p_function);
#define _SEND_DISPLAYSERVER_EVENT(m_event) ((DisplayServerMock *)(DisplayServer::get_singleton()))->simulate_event(m_event);
#define SEND_GUI_ACTION(m_action) \
{ \
#define SEND_GUI_ACTION(m_action) \
{ \
const List<Ref<InputEvent>> *events = InputMap::get_singleton()->action_get_events(m_action); \
const List<Ref<InputEvent>>::Element *first_event = events->front(); \
Ref<InputEventKey> event = first_event->get()->duplicate(); \
event->set_pressed(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
const List<Ref<InputEvent>>::Element *first_event = events->front(); \
Ref<InputEventKey> event = first_event->get()->duplicate(); \
event->set_pressed(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
#define SEND_GUI_KEY_EVENT(m_input) \
{ \
#define SEND_GUI_KEY_EVENT(m_input) \
{ \
Ref<InputEventKey> event = InputEventKey::create_reference(m_input); \
event->set_pressed(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
event->set_pressed(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
#define SEND_GUI_KEY_UP_EVENT(m_input) \
{ \
#define SEND_GUI_KEY_UP_EVENT(m_input) \
{ \
Ref<InputEventKey> event = InputEventKey::create_reference(m_input); \
event->set_pressed(false); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
event->set_pressed(false); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
#define _UPDATE_EVENT_MODIFIERS(m_event, m_modifiers) \
#define _UPDATE_EVENT_MODIFIERS(m_event, m_modifiers) \
m_event->set_shift_pressed(((m_modifiers) & KeyModifierMask::SHIFT) != Key::NONE); \
m_event->set_alt_pressed(((m_modifiers) & KeyModifierMask::ALT) != Key::NONE); \
m_event->set_ctrl_pressed(((m_modifiers) & KeyModifierMask::CTRL) != Key::NONE); \
m_event->set_alt_pressed(((m_modifiers) & KeyModifierMask::ALT) != Key::NONE); \
m_event->set_ctrl_pressed(((m_modifiers) & KeyModifierMask::CTRL) != Key::NONE); \
m_event->set_meta_pressed(((m_modifiers) & KeyModifierMask::META) != Key::NONE);
#define _CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifiers) \
Ref<InputEventMouseButton> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_button_index(m_input); \
event->set_button_mask(m_mask); \
event->set_factor(1); \
_UPDATE_EVENT_MODIFIERS(event, m_modifiers); \
Ref<InputEventMouseButton> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_button_index(m_input); \
event->set_button_mask(m_mask); \
event->set_factor(1); \
_UPDATE_EVENT_MODIFIERS(event, m_modifiers); \
event->set_pressed(true);
#define _CREATE_GUI_TOUCH_EVENT(m_screen_pos, m_pressed, m_double) \
Ref<InputEventScreenTouch> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_pressed(m_pressed); \
Ref<InputEventScreenTouch> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_pressed(m_pressed); \
event->set_double_tap(m_double);
#define SEND_GUI_MOUSE_BUTTON_EVENT(m_screen_pos, m_input, m_mask, m_modifiers) \
{ \
_CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifiers); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
{ \
_CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifiers); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
#define SEND_GUI_MOUSE_BUTTON_RELEASED_EVENT(m_screen_pos, m_input, m_mask, m_modifiers) \
{ \
_CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifiers); \
event->set_pressed(false); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
{ \
_CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifiers); \
event->set_pressed(false); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
#define SEND_GUI_DOUBLE_CLICK(m_screen_pos, m_modifiers) \
{ \
#define SEND_GUI_DOUBLE_CLICK(m_screen_pos, m_modifiers) \
{ \
_CREATE_GUI_MOUSE_EVENT(m_screen_pos, MouseButton::LEFT, MouseButtonMask::NONE, m_modifiers); \
event->set_double_click(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
event->set_double_click(true); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
// We toggle _print_error_enabled to prevent display server not supported warnings.
#define SEND_GUI_MOUSE_MOTION_EVENT(m_screen_pos, m_mask, m_modifiers) \
{ \
bool errors_enabled = CoreGlobals::print_error_enabled; \
CoreGlobals::print_error_enabled = false; \
Ref<InputEventMouseMotion> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_button_mask(m_mask); \
_UPDATE_EVENT_MODIFIERS(event, m_modifiers); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
CoreGlobals::print_error_enabled = errors_enabled; \
{ \
bool errors_enabled = CoreGlobals::print_error_enabled; \
CoreGlobals::print_error_enabled = false; \
Ref<InputEventMouseMotion> event; \
event.instantiate(); \
event->set_position(m_screen_pos); \
event->set_button_mask(m_mask); \
_UPDATE_EVENT_MODIFIERS(event, m_modifiers); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
CoreGlobals::print_error_enabled = errors_enabled; \
}
#define SEND_GUI_TOUCH_EVENT(m_screen_pos, m_pressed, m_double) \
{ \
#define SEND_GUI_TOUCH_EVENT(m_screen_pos, m_pressed, m_double) \
{ \
_CREATE_GUI_TOUCH_EVENT(m_screen_pos, m_pressed, m_double) \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
_SEND_DISPLAYSERVER_EVENT(event); \
MessageQueue::get_singleton()->flush(); \
}
// Utility class / macros for testing signals
@ -406,68 +406,68 @@ public:
#define SIGNAL_DISCARD(m_signal) SignalWatcher::get_singleton()->discard_signal(m_signal);
#define MULTICHECK_STRING_EQ(m_obj, m_func, m_param1, m_eq) \
CHECK(m_obj.m_func(m_param1) == m_eq); \
CHECK(m_obj.m_func(U##m_param1) == m_eq); \
CHECK(m_obj.m_func(L##m_param1) == m_eq); \
CHECK(m_obj.m_func(m_param1) == m_eq); \
CHECK(m_obj.m_func(U##m_param1) == m_eq); \
CHECK(m_obj.m_func(L##m_param1) == m_eq); \
CHECK(m_obj.m_func(String(m_param1)) == m_eq);
#define MULTICHECK_STRING_INT_EQ(m_obj, m_func, m_param1, m_param2, m_eq) \
CHECK(m_obj.m_func(m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(String(m_param1), m_param2) == m_eq);
#define MULTICHECK_STRING_INT_INT_EQ(m_obj, m_func, m_param1, m_param2, m_param3, m_eq) \
CHECK(m_obj.m_func(m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, m_param2, m_param3) == m_eq); \
CHECK(m_obj.m_func(String(m_param1), m_param2, m_param3) == m_eq);
#define MULTICHECK_STRING_STRING_EQ(m_obj, m_func, m_param1, m_param2, m_eq) \
CHECK(m_obj.m_func(m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, U##m_param2) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, L##m_param2) == m_eq); \
CHECK(m_obj.m_func(m_param1, m_param2) == m_eq); \
CHECK(m_obj.m_func(U##m_param1, U##m_param2) == m_eq); \
CHECK(m_obj.m_func(L##m_param1, L##m_param2) == m_eq); \
CHECK(m_obj.m_func(String(m_param1), String(m_param2)) == m_eq);
#define MULTICHECK_GET_SLICE(m_obj, m_param1, m_slices) \
for (int i = 0; i < m_obj.get_slice_count(m_param1); ++i) { \
CHECK(m_obj.get_slice(m_param1, i) == m_slices[i]); \
} \
for (int i = 0; i < m_obj.get_slice_count(U##m_param1); ++i) { \
CHECK(m_obj.get_slice(U##m_param1, i) == m_slices[i]); \
} \
for (int i = 0; i < m_obj.get_slice_count(L##m_param1); ++i) { \
CHECK(m_obj.get_slice(L##m_param1, i) == m_slices[i]); \
} \
#define MULTICHECK_GET_SLICE(m_obj, m_param1, m_slices) \
for (int i = 0; i < m_obj.get_slice_count(m_param1); ++i) { \
CHECK(m_obj.get_slice(m_param1, i) == m_slices[i]); \
} \
for (int i = 0; i < m_obj.get_slice_count(U##m_param1); ++i) { \
CHECK(m_obj.get_slice(U##m_param1, i) == m_slices[i]); \
} \
for (int i = 0; i < m_obj.get_slice_count(L##m_param1); ++i) { \
CHECK(m_obj.get_slice(L##m_param1, i) == m_slices[i]); \
} \
for (int i = 0; i < m_obj.get_slice_count(String(m_param1)); ++i) { \
CHECK(m_obj.get_slice(String(m_param1), i) == m_slices[i]); \
CHECK(m_obj.get_slice(String(m_param1), i) == m_slices[i]); \
}
#define MULTICHECK_SPLIT(m_obj, m_func, m_param1, m_param2, m_param3, m_slices, m_expected_size) \
do { \
Vector<String> string_list; \
\
string_list = m_obj.m_func(m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(U##m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(L##m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(String(m_param1), m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
do { \
Vector<String> string_list; \
\
string_list = m_obj.m_func(m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(U##m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(L##m_param1, m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
\
string_list = m_obj.m_func(String(m_param1), m_param2, m_param3); \
CHECK(m_expected_size == string_list.size()); \
for (int i = 0; i < string_list.size(); ++i) { \
CHECK(string_list[i] == m_slices[i]); \
} \
} while (false)