Skip to content
Snippets Groups Projects
Select Git revision
  • e24dc64fd311a39a963d73f36d9c1f68b9fd3a59
  • stable default protected
  • MA_Pape_2018
  • MA_2018_Lopatin
  • feature/mesh_viewer
  • feature/#468_access_isosurface_scalar
  • feature/#459_default_primitives
  • master protected
  • feature/#470_Create_a_color_lookup_table
  • feature/#473_resize_companion_window
  • feature/#462_do_not_use_arb_extensions
  • feature/#495_Provide_data_for_larger_isosurfaces
  • feature/#323_default_image
  • feature/#480_Create_a_smaller_test_mesh_for_combustion_demo
  • feature/#236_Get_Integration_tests_running_on_CI
  • feature/#447_Copy_standard_assets_to_build_folder
  • 447-copy-standard-assets-to-build-folder-and-remove-resource-path
  • feature/#445_mesh_render_settings_component
  • feature/#251_Make_sure_tests_cpp_is_compiled_once
  • feature/#455_Remove_navigation_and_improve_interaction_for_combustion_demo
  • feature/446_strange_txt_files
  • v18.06.0
  • v18.05.0
  • #251_bad
  • #251_good
  • v18.03.0
  • v18.02.0
  • v18.01.0
  • v17.12.0
  • v17.11.0
  • v17.10.0
  • v17.09.0
  • v17.07.0
33 results

test_resource_pointer.cpp

Blame
  • test_resource_pointer.cpp 4.73 KiB
    //------------------------------------------------------------------------------
    // Project Phoenix
    //
    // Copyright (c) 2017-2018 RWTH Aachen University, Germany,
    // Virtual Reality & Immersive Visualization Group.
    //------------------------------------------------------------------------------
    //                                 License
    //
    // Licensed under the 3-Clause BSD License (the "License");
    // you may not use this file except in compliance with the License.
    // See the file LICENSE for the full text.
    // You may obtain a copy of the License at
    //
    //     https://opensource.org/licenses/BSD-3-Clause
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    //------------------------------------------------------------------------------
    
    #include "catch/catch.hpp"
    
    #include "phx/core/entity.hpp"
    #include "phx/rendering/components/resource_component.hpp"
    #include "phx/resources/resource_manager.hpp"
    #include "phx/resources/resource_pointer.hpp"
    #include "phx/resources/resource_utils.hpp"
    #include "phx/resources/types/image.hpp"
    #include "phx/resources/types/model.hpp"
    
    SCENARIO(
        "The resource pointer makes the underlying resource available through the "
        "-> operator.",
        "[phx][phx::ResourcePointer]") {
      GIVEN("A resource pointer to an arbitrarily chosen image resource.") {
        phx::ResourcePointer<phx::Image> resource_pointer =
            phx::ResourceManager::instance().DeclareResource<phx::Image>(
                phx::ResourceUtils::DeclarationFromFile(
                    "textures/splash_progress.png"));
        THEN(
            "We can can compare the pointer to nullptr using the != operator and "
            "they are the same, because the resource is not loaded.") {
          REQUIRE(resource_pointer == nullptr);
          REQUIRE(!resource_pointer);
        }
        WHEN("We load the resource.") {
          resource_pointer.Load();
          THEN(
              "We can compare the pointer to nullptr and they are not the "
              "same.") {
            REQUIRE(resource_pointer != nullptr);
            REQUIRE(resource_pointer);
          }
          THEN("We can access the image through the -> operator.") {
            REQUIRE(resource_pointer.operator->() == resource_pointer.Get());
            REQUIRE(resource_pointer.Get() != nullptr);
          }
        }
        WHEN("We initialize a new pointer to the same resource.") {
          phx::ResourcePointer<phx::Image> resource_pointer2 =
              phx::ResourceManager::instance().DeclareResource<phx::Image>(
                  phx::ResourceUtils::DeclarationFromFile(
                      "textures/splash_progress.png"));
          THEN(
              "We can can compare the two pointers using the == operator and "
              "they are the same") {
            REQUIRE(resource_pointer == resource_pointer2);
          }
        }
        WHEN("We initialize a new pointer with a different resource.") {
          phx::ResourcePointer<phx::Image> resource_pointer2 =
              phx::ResourceManager::instance().DeclareResource<phx::Image>(
                  phx::ResourceUtils::DeclarationFromFile("textures/splash.png"));
          THEN(
              "We can can compare the two pointers using the != operator and "
              "they are not the same") {
            REQUIRE(resource_pointer != resource_pointer2);
          }
        }
        WHEN("We initialize a new pointer with nullptr.") {
          phx::ResourcePointer<phx::Image> resource_pointer2 =
              phx::ResourcePointer<phx::Image>(nullptr);
          THEN(
              "We can can compare the two pointers using the != operator and "
              "they are not the same") {
            REQUIRE(resource_pointer != resource_pointer2);
          }
        }
      }
    }
    SCENARIO("ResourcePointers can be used in a ResourceComponent") {
      GIVEN("A resource pointer to an arbitrarily chosen model resource.") {
        phx::ResourcePointer<phx::Model> resource_pointer =
            phx::ResourceManager::instance().DeclareResource<phx::Model>(
                phx::ResourceUtils::DeclarationFromFile("models/bunny.obj"));
        resource_pointer.Load();
        auto mesh_resource_pointer = resource_pointer->GetMeshes()[0];
        phx::Entity entity;
        WHEN("We add the mesh_resource_pointer as ResourceComponent") {
          entity.AddComponent<phx::ResourceComponent<phx::Mesh>>(
              mesh_resource_pointer);
          THEN(
              "the resouce pointer is in the ResourceComponent and can be obtained "
              "using GetResourcePointer()") {
            auto resource_component =
                entity.GetFirstComponent<phx::ResourceComponent<phx::Mesh>>();
            REQUIRE(resource_component->GetResourcePointer().Get() ==
                    mesh_resource_pointer.Get());
          }
        }
      }
    }