Blender V5.0
geometry_nodes_bundle_tests.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#include "testing/testing.h"
5
6#include "CLG_log.h"
7
8#include "BKE_appdir.hh"
9#include "BKE_context.hh"
10#include "BKE_global.hh"
11#include "BKE_idtype.hh"
12#include "BKE_main.hh"
13#include "BKE_material.hh"
14#include "BKE_node.hh"
15#include "BKE_scene.hh"
16
17#include "IMB_imbuf.hh"
18
19#include "RNA_define.hh"
20
22
24
25class BundleTest : public ::testing::Test {
26
27 protected:
38
39 static void TearDownTestSuite()
40 {
43 RNA_exit();
45 IMB_exit();
46 CLG_exit();
47 }
48};
49
50TEST_F(BundleTest, DefaultBundle)
51{
52 BundlePtr bundle = Bundle::create();
53 EXPECT_TRUE(bundle);
54 EXPECT_TRUE(bundle->is_empty());
55}
56
58{
59 BundlePtr bundle_ptr = Bundle::create();
60 Bundle &bundle = const_cast<Bundle &>(*bundle_ptr);
61 bundle.add("a", 3);
62 EXPECT_EQ(bundle.size(), 1);
63 EXPECT_TRUE(bundle.contains("a"));
64 EXPECT_EQ(bundle.lookup<int>("a"), 3);
65}
66
67TEST_F(BundleTest, AddLookupPath)
68{
69 BundlePtr bundle_ptr = Bundle::create();
70 Bundle &bundle = const_cast<Bundle &>(*bundle_ptr);
71 bundle.add_path("a/b/c", 3);
72 bundle.add_path("a/b/d", 4);
73 EXPECT_EQ(bundle.size(), 1);
74 EXPECT_EQ((*bundle.lookup_path<BundlePtr>("a"))->size(), 1);
75 EXPECT_EQ((*bundle.lookup_path<BundlePtr>("a/b"))->size(), 2);
76 EXPECT_EQ(bundle.lookup_path<int>("a/b/c"), 3);
77 EXPECT_EQ(bundle.lookup_path<int>("a/b/d"), 4);
78 EXPECT_EQ(bundle.lookup_path<BundlePtr>("a/b/c"), std::nullopt);
79 EXPECT_EQ(bundle.lookup_path<BundlePtr>("a/b/x"), std::nullopt);
80}
81
82TEST_F(BundleTest, LookupConversion)
83{
84 BundlePtr bundle_ptr = Bundle::create();
85 Bundle &bundle = const_cast<Bundle &>(*bundle_ptr);
86 bundle.add_path("a/b", -3.4f);
87 EXPECT_EQ(bundle.lookup_path<float>("a/b"), -3.4f);
88 EXPECT_EQ(bundle.lookup_path<int>("a/b"), -3);
89 EXPECT_EQ(bundle.lookup_path<bool>("a/b"), false);
90 EXPECT_EQ(bundle.lookup_path<float3>("a/b"), float3(-3.4f));
91 EXPECT_EQ(bundle.lookup_path<std::string>("a/b"), std::nullopt);
92}
93
94TEST_F(BundleTest, AddOverride)
95{
96 BundlePtr bundle_ptr = Bundle::create();
97 Bundle &bundle = const_cast<Bundle &>(*bundle_ptr);
98 bundle.add_path("a/b", 4);
99 EXPECT_EQ(bundle.lookup_path<int>("a/b"), 4);
100 bundle.add_path_override("a/b", 10);
101 EXPECT_EQ(bundle.lookup_path<int>("a/b"), 10);
102 bundle.add_path("a/b", 15);
103 EXPECT_EQ(bundle.lookup_path<int>("a/b"), 10);
104}
105
106} // namespace blender::nodes::tests
void BKE_appdir_init()
Definition appdir.cc:93
void BKE_appdir_exit()
Definition appdir.cc:101
void BKE_idtype_init()
Definition idtype.cc:121
General operations, lookup, etc. for materials.
void BKE_materials_init()
void BKE_materials_exit()
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void CLG_exit()
Definition clog.cc:880
void CLG_init()
Definition clog.cc:873
void IMB_exit()
Definition module.cc:21
void IMB_init()
Definition module.cc:15
const BundleItemValue * lookup(StringRef key) const
void add_path_override(StringRef path, const BundleItemValue &value)
bool add(StringRef key, const BundleItemValue &value)
const BundleItemValue * lookup_path(Span< StringRef > path) const
bool add_path(StringRef path, const BundleItemValue &value)
bool contains(StringRef key) const
void node_system_exit()
Definition node.cc:5431
void node_system_init()
Definition node.cc:5426
TEST_F(BundleTest, DefaultBundle)
ImplicitSharingPtr< Bundle > BundlePtr
VecBase< float, 3 > float3
void RNA_exit()
void RNA_init()
Definition rna_access.cc:88