Esempio n. 1
0
        public void Load_ShouldLoadInputMappingFromFile(LoadTestCase testCase)
        {
            // Arrange
            const string filePath = "input mapping file path";

            var assetInfo = new AssetInfo(AssetId.CreateUnique(), InputAssetTypes.InputMapping, filePath);
            var assetData = AssetData.CreateWithJsonContent(assetInfo.AssetId, assetInfo.AssetType, testCase.InputMappingAssetContent);

            using var memoryStream = new MemoryStream();
            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var file = Substitute.For <IFile>();

            file.OpenRead().Returns(memoryStream);
            _fileSystem.GetFile(filePath).Returns(file);

            var inputMappingAssetLoader = new InputMappingAssetLoader(_fileSystem);

            // Act
            var actual = (InputMapping)inputMappingAssetLoader.LoadAsset(assetInfo, _assetStore);

            // Assert
            testCase.Assert(actual);
        }
Esempio n. 2
0
        public void SerializeAndDeserialize_WhenSpriteIsNotNull()
        {
            // Arrange
            var texture       = Substitute.For <ITexture>();
            var sprite        = new Sprite(texture, Vector2.Zero, Vector2.Zero, Vector2.Zero, 0);
            var spriteAssetId = AssetId.CreateUnique();

            var component = new SpriteRendererComponent
            {
                Visible          = false,
                SortingLayerName = "Some sorting layer",
                OrderInLayer     = 2,
                Sprite           = sprite
            };

            AssetStore.GetAssetId(sprite).Returns(spriteAssetId);
            AssetStore.GetAsset <Sprite>(spriteAssetId).Returns(sprite);

            // Act
            var actual = SerializeAndDeserialize(component);

            // Assert
            Assert.That(actual.Visible, Is.EqualTo(component.Visible));
            Assert.That(actual.SortingLayerName, Is.EqualTo(component.SortingLayerName));
            Assert.That(actual.OrderInLayer, Is.EqualTo(component.OrderInLayer));
            Assert.That(actual.Sprite, Is.EqualTo(sprite));
        }
        public void SerializeAndDeserialize_WhenInputMappingIsNotNull()
        {
            // Arrange
            var inputMapping        = new InputMapping();
            var inputMappingAssetId = AssetId.CreateUnique();

            var component = new InputComponent
            {
                InputMapping = inputMapping
            };

            AssetStore.GetAssetId(inputMapping).Returns(inputMappingAssetId);
            AssetStore.GetAsset <InputMapping>(inputMappingAssetId).Returns(inputMapping);

            // Act
            var actual = SerializeAndDeserialize(component);

            // Assert
            Assert.That(actual.InputMapping, Is.EqualTo(inputMapping));
            Assert.That(actual.HardwareInput, Is.EqualTo(HardwareInput.Empty));
            Assert.That(actual.ActionBindings, Is.Empty);
            Assert.That(actual.AxisBindings, Is.Empty);
            Assert.That(actual.ActionStates, Is.Empty);
            Assert.That(actual.AxisStates, Is.Empty);
        }
Esempio n. 4
0
        public void SerializeAndDeserialize_WhenCurrentAnimationIsNull()
        {
            // Arrange
            var animation        = CreateAnimation();
            var animationAssetId = AssetId.CreateUnique();

            var component = new SpriteAnimationComponent();

            component.AddAnimation("animation", animation);
            component.Position      = 0.7;
            component.PlaybackSpeed = 1.3;
            component.PlayInLoop    = true;

            AssetStore.GetAssetId(animation).Returns(animationAssetId);
            AssetStore.GetAsset <SpriteAnimation>(animationAssetId).Returns(animation);

            // Act
            var actual = SerializeAndDeserialize(component);

            // Assert
            Assert.That(actual.Animations, Has.Count.EqualTo(1));
            Assert.That(actual.Animations.Single().Key, Is.EqualTo("animation"));
            Assert.That(actual.Animations.Single().Value, Is.EqualTo(animation));
            Assert.That(actual.CurrentAnimation, Is.Null);
            Assert.That(actual.IsPlaying, Is.False);
            Assert.That(actual.Position, Is.EqualTo(component.Position));
            Assert.That(actual.PlaybackSpeed, Is.EqualTo(component.PlaybackSpeed));
            Assert.That(actual.PlayInLoop, Is.EqualTo(component.PlayInLoop));
        }
