From d733663e8bd9940b55da76bd04f1ec8896414c11 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Fri, 20 Oct 2023 10:22:08 -0500 Subject: [PATCH] Add an automated test using a Variant iterator --- test/project/main.gd | 4 ++++ test/src/example.cpp | 37 +++++++++++++++++++++++++++++++++++++ test/src/example.h | 2 ++ 3 files changed, 43 insertions(+) diff --git a/test/project/main.gd b/test/project/main.gd index f51ef3b69..d5b8d94bf 100644 --- a/test/project/main.gd +++ b/test/project/main.gd @@ -184,6 +184,10 @@ func _ready(): assert_equal(example.test_bitfield(0), 0) assert_equal(example.test_bitfield(Example.FLAG_ONE | Example.FLAG_TWO), 3) + # Test variant iterator. + assert_equal(example.test_variant_iterator([10, 20, 30]), [15, 25, 35]) + assert_equal(example.test_variant_iterator(null), "iter_init: not valid") + # RPCs. assert_equal(example.return_last_rpc_arg(), 0) example.test_rpc(42) diff --git a/test/src/example.cpp b/test/src/example.cpp index 759cc4f79..c82bfba1d 100644 --- a/test/src/example.cpp +++ b/test/src/example.cpp @@ -171,6 +171,8 @@ void Example::_bind_methods() { ClassDB::bind_method(D_METHOD("test_bitfield", "flags"), &Example::test_bitfield); + ClassDB::bind_method(D_METHOD("test_variant_iterator", "input"), &Example::test_variant_iterator); + ClassDB::bind_method(D_METHOD("test_rpc", "value"), &Example::test_rpc); ClassDB::bind_method(D_METHOD("test_send_rpc", "value"), &Example::test_send_rpc); ClassDB::bind_method(D_METHOD("return_last_rpc_arg"), &Example::return_last_rpc_arg); @@ -484,6 +486,41 @@ BitField Example::test_bitfield(BitField flags) { return flags; } +Variant Example::test_variant_iterator(const Variant &p_input) { + Array output; + + Variant iter; + + bool is_init_valid = true; + if (!p_input.iter_init(iter, is_init_valid)) { + if (!is_init_valid) { + return "iter_init: not valid"; + } + return output; + } + + bool is_iter_next_valid = true; + bool is_iter_get_valid = true; + do { + if (!is_iter_next_valid) { + return "iter_next: not valid"; + } + + Variant value = p_input.iter_get(iter, is_iter_get_valid); + if (!is_iter_get_valid) { + return "iter_get: not valid"; + } + output.push_back(((int)value) + 5); + + } while (p_input.iter_next(iter, is_iter_next_valid)); + + if (!is_iter_next_valid) { + return "iter_next: not valid"; + } + + return output; +} + void Example::test_rpc(int p_value) { last_rpc_arg = p_value; } diff --git a/test/src/example.h b/test/src/example.h index 4dfda23e8..929d8bb2b 100644 --- a/test/src/example.h +++ b/test/src/example.h @@ -152,6 +152,8 @@ class Example : public Control { BitField test_bitfield(BitField flags); + Variant test_variant_iterator(const Variant &p_input); + // RPC void test_rpc(int p_value); void test_send_rpc(int p_value);