218 lines
12 KiB
C++
218 lines
12 KiB
C++
#include "zeroerr/assert.h"
|
|
#include "zeroerr/unittest.h"
|
|
|
|
#include "animation/editing/AnimationClip.h"
|
|
#include "animation/editor/EditorAnimationClip.h"
|
|
#include "avatar/editing/AvatarTarget.h"
|
|
#include "avatar/editor/EditorAvatarTarget.h"
|
|
#include "building/editing/BuildingTarget.h"
|
|
#include "building/editor/EditorBuildingTarget.h"
|
|
#include "camera/editing/CameraTarget.h"
|
|
#include "camera/editor/EditorCameraTarget.h"
|
|
#include "crowd/editing/CrowdDocument.h"
|
|
#include "crowd/editor/EditorCrowdDocument.h"
|
|
#include "definitions/editing/DefinitionTarget.h"
|
|
#include "definitions/editor/EditorDefinitionTarget.h"
|
|
#include "editing/EditableTarget.h"
|
|
#include "editing/EditingAuthority.h"
|
|
#include "editing/EditingCommandTypes.h"
|
|
#include "editing/EditingGraph.h"
|
|
#include "editing/EditingIds.h"
|
|
#include "editing/EditingProperty.h"
|
|
#include "editing/EditingProtocol.h"
|
|
#include "editing/EditingResult.h"
|
|
#include "editing/EditingSelection.h"
|
|
#include "editing/EditingTargetOperations.h"
|
|
#include "editing/EditingTaskService.h"
|
|
#include "editing/EditingValue.h"
|
|
#include "editing/EditingVolume.h"
|
|
#include "editor/EditorAuthority.h"
|
|
#include "editor/EditorCommandTypes.h"
|
|
#include "editor/EditorIds.h"
|
|
#include "editor/EditorProperty.h"
|
|
#include "editor/EditorProtocol.h"
|
|
#include "editor/EditorResult.h"
|
|
#include "editor/EditorSelection.h"
|
|
#include "editor/EditorTarget.h"
|
|
#include "editor/EditorTaskService.h"
|
|
#include "editor/EditorValue.h"
|
|
#include "editor/EditorVolumeTarget.h"
|
|
#include "editor/gizmo/editing/DomainGizmoPreview.h"
|
|
#include "editor/gizmo/editor/EditorGizmoPreview.h"
|
|
#include "editor/input/editing/InputMapTarget.h"
|
|
#include "editor/input/editor/EditorInputMapTarget.h"
|
|
#include "editor/queue/editing/QueueInspector.h"
|
|
#include "editor/queue/editor/EditorQueueInspector.h"
|
|
#include "fluids/editing/FluidTarget.h"
|
|
#include "fluids/editing/SurfaceFluidTarget.h"
|
|
#include "fluids/editing/VolumeFluidTarget.h"
|
|
#include "fluids/editor/EditorFluidTarget.h"
|
|
#include "fluids/editor/EditorSurfaceFluidTarget.h"
|
|
#include "fluids/editor/EditorVolumeFluidTarget.h"
|
|
#include "graphics/editing/OffscreenPreview.h"
|
|
#include "graphics/editor/EditorOffscreenPreview.h"
|
|
#include "graphics/lighting/editing/LightingTarget.h"
|
|
#include "graphics/lighting/editor/EditorLightingTarget.h"
|
|
#include "graphics/material/editing/MaterialGraph.h"
|
|
#include "graphics/material/editing/MaterialTarget.h"
|
|
#include "graphics/material/editor/EditorGraph.h"
|
|
#include "graphics/material/editor/EditorMaterialTarget.h"
|
|
#include "hd2d/editing/Hd2dTarget.h"
|
|
#include "hd2d/editor/EditorHd2dTarget.h"
|
|
#include "housegen/editing/HouseGenTarget.h"
|
|
#include "housegen/editor/EditorHouseGenTarget.h"
|
|
#include "i18n/editing/LocalizationDocument.h"
|
|
#include "i18n/editor/EditorLocalization.h"
|
|
#include "map/editing/MapDocument.h"
|
|
#include "map/editor/EditorMapDocument.h"
|
|
#include "network/editing/NetworkTelemetry.h"
|
|
#include "network/editor/EditorNetworkTelemetry.h"
|
|
#include "particles/editing/ParticleGraph.h"
|
|
#include "particles/editor/EditorParticleGraph.h"
|
|
#include "physics/editing/PhysicsColliderAsset.h"
|
|
#include "physics/editing/PhysicsTarget.h"
|
|
#include "physics/editor/EditorPhysicsAsset.h"
|
|
#include "physics/editor/EditorPhysicsTarget.h"
|
|
#include "procgen/biome/editing/BiomeTarget.h"
|
|
#include "procgen/biome/editor/EditorBiomeTarget.h"
|
|
#include "procgen/editing/TextureRecipeTarget.h"
|
|
#include "procgen/editor/EditorTextureRecipeTarget.h"
|
|
#include "profiler/editing/ProfilerModel.h"
|
|
#include "profiler/editor/EditorProfiler.h"
|
|
#include "scene/editing/SceneTarget.h"
|
|
#include "scene/editor/EditorSceneTarget.h"
|
|
#include "scene/loader/editing/SceneImportTarget.h"
|
|
#include "scene/loader/editor/EditorSceneImportTarget.h"
|
|
#include "social/editing/SocialDocument.h"
|
|
#include "social/editor/EditorSocialDocument.h"
|
|
#include "ui/editing/UiDocument.h"
|
|
#include "ui/editor/EditorUiDocumentTarget.h"
|
|
#include "ui/editor/EditorUiThemeTarget.h"
|
|
#include "virtualgeometry/editing/VirtualGeometryTarget.h"
|
|
#include "virtualgeometry/editor/EditorVirtualGeometryTarget.h"
|
|
#include "voxel/editing/VoxelCatalog.h"
|
|
#include "voxel/editing/VoxelPaletteTarget.h"
|
|
#include "voxel/editing/VoxelWorldTarget.h"
|
|
#include "voxel/editor/EditorVoxelCatalogTarget.h"
|
|
#include "voxel/editor/EditorVoxelPaletteTarget.h"
|
|
|
|
#include <string>
|
|
#include <type_traits>
|
|
|
|
static_assert(!std::is_convertible_v<eve::editing::CommandId, eve::editing::ToolId>);
|
|
static_assert(std::is_same_v<eve::editor::CommandId, eve::editing::CommandId>);
|
|
static_assert(std::is_same_v<eve::editor::EditorValue, eve::editing::Value>);
|
|
static_assert(std::is_same_v<eve::editor::EditorStatus, eve::editing::Status>);
|
|
static_assert(std::is_same_v<eve::editor::CommandSource, eve::editing::CommandSource>);
|
|
static_assert(std::is_same_v<eve::editor::CommandRequest, eve::editing::CommandRequest>);
|
|
static_assert(std::is_same_v<eve::editor::TransactionReceipt, eve::editing::TransactionReceipt>);
|
|
static_assert(std::is_same_v<eve::editor::SelectionSnapshot, eve::editing::SelectionSnapshot>);
|
|
static_assert(std::is_same_v<eve::editor::IEditableTarget, eve::editing::IEditableTarget>);
|
|
static_assert(std::is_same_v<eve::editor::IIntVolumeTarget, eve::editing::IIntVolumeTarget>);
|
|
static_assert(std::is_same_v<eve::editor::IDomainOperationTarget, eve::editing::IDomainOperationTarget>);
|
|
static_assert(
|
|
std::is_same_v<eve::editor::IDomainOperationTargetStaging, eve::editing::IDomainOperationTargetStaging>);
|
|
static_assert(std::is_same_v<eve::editor::PropertySchema, eve::editing::PropertySchema>);
|
|
static_assert(std::is_same_v<eve::editor::IPropertyProvider, eve::editing::IPropertyProvider>);
|
|
static_assert(std::is_same_v<eve::editor::IEditAuthority, eve::editing::IEditAuthority>);
|
|
static_assert(std::is_same_v<eve::editor::LocalWorldAuthority, eve::editing::LocalWorldAuthority>);
|
|
static_assert(std::is_same_v<eve::editor::GraphDocument, eve::editing::GraphDocument>);
|
|
static_assert(std::is_same_v<eve::editor::IGraphDomainProvider, eve::editing::IGraphDomainProvider>);
|
|
static_assert(std::is_same_v<eve::editor::EditorTaskService, eve::editing::TaskService>);
|
|
static_assert(std::is_same_v<eve::editor::DefinitionDocument,
|
|
eve::definitions_editing::DefinitionDocument>);
|
|
static_assert(std::is_same_v<eve::editor::MaterialGraphDomain, eve::material_editing::MaterialGraphDomain>);
|
|
static_assert(std::is_same_v<eve::editor::MaterialDocumentTarget, eve::material_editing::MaterialDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::PhysicsColliderTarget, eve::physics_editing::PhysicsColliderTarget>);
|
|
static_assert(
|
|
std::is_same_v<eve::editor::IPhysicsColliderAssetResolver, eve::physics_editing::IPhysicsColliderAssetResolver>);
|
|
static_assert(std::is_same_v<eve::editor::SceneDocumentTarget, eve::scene_editing::SceneDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::SceneImportTarget,
|
|
eve::sceneloader_editing::SceneImportTarget>);
|
|
static_assert(std::is_same_v<eve::editor::MapDocumentTarget, eve::map_editing::MapDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::AnimationClipDocumentTarget,
|
|
eve::animation_editing::AnimationClipDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::AvatarDocumentTarget, eve::avatar_editing::AvatarDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::BiomeDocumentTarget, eve::biome_editing::BiomeDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::CameraDocumentTarget, eve::camera_editing::CameraDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::BuildingPlacementTarget,
|
|
eve::building_editing::BuildingPlacementTarget>);
|
|
static_assert(std::is_same_v<eve::editor::CrowdDocumentTarget,
|
|
eve::crowd_editing::CrowdDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::LocalizationDocument,
|
|
eve::localization_editing::LocalizationDocument>);
|
|
static_assert(std::is_same_v<eve::editor::SocialDocumentTarget,
|
|
eve::social_editing::SocialDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::NetworkTelemetryModel,
|
|
eve::network_editing::NetworkTelemetryModel>);
|
|
static_assert(std::is_same_v<eve::editor::EditorProfilerModel,
|
|
eve::profiler_editing::EditorProfilerModel>);
|
|
static_assert(std::is_same_v<eve::editor::RuntimeQueueInspector,
|
|
eve::queue_editing::RuntimeQueueInspector>);
|
|
static_assert(std::is_same_v<eve::editor::GraphicsOffscreenPreviewService,
|
|
eve::graphics_editing::GraphicsOffscreenPreviewService>);
|
|
static_assert(std::is_same_v<eve::editor::EditorGizmoPreviewBuilder,
|
|
eve::domain_gizmo_editing::EditorGizmoPreviewBuilder>);
|
|
static_assert(std::is_same_v<eve::editor::ParticleGraphDomain, eve::particles_editing::ParticleGraphDomain>);
|
|
static_assert(std::is_same_v<eve::editor::TextureRecipeTarget,
|
|
eve::procgen_editing::TextureRecipeTarget>);
|
|
static_assert(std::is_same_v<eve::editor::UiDocumentTarget, eve::ui_editing::UiDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::UiThemeCatalogTarget, eve::ui_editing::UiThemeCatalogTarget>);
|
|
static_assert(std::is_same_v<eve::editor::InputMapTarget, eve::input_editing::InputMapTarget>);
|
|
static_assert(std::is_same_v<eve::editor::Hd2dDocumentTarget, eve::hd2d_editing::Hd2dDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::HouseGenDocumentTarget,
|
|
eve::housegen_editing::HouseGenDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::FluidSimulationTarget, eve::fluids_editing::FluidSimulationTarget>);
|
|
static_assert(std::is_same_v<eve::editor::SurfaceFluidTarget, eve::fluids_editing::SurfaceFluidTarget>);
|
|
static_assert(std::is_same_v<eve::editor::VolumeFluidTarget, eve::fluids_editing::VolumeFluidTarget>);
|
|
static_assert(std::is_same_v<eve::editor::Light3DDocumentTarget,
|
|
eve::lighting_editing::Light3DDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::VirtualGeometryDocumentTarget,
|
|
eve::virtualgeometry_editing::VirtualGeometryDocumentTarget>);
|
|
static_assert(std::is_same_v<eve::editor::VoxelPaletteTarget, eve::voxel_editing::VoxelPaletteTarget>);
|
|
static_assert(std::is_same_v<eve::editor::VoxelCatalogTarget, eve::voxel_editing::VoxelCatalogTarget>);
|
|
static_assert(std::is_same_v<eve::editor::VoxelModelValue, eve::voxel_editing::VoxelModelValue>);
|
|
static_assert(!std::is_copy_constructible_v<eve::editing::Result<int>>);
|
|
static_assert(!std::is_copy_constructible_v<eve::editing::Result<void>>);
|
|
|
|
TEST_CASE("editing.contracts.ids_values_and_editor_compatibility") {
|
|
using namespace eve::editing;
|
|
|
|
const CommandId command("scene.object.create");
|
|
CHECK_EQ(command.value(), std::string("scene.object.create"));
|
|
CHECK_EQ(eve::editor::CommandId("scene.object.create"), command);
|
|
|
|
Value::Object root;
|
|
root["name"] = "Station";
|
|
root["position"] = Value::Array{1.0, 2.0, 3.0};
|
|
const Value value(std::move(root));
|
|
CHECK_EQ(static_cast<int>(value.type()), static_cast<int>(Value::Type::Object));
|
|
CHECK(value.isWithinLimits(4, 16, 128));
|
|
CHECK(!value.isWithinLimits(1, 16, 128));
|
|
}
|
|
|
|
TEST_CASE("editing.contracts.property_path_is_textual") {
|
|
using namespace eve::editing;
|
|
const PropertyPath left("layout.size");
|
|
const PropertyPath same("layout.size");
|
|
const PropertyPath right("layout.position");
|
|
CHECK(left == same);
|
|
CHECK(left != right);
|
|
CHECK_EQ(left.value(), std::string("layout.size"));
|
|
}
|
|
|
|
TEST_CASE("editing.contracts.structured_result") {
|
|
using namespace eve::editing;
|
|
|
|
const auto accepted = eve::editing::applied<Value>(Value("ready"));
|
|
CHECK(accepted.ok());
|
|
CHECK_EQ(*accepted.value().getIf<std::string>(), std::string("ready"));
|
|
|
|
const auto rejected = eve::editing::failed<void>(Status::Rejected, RuleId("authoring.invalid"), "invalid input");
|
|
CHECK(!rejected.ok());
|
|
CHECK_EQ(rejected.diagnostics().size(), size_t{1});
|
|
CHECK_EQ(eve::editing::diagnosticRule(rejected.diagnostics().front()).value(),
|
|
std::string("authoring.invalid"));
|
|
rejected.ignore();
|
|
}
|