Esempio n. 5
0
        public void GetAsset_ShouldThrowException_WhenAssetWasNotRegistered()
        {
            // Arrange
            var notRegisteredAssetId = AssetId.CreateUnique();
            var assetStore           = GetAssetStore();

            // Act
            // Assert
            Assert.That(() => assetStore.GetAsset <object>(notRegisteredAssetId), Throws.TypeOf <AssetNotRegisteredException>());
        }
Esempio n. 6
0
        public void CreateUnique_CreatesUniqueAssetIds()
        {
            // Arrange
            // Act
            var assetId1 = AssetId.CreateUnique();
            var assetId2 = AssetId.CreateUnique();

            // Assert
            Assert.That(assetId1, Is.Not.EqualTo(assetId2));
        }
Esempio n. 7
0
        public void LoadAsset_ShouldLoadSpriteFromFile()
        {
            // Arrange
            const string assetFilePath  = @"some_directory\sprite_file_path";
            var          textureAssetId = AssetId.CreateUnique();

            var spriteAssetContent = new SpriteAssetContent
            {
                TextureAssetId = textureAssetId.Value,
                SourceUV       = new SerializableVector2 {
                    X = 123.456, Y = 234.567
                },
                SourceDimensions = new SerializableVector2 {
                    X = 345.456, Y = 456.567
                },
                Pivot = new SerializableVector2 {
                    X = 567.678, Y = 678.789
                },
                PixelsPerUnit = 123.456
            };

            var assetInfo = new AssetInfo(AssetId.CreateUnique(), RenderingAssetTypes.Sprite, assetFilePath);
            var assetData = AssetData.CreateWithJsonContent(assetInfo.AssetId, assetInfo.AssetType, spriteAssetContent);

            using var memoryStream = new MemoryStream();
            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var assetFile = Substitute.For <IFile>();

            assetFile.OpenRead().Returns(memoryStream);
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.GetFile(assetFilePath).Returns(assetFile);

            var assetStore = Substitute.For <IAssetStore>();
            var texture    = Substitute.For <ITexture>();

            assetStore.GetAsset <ITexture>(textureAssetId).Returns(texture);

            var spriteAssetLoader = new SpriteAssetLoader(fileSystem);

            // Act
            var actual = (Sprite)spriteAssetLoader.LoadAsset(assetInfo, assetStore);

            // Assert
            Assert.That(actual.SourceTexture, Is.EqualTo(texture));
            Assert.That(actual.SourceUV.X, Is.EqualTo(spriteAssetContent.SourceUV.X));
            Assert.That(actual.SourceUV.Y, Is.EqualTo(spriteAssetContent.SourceUV.Y));
            Assert.That(actual.SourceDimensions.X, Is.EqualTo(spriteAssetContent.SourceDimensions.X));
            Assert.That(actual.SourceDimensions.Y, Is.EqualTo(spriteAssetContent.SourceDimensions.Y));
            Assert.That(actual.Pivot.X, Is.EqualTo(spriteAssetContent.Pivot.X));
            Assert.That(actual.Pivot.Y, Is.EqualTo(spriteAssetContent.Pivot.Y));
            Assert.That(actual.PixelsPerUnit, Is.EqualTo(spriteAssetContent.PixelsPerUnit));
        }
Esempio n. 8
0
        public void UnloadAsset_ShouldThrowException_GivenIdOfNotRegisteredAsset()
        {
            // Arrange
            var assetId = AssetId.CreateUnique();

            var assetStore = GetAssetStore();

            // Act
            // Assert
            Assert.That(() => { assetStore.UnloadAsset(assetId); }, Throws.TypeOf <AssetNotRegisteredException>());
        }
