File: scene_collection_test.cpp

package info (click to toggle)
vkmark 2025.01-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,500 kB
  • sloc: cpp: 28,949; ansic: 39; python: 20; makefile: 3
file content (113 lines) | stat: -rw-r--r-- 3,699 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * Copyright © 2017 Collabora Ltd.
 *
 * This file is part of vkmark.
 *
 * vkmark is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation, either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * vkmark is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with vkmark. If not, see <http://www.gnu.org/licenses/>.
 *
 * Authors:
 *   Alexandros Frantzis <alexandros.frantzis@collabora.com>
 */

#include "src/scene_collection.h"
#include "src/scene.h"

#include "test_scene.h"
#include "catch.hpp"

using namespace Catch::Matchers;

namespace
{

SceneOption const option1{"option1", "value1", ""};
SceneOption const option2{"option2", "value2", ""};

struct TestSceneWithOptions : TestScene
{
    TestSceneWithOptions(std::string const& name)
        : TestScene{name, {option1, option2}}
    {
    }
};

}

SCENARIO("scene collection", "")
{
    SceneCollection sc;

    GIVEN("A few registered scenes")
    {
        auto const scene_name_1 = TestScene::name(1);
        auto const scene_name_2 = TestScene::name(2);
        auto const scene_name_3 = TestScene::name(3);

        sc.register_scene(std::make_unique<TestSceneWithOptions>(scene_name_1));
        sc.register_scene(std::make_unique<TestScene>(scene_name_2));
        sc.register_scene(std::make_unique<TestSceneWithOptions>(scene_name_3));

        WHEN("searching for a registered scene by name")
        {
            auto const& scene = sc.get_scene_by_name(scene_name_1);

            THEN("the scene is returned")
            {
                REQUIRE(scene.name() == scene_name_1);
                REQUIRE(scene.is_valid());
            }
        }

        WHEN("searching for an unregistered scene by name")
        {
            auto const& scene = sc.get_scene_by_name("unregistered");

            THEN("an invalid scene is returned")
            {
                REQUIRE(scene.name() == "unregistered");
                REQUIRE_FALSE(scene.is_valid());
            }
        }

        WHEN("setting an option default value")
        {
            std::string const new_opt_value{"newtestval"};
            sc.set_option_default(option1.name, new_opt_value);

            THEN("all registered scenes with the option are updated")
            {
                auto const& scene1 = sc.get_scene_by_name(scene_name_1);
                auto const& scene3 = sc.get_scene_by_name(scene_name_3);

                REQUIRE(scene1.options().at(option1.name).default_value == new_opt_value);
                REQUIRE(scene3.options().at(option1.name).default_value == new_opt_value);
            }

            THEN("all registered scenes without the option are not affected")
            {
                auto const& scene2 = sc.get_scene_by_name(scene_name_2);
                REQUIRE_THROWS(scene2.options().at(option1.name).default_value == new_opt_value);
            }

            THEN("other options are not affected")
            {
                auto const& scene1 = sc.get_scene_by_name(scene_name_1);
                auto const& scene3 = sc.get_scene_by_name(scene_name_3);

                REQUIRE(scene1.options().at(option2.name).default_value == option2.default_value);
                REQUIRE(scene3.options().at(option2.name).default_value == option2.default_value);
            }
        }
    }
}