Esempio n. 9
0
        public void GetAsset_ShouldThrowException_WhenThereIsAssetTypeMismatch()
        {
            // Arrange
            var assetId    = AssetId.CreateUnique();
            var assetStore = GetAssetStore();

            assetStore.RegisterAsset(new AssetInfo(assetId, new AssetType("AssetType.Object"), "some file path"));

            // Act
            // Assert
            Assert.That(() => assetStore.GetAsset <int>(assetId), Throws.TypeOf <AssetNotRegisteredException>());
        }
Esempio n. 10
0
        public void SerializeAndDeserialize_AssetId()
        {
            // Arrange
            _component.AssetIdProperty = AssetId.CreateUnique();

            TestComponent.SerializeAction   = (component, writer) => writer.WriteAssetId("AssetIdProperty", component.AssetIdProperty);
            TestComponent.DeserializeAction = (component, reader) => component.AssetIdProperty = reader.ReadAssetId("AssetIdProperty");

            // Act
            var actual = SerializeAndDeserialize(_component);

            // Assert
            Assert.That(actual.AssetIdProperty, Is.EqualTo(_component.AssetIdProperty));
        }
Esempio n. 11
0
 public void SetUp()
 {
     _assetId   = AssetId.CreateUnique();
     _assetType = new AssetType("AssetType");
     _buffer    = new byte[1000];
     Utils.Random.NextBytes(_buffer);
     _binaryContent = new MemoryStream(_buffer);
     _jsonContent   = new JsonContent
     {
         IntProperty    = 123,
         DoubleProperty = 123.456,
         StringProperty = "String 123"
     };
 }
Esempio n. 12
0
        public void SetUp()
        {
            var renderingBackend = Substitute.For <IRenderingBackend>();
            var renderer2D       = Substitute.For <IRenderer2D>();
            var fileSystem       = Substitute.For <IFileSystem>();

            _assetStore = Substitute.For <IAssetStore>();

            renderingBackend.Renderer2D.Returns(renderer2D);

            const string assetFilePath   = @"some_directory\texture_file_path";
            const string textureFilePath = @"some_directory\actual_texture_file_path";

            var textureAssetContent = new TextureAssetContent
            {
                TextureFilePath = "actual_texture_file_path"
            };

            _assetInfo = new AssetInfo(AssetId.CreateUnique(), RenderingAssetTypes.Texture, assetFilePath);
            var assetData    = AssetData.CreateWithJsonContent(_assetInfo.AssetId, _assetInfo.AssetType, textureAssetContent);
            var memoryStream = new MemoryStream();

            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var assetFile = Substitute.For <IFile>();

            assetFile.OpenRead().Returns(memoryStream);
            fileSystem.GetFile(assetFilePath).Returns(assetFile);

            var stream      = Substitute.For <Stream>();
            var textureFile = Substitute.For <IFile>();

            textureFile.OpenRead().Returns(stream);
            fileSystem.GetFile(textureFilePath).Returns(textureFile);

            _texture = Substitute.For <ITexture>();
            renderer2D.CreateTexture(stream).Returns(_texture);

            _textureAssetLoader = new TextureAssetLoader(renderingBackend, fileSystem);
        }
Esempio n. 13
0
        public void SerializeAndDeserialize_WhenSoundIsNotNull()
        {
            // Arrange
            var sound        = Substitute.For <ISound>();
            var soundAssetId = AssetId.CreateUnique();

            var component = new AudioSourceComponent
            {
                Sound     = sound,
                IsPlaying = true
            };

            AssetStore.GetAssetId(sound).Returns(soundAssetId);
            AssetStore.GetAsset <ISound>(soundAssetId).Returns(sound);

            // Act
            var actual = SerializeAndDeserialize(component);

            // Assert
            Assert.That(actual.Sound, Is.EqualTo(sound));
            Assert.That(actual.IsPlaying, Is.True);
        }
        public void SetUp()
        {
            _audioBackend = Substitute.For <IAudioBackend>();
            _fileSystem   = Substitute.For <IFileSystem>();
            _assetStore   = Substitute.For <IAssetStore>();

            const string      soundFilePath = "sound.wav";
            const SoundFormat soundFormat   = SoundFormat.Wav;

            const string assetFilePath     = "sound-asset-path";
            var          soundAssetContent = new SoundAssetContent
            {
                SoundFilePath = soundFilePath
            };

            _assetInfo = new AssetInfo(AssetId.CreateUnique(), AudioAssetTypes.Sound, assetFilePath);
            var assetData    = AssetData.CreateWithJsonContent(_assetInfo.AssetId, _assetInfo.AssetType, soundAssetContent);
            var memoryStream = new MemoryStream();

            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var assetFile = Substitute.For <IFile>();

            assetFile.OpenRead().Returns(memoryStream);
            _fileSystem.GetFile(assetFilePath).Returns(assetFile);

            var soundFile = Substitute.For <IFile>();
            var stream    = Substitute.For <Stream>();

            soundFile.OpenRead().Returns(stream);
            _fileSystem.GetFile(soundFilePath).Returns(soundFile);

            _sound = Substitute.For <ISound>();
            _audioBackend.CreateSound(stream, soundFormat).Returns(_sound);

            _soundAssetLoader = new SoundAssetLoader(_audioBackend, _fileSystem);
        }
Esempio n. 15
0
        public void LoadAsset_ThrowsException_WhenFileContentIsInvalid(LoadThrowsExceptionTestCase testCase)
        {
            // Arrange
            const string assetFilePath = "input mapping file path";

            var assetInfo = new AssetInfo(AssetId.CreateUnique(), InputAssetTypes.InputMapping, assetFilePath);
            var assetData = AssetData.CreateWithJsonContent(assetInfo.AssetId, assetInfo.AssetType, testCase.InputMappingAssetContent);

            using var memoryStream = new MemoryStream();
            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var file = Substitute.For <IFile>();

            file.OpenRead().Returns(memoryStream);
            _fileSystem.GetFile(assetFilePath).Returns(file);

            var inputMappingAssetLoader = new InputMappingAssetLoader(_fileSystem);

            // Act
            // Assert
            Assert.That(() => inputMappingAssetLoader.LoadAsset(assetInfo, _assetStore), Throws.TypeOf <InvalidInputMappingAssetContentException>());
        }
Esempio n. 16
0
        public void SerializeAndDeserialize_Object()
        {
            // Arrange
            _component.ObjectProperty = new TestComponent.CustomData
            {
                BoolProperty    = true,
                IntProperty     = 123,
                DoubleProperty  = 123.456,
                StringProperty  = "value",
                EnumProperty    = DateTimeKind.Utc,
                Vector2Property = new Vector2(12.34, 56.78),
                Vector3Property = new Vector3(1.23, 4.56, 7.89),
                AssetIdProperty = AssetId.CreateUnique(),
                ColorProperty   = Color.FromArgb(1, 2, 3, 4),
                ObjectProperty  = new TestComponent.CustomNestedData
                {
                    IntProperty    = 321,
                    DoubleProperty = 654.321
                }
            };

            TestComponent.SerializeAction = (component, writer) => writer.WriteObject("ObjectProperty", component.ObjectProperty, (customData, objectWriter) =>
            {
                objectWriter.WriteNull("NullProperty");
                objectWriter.WriteBool("BoolProperty", customData.BoolProperty);
                objectWriter.WriteInt("IntProperty", customData.IntProperty);
                objectWriter.WriteDouble("DoubleProperty", customData.DoubleProperty);
                objectWriter.WriteString("StringProperty", customData.StringProperty);
                objectWriter.WriteEnum("EnumProperty", customData.EnumProperty);
                objectWriter.WriteVector2("Vector2Property", customData.Vector2Property);
                objectWriter.WriteVector3("Vector3Property", customData.Vector3Property);
                objectWriter.WriteAssetId("AssetIdProperty", customData.AssetIdProperty);
                objectWriter.WriteColor("ColorProperty", customData.ColorProperty);
                objectWriter.WriteObject("ObjectProperty", customData.ObjectProperty, (customNestedData, nestedWriter) =>
                {
                    nestedWriter.WriteInt("IntProperty", customNestedData.IntProperty);
                    nestedWriter.WriteDouble("DoubleProperty", customNestedData.DoubleProperty);
                });
            });

            var actualDefined   = false;
            var actualUndefined = true;
            var actualNull      = false;
            var actualNotNull   = true;

            string[] objectProperties       = Array.Empty <string>();
            string[] nestedObjectProperties = Array.Empty <string>();

            TestComponent.DeserializeAction = (component, reader) =>
            {
                objectProperties         = reader.EnumerateObject("ObjectProperty").ToArray();
                component.ObjectProperty = reader.ReadObject("ObjectProperty", objectReader =>
                {
                    actualDefined          = objectReader.IsDefined("BoolProperty");
                    actualUndefined        = objectReader.IsDefined("UndefinedProperty");
                    actualNull             = objectReader.IsNull("NullProperty");
                    actualNotNull          = objectReader.IsNull("BoolProperty");
                    nestedObjectProperties = objectReader.EnumerateObject("ObjectProperty").ToArray();

                    return(new TestComponent.CustomData
                    {
                        BoolProperty = objectReader.ReadBool("BoolProperty"),
                        IntProperty = objectReader.ReadInt("IntProperty"),
                        DoubleProperty = objectReader.ReadDouble("DoubleProperty"),
                        StringProperty = objectReader.ReadString("StringProperty"),
                        EnumProperty = objectReader.ReadEnum <DateTimeKind>("EnumProperty"),
                        Vector2Property = objectReader.ReadVector2("Vector2Property"),
                        Vector3Property = objectReader.ReadVector3("Vector3Property"),
                        AssetIdProperty = objectReader.ReadAssetId("AssetIdProperty"),
                        ColorProperty = objectReader.ReadColor("ColorProperty"),
                        ObjectProperty = objectReader.ReadObject("ObjectProperty", nestedReader => new TestComponent.CustomNestedData
                        {
                            IntProperty = nestedReader.ReadInt("IntProperty"),
                            DoubleProperty = nestedReader.ReadDouble("DoubleProperty")
                        })
                    });
                });
            };

            // Act
            var actual = SerializeAndDeserialize(_component);

            // Assert
            Assert.That(actualDefined, Is.True);
            Assert.That(actualUndefined, Is.False);
            Assert.That(actualNull, Is.True);
            Assert.That(actualNotNull, Is.False);
            Assert.That(actual.ObjectProperty.BoolProperty, Is.EqualTo(_component.ObjectProperty.BoolProperty));
            Assert.That(actual.ObjectProperty.IntProperty, Is.EqualTo(_component.ObjectProperty.IntProperty));
            Assert.That(actual.ObjectProperty.DoubleProperty, Is.EqualTo(_component.ObjectProperty.DoubleProperty));
            Assert.That(actual.ObjectProperty.StringProperty, Is.EqualTo(_component.ObjectProperty.StringProperty));
            Assert.That(actual.ObjectProperty.EnumProperty, Is.EqualTo(_component.ObjectProperty.EnumProperty));
            Assert.That(actual.ObjectProperty.Vector2Property, Is.EqualTo(_component.ObjectProperty.Vector2Property));
            Assert.That(actual.ObjectProperty.Vector3Property, Is.EqualTo(_component.ObjectProperty.Vector3Property));
            Assert.That(actual.ObjectProperty.AssetIdProperty, Is.EqualTo(_component.ObjectProperty.AssetIdProperty));
            Assert.That(actual.ObjectProperty.ColorProperty, Is.EqualTo(_component.ObjectProperty.ColorProperty));
            Assert.That(actual.ObjectProperty.ObjectProperty.IntProperty, Is.EqualTo(_component.ObjectProperty.ObjectProperty.IntProperty));
            Assert.That(actual.ObjectProperty.ObjectProperty.DoubleProperty, Is.EqualTo(_component.ObjectProperty.ObjectProperty.DoubleProperty));
            Assert.That(objectProperties, Has.Length.EqualTo(11));
            Assert.That(objectProperties,
                        Is.EqualTo(new[]
            {
                "NullProperty", "BoolProperty", "IntProperty", "DoubleProperty", "StringProperty", "EnumProperty", "Vector2Property", "Vector3Property",
                "AssetIdProperty", "ColorProperty", "ObjectProperty"
            }));
            Assert.That(nestedObjectProperties, Has.Length.EqualTo(2));
            Assert.That(nestedObjectProperties, Is.EqualTo(new[] { "IntProperty", "DoubleProperty" }));
        }
Esempio n. 17
0
 private static AssetInfo CreateNewAssetInfo()
 {
     return(new AssetInfo(AssetId.CreateUnique(), new AssetType("AssetType.Object"), AssetFileUtils.AppendExtension("asset-file")));
 }
Esempio n. 18
0
        public void LoadAsset_ShouldLoadSpriteAnimationFromFile()
        {
            // Arrange
            const string assetFilePath  = @"some_directory\sprite_animation_file_path";
            const int    duration       = 123;
            var          sprite1AssetId = AssetId.CreateUnique();
            var          sprite2AssetId = AssetId.CreateUnique();
            var          sprite3AssetId = AssetId.CreateUnique();

            var spriteAnimationAssetContent = new SpriteAnimationAssetContent
            {
                DurationTicks = TimeSpan.FromSeconds(duration).Ticks,
                Frames        = new[]
                {
                    new SpriteAnimationAssetContent.Frame
                    {
                        Duration      = 1,
                        SpriteAssetId = sprite1AssetId.Value
                    },
                    new SpriteAnimationAssetContent.Frame
                    {
                        Duration      = 1.5,
                        SpriteAssetId = sprite2AssetId.Value
                    },
                    new SpriteAnimationAssetContent.Frame
                    {
                        Duration      = 0.5,
                        SpriteAssetId = sprite3AssetId.Value
                    }
                }
            };

            var assetInfo = new AssetInfo(AssetId.CreateUnique(), AnimationAssetTypes.SpriteAnimation, assetFilePath);
            var assetData = AssetData.CreateWithJsonContent(assetInfo.AssetId, assetInfo.AssetType, spriteAnimationAssetContent);

            using var memoryStream = new MemoryStream();
            assetData.Save(memoryStream);
            memoryStream.Position = 0;

            var sprite1 = new Sprite(Substitute.For <ITexture>(), Vector2.Zero, Vector2.Zero, Vector2.Zero, 0);
            var sprite2 = new Sprite(Substitute.For <ITexture>(), Vector2.Zero, Vector2.Zero, Vector2.Zero, 0);
            var sprite3 = new Sprite(Substitute.For <ITexture>(), Vector2.Zero, Vector2.Zero, Vector2.Zero, 0);

            var assetFile = Substitute.For <IFile>();

            assetFile.OpenRead().Returns(memoryStream);
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.GetFile(assetFilePath).Returns(assetFile);
            var assetStore = Substitute.For <IAssetStore>();

            assetStore.GetAsset <Sprite>(sprite1AssetId).Returns(sprite1);
            assetStore.GetAsset <Sprite>(sprite2AssetId).Returns(sprite2);
            assetStore.GetAsset <Sprite>(sprite3AssetId).Returns(sprite3);

            var spriteAnimationManagedAsset = new SpriteAnimationAssetLoader(fileSystem);

            // Act
            var actual = (SpriteAnimation)spriteAnimationManagedAsset.LoadAsset(assetInfo, assetStore);

            // Assert
            Assert.That(actual.Duration, Is.EqualTo(TimeSpan.FromSeconds(duration)));
            Assert.That(actual.Frames, Has.Count.EqualTo(3));
            Assert.That(actual.Frames[0].Duration, Is.EqualTo(1));
            Assert.That(actual.Frames[0].Sprite, Is.EqualTo(sprite1));
            Assert.That(actual.Frames[1].Duration, Is.EqualTo(1.5));
            Assert.That(actual.Frames[1].Sprite, Is.EqualTo(sprite2));
            Assert.That(actual.Frames[2].Duration, Is.EqualTo(0.5));
            Assert.That(actual.Frames[2].Sprite, Is.EqualTo(sprite3));
        }