Example #1
0
        public static Resolver GetResolver()
        {
            Mock <IDevice>           device     = new Mock <IDevice>();
            Mock <IEngineConfigFile> configFile = new Mock <IEngineConfigFile>();

            device.Setup(d => d.ConfigFile).Returns(configFile.Object);

            Mock <IBitmapLoader> bitmapLoader = new Mock <IBitmapLoader>();

            bitmapLoader.Setup(loader => loader.Load(It.IsAny <int>(), It.IsAny <int>())).Returns(new Mock <IBitmap>().Object);
            device.Setup(d => d.BitmapLoader).Returns(bitmapLoader.Object);

            Mock <IAssemblies> assemblies = new Mock <IAssemblies>();

            device.Setup(d => d.Assemblies).Returns(assemblies.Object);

            var mocks = new Mocks();

            device.Setup(d => d.FileSystem).Returns(mocks.FileSystem().Object);

            Mock <IBrushLoader> brushes = new Mock <IBrushLoader>();

            device.Setup(d => d.BrushLoader).Returns(brushes.Object);

            Mock <IGraphicsBackend> graphics = new Mock <IGraphicsBackend>();

            device.Setup(d => d.GraphicsBackend).Returns(graphics.Object);

            Mock <IFontLoader> fonts = new Mock <IFontLoader>();

            device.Setup(d => d.FontLoader).Returns(fonts.Object);

            Mock <IKeyboardState> keyboard = new Mock <IKeyboardState>();

            device.Setup(d => d.KeyboardState).Returns(keyboard.Object);

            return(new Resolver(device.Object));
        }
Example #2
0
        public async Task CanOnlyAddOneComponentTest()
        {
            Resolver resolver = Mocks.GetResolver();

            resolver.Builder.RegisterType <OnlyOneComponent>().As <IOnlyOneComponent>();
            resolver.Build();
            for (int i = 0; i < 100; i++)
            {
                OnlyOneComponent.LastID = 0;
                AGSEmptyEntity entity = new AGSEmptyEntity("Test" + Guid.NewGuid(), resolver);

                List <Task> tasks = new List <Task>();
                for (int j = 0; j < 10; j++)
                {
                    tasks.Add(Task.Run(() => entity.AddComponent <IOnlyOneComponent>()));
                }
                await Task.WhenAll(tasks);

                var component = entity.AddComponent <IOnlyOneComponent>();

                component.AssertOne();
            }
        }
Example #3
0
 public void Init()
 {
     _mocks = Mocks.Init();
 }
Example #4
0
        public static IEnumerable <IObject> GetImplementors(Mocks mocks, Mock <IGameState> stateMock, IGameState state = null)
        {
            if (state == null && stateMock != null)
            {
                state = stateMock.Object;
            }
            mocks.Game().Setup(g => g.State).Returns(state);
            stateMock?.Setup(s => s.UI).Returns(new AGSConcurrentHashSet <IObject>());
            Mock <IInput> input    = new Mock <IInput>();
            Resolver      resolver = GetResolver();

            input.Setup(i => i.KeyUp).Returns(new Mock <IEvent <KeyboardEventArgs> >().Object);
            input.Setup(i => i.KeyDown).Returns(new Mock <IEvent <KeyboardEventArgs> >().Object);
            if (stateMock != null)
            {
                stateMock.Setup(s => s.Cutscene).Returns(mocks.Cutscene().Object);
            }

            Mock <IUIEvents> uiEvents = new Mock <IUIEvents>();
            Mock <IEvent <MouseButtonEventArgs> >   buttonEvent = new Mock <IEvent <MouseButtonEventArgs> >();
            Mock <IEvent <MousePositionEventArgs> > mouseEvent  = new Mock <IEvent <MousePositionEventArgs> >();

            uiEvents.Setup(u => u.MouseClicked).Returns(buttonEvent.Object);
            uiEvents.Setup(u => u.MouseDown).Returns(buttonEvent.Object);
            uiEvents.Setup(u => u.MouseUp).Returns(buttonEvent.Object);
            uiEvents.Setup(u => u.LostFocus).Returns(buttonEvent.Object);
            uiEvents.Setup(u => u.MouseEnter).Returns(mouseEvent.Object);
            uiEvents.Setup(u => u.MouseLeave).Returns(mouseEvent.Object);
            uiEvents.Setup(u => u.MouseMove).Returns(mouseEvent.Object);

            Mock <IGraphicsFactory> graphicsFactory = new Mock <IGraphicsFactory>();
            Func <ISprite>          getSprite       = () => new AGSSprite(resolver, mocks.MaskLoader().Object);

            graphicsFactory.Setup(g => g.GetSprite()).Returns(() => getSprite());
            AGSAnimationComponent animationComponent = new AGSAnimationComponent();

            Mock <IImage>           image           = new Mock <IImage>();
            Mock <IButtonComponent> buttonComponent = new Mock <IButtonComponent>();

            buttonComponent.Setup(b => b.HoverAnimation).Returns(new ButtonAnimation(new AGSSingleFrameAnimation(getSprite())));
            buttonComponent.Setup(b => b.IdleAnimation).Returns(new ButtonAnimation(new AGSSingleFrameAnimation(getSprite())));
            buttonComponent.Setup(b => b.PushedAnimation).Returns(new ButtonAnimation(new AGSSingleFrameAnimation(getSprite())));
            Mock <IAudioSystem>     audioSystem  = new Mock <IAudioSystem>();
            Mock <IRuntimeSettings> settings     = mocks.Settings();
            Mock <IRenderThread>    renderThread = new Mock <IRenderThread>();
            Mock <IUpdateThread>    updateThread = new Mock <IUpdateThread>();

            renderThread.Setup(u => u.RunBlocking(It.IsAny <Action>())).Callback <Action>(a => a());
            updateThread.Setup(u => u.RunBlocking(It.IsAny <Action>())).Callback <Action>(a => a());

            resolver.Builder.RegisterInstance(input.Object);
            resolver.Builder.RegisterInstance(state);
            resolver.Builder.RegisterInstance(uiEvents.Object);
            resolver.Builder.RegisterInstance(animationComponent).As <IAnimationComponent>();
            resolver.Builder.RegisterInstance(buttonComponent.Object);
            resolver.Builder.RegisterInstance(audioSystem.Object);
            resolver.Builder.RegisterInstance(new Mock <IRenderMessagePump>().Object);
            resolver.Builder.RegisterInstance(new Mock <IUpdateMessagePump>().Object);
            resolver.Builder.RegisterInstance(renderThread.Object);
            resolver.Builder.RegisterInstance(updateThread.Object);
            resolver.Builder.RegisterInstance(new Mock <ILabelRenderer>().Object);
            resolver.Builder.RegisterInstance(new Mock <ITexture>().Object);
            resolver.Builder.RegisterInstance(mocks.MaskLoader().Object).As <IMaskLoader>();
            resolver.Builder.RegisterInstance(settings.Object).As <IGameSettings>();
            resolver.Builder.RegisterInstance(settings.Object).As <IRuntimeSettings>();
            resolver.Builder.RegisterInstance(mocks.Game().Object);
            resolver.Build();

            Func <IObject> baseObj = () => new AGSObject("Test", resolver);

            mocks.Game().Setup(g => g.Events).Returns(resolver.Container.Resolve <IGameEvents>());
            mocks.Game().Setup(g => g.Factory).Returns(resolver.Container.Resolve <IGameFactory>());

            Mock <IOutfit> outfit = new Mock <IOutfit>();

            Func <IPanel> basePanel = () => new AGSPanel("Panel", resolver, image.Object);
            Func <ILabel> baseLabel = () => new AGSLabel("Label", resolver)
            {
                LabelRenderSize = new AGS.API.SizeF(100f, 50f)
            };
            var button = new AGSButton("Button", resolver)
            {
                LabelRenderSize = new AGS.API.SizeF(100f, 50f)
            };

            List <IObject> implmentors = new List <IObject>
            {
                baseObj().Hotspot("Object"),
                new AGSCharacter("Character", resolver, outfit.Object).Hotspot("Character"),
                basePanel().Hotspot("Panel"),
                baseLabel().Hotspot("Label"),
                button.Hotspot("Button"),
                new AGSInventoryWindow("Inventory", resolver, image.Object).Hotspot("Inventory"),
                new AGSSlider("Slider", resolver, image.Object).Hotspot("Slider"),
                new AGSCheckBox("Checkbox", resolver),
                new AGSTextbox("Textbox", resolver),
                new AGSComboBox("Combobox", resolver),
            };

            return(implmentors);
        }
Example #5
0
 public static Resolver GetResolver()
 {
     return(Mocks.GetResolver());
 }
        public void RoomProperlyRendered_Test()
        {
            int threadID = AGSGame.UIThreadID;

            AGSGame.UIThreadID = Environment.CurrentManagedThreadId;
            try
            {
                _mocks.Room().Setup(m => m.ShowPlayer).Returns(false);
                AGSViewport viewport = new AGSViewport(new AGSDisplayListSettings(), new AGSCamera(), Mocks.GetResolver());
                viewport.RoomProvider = new AGSSingleRoomProvider(_mocks.Room().Object);
                _mocks.GameState().Setup(m => m.Viewport).Returns(viewport);
                _mocks.GameState().Setup(m => m.GetSortedViewports()).Returns(new List <IViewport> {
                    _mocks.GameState().Object.Viewport
                });
                _areas.Clear(); _areas.Add(getArea());
                var roomObj = _mocks.Object(true);
                var uiObj   = _mocks.Object(true);
                roomObj.Setup(c => c.ID).Returns("roomObj");
                uiObj.Setup(c => c.ID).Returns("uiObj");
                _roomObjects.Clear(); _roomObjects.Add(roomObj.Object);
                _uiObjects.Clear(); _uiObjects.Add(uiObj.Object);

                var displayList = getDisplayList();
                var pipeline    = getPipeline(displayList);

                var roomRenderer    = new Mock <IRenderer>();
                var uiRenderer      = new Mock <IRenderer>();
                var roomInsturction = new Mock <IRenderInstruction>();
                var uiInstruction   = new Mock <IRenderInstruction>();
                roomRenderer.Setup(r => r.GetNextInstruction(_mocks.GameState().Object.Viewport)).Returns(roomInsturction.Object);
                uiRenderer.Setup(r => r.GetNextInstruction(_mocks.GameState().Object.Viewport)).Returns(uiInstruction.Object);
                pipeline.Subscribe("roomObj", roomRenderer.Object);
                pipeline.Subscribe("uiObj", uiRenderer.Object);

                IRendererLoop loop = getLoop(displayList, pipeline);
                Assert.IsTrue(loop.Tick()); //First tick just to tell the display list about our viewport, the second tick will have the objects to render
                displayList.GetDisplayList(_mocks.GameState().Object.Viewport);
                displayList.Update();
                pipeline.Update();
                Assert.IsTrue(loop.Tick());
                roomInsturction.Verify(r => r.Render(), Times.Once);
                uiInstruction.Verify(r => r.Render(), Times.Once);
            }
            finally
            {
                AGSGame.UIThreadID = threadID;
            }
        }
Example #7
0
        public async Task WalkTest(float fromX, float fromY, bool fromWalkable,
                                   float toX, float toY, bool toWalkable,
                                   float closeToX, float closeToY, bool hasCloseToWalkable)
        {
            //Setup:
            Mock <IEntity>                 entity        = new Mock <IEntity>();
            Mock <ITranslateComponent>     translate     = new Mock <ITranslateComponent>();
            Mock <IHasRoomComponent>       hasRoom       = new Mock <IHasRoomComponent>();
            Mock <IOutfitComponent>        outfitHolder  = new Mock <IOutfitComponent> ();
            Mock <IOutfit>                 outfit        = new Mock <IOutfit> ();
            Mock <IDrawableInfoComponent>  drawable      = new Mock <IDrawableInfoComponent>();
            Mock <IPathFinder>             pathFinder    = new Mock <IPathFinder> ();
            Mock <IFaceDirectionComponent> faceDirection = new Mock <IFaceDirectionComponent> ();
            Mock <IObjectFactory>          objFactory    = new Mock <IObjectFactory> ();
            Mock <IRoom>         room         = new Mock <IRoom> ();
            Mock <IViewport>     viewport     = new Mock <IViewport>();
            Mock <IArea>         area         = new Mock <IArea> ();
            Mock <IWalkableArea> walkableArea = new Mock <IWalkableArea>();
            Mock <IMask>         mask         = new Mock <IMask> ();
            Mock <ICutscene>     cutscene     = new Mock <ICutscene> ();
            Mock <IGameState>    gameState    = new Mock <IGameState> ();
            Mock <IGame>         game         = new Mock <IGame>();
            Mock <IGameEvents>   gameEvents   = new Mock <IGameEvents>();

            gameEvents.Setup(g => g.OnRepeatedlyExecute).Returns(_onRepeatedlyExecute);
            game.Setup(g => g.State).Returns(gameState.Object);
            game.Setup(g => g.Events).Returns(gameEvents.Object);
            gameState.Setup(s => s.Cutscene).Returns(cutscene.Object);
            gameState.Setup(r => r.Viewport).Returns(viewport.Object);
            room.Setup(r => r.Areas).Returns(new AGSBindingList <IArea>(1)
            {
                area.Object
            });
            walkableArea.Setup(w => w.IsWalkable).Returns(true);
            area.Setup(a => a.Enabled).Returns(true);
            // ReSharper disable CompareOfFloatsByEqualityOperator
            area.Setup(a => a.IsInArea(It.Is <PointF>(p => p.X == fromX && p.Y == fromY))).Returns(fromWalkable);
            area.Setup(a => a.IsInArea(It.Is <PointF>(p => p.X == toX && p.Y == toY))).Returns(toWalkable);
            area.Setup(a => a.IsInArea(It.Is <PointF>(p => p.X == toX - 1 && p.Y == toY - 1))).Returns(toWalkable);
            area.Setup(a => a.IsInArea(It.Is <PointF>(p => p.X == toX + 1 && p.Y == toY + 1))).Returns(toWalkable);
            area.Setup(a => a.IsInArea(It.Is <PointF>(p => p.X == closeToX && p.Y == closeToY))).Returns(hasCloseToWalkable);
            area.Setup(a => a.Mask).Returns(mask.Object);
            area.Setup(a => a.GetComponent <IWalkableArea>()).Returns(walkableArea.Object);
            float distance;

            area.Setup(a => a.FindClosestPoint(It.Is <PointF>(p => p.X == toX && p.Y == toY), out distance)).Returns(new PointF(closeToX, closeToY));
            // ReSharper restore CompareOfFloatsByEqualityOperator
            mask.Setup(m => m.Width).Returns(10);

            outfitHolder.Setup(o => o.Outfit).Returns(outfit.Object);

            float x = fromX;
            float y = fromY;

            hasRoom.Setup(o => o.Room).Returns(room.Object);
            translate.Setup(o => o.X).Returns(() => x);
            translate.Setup(o => o.Y).Returns(() => y);
            translate.Setup(o => o.Position).Returns(() => (x, y));
            translate.SetupSet(o => o.Position = It.IsAny <Position>()).Callback <Position>(f => (x, y, _) = f);
            translate.SetupSet(o => o.X        = It.IsAny <float>()).Callback <float>(f => x = f);
            translate.SetupSet(o => o.Y        = It.IsAny <float>()).Callback <float>(f => y = f);

            Mocks.Bind(entity, hasRoom);
            Mocks.Bind(entity, translate);
            Mocks.Bind(entity, faceDirection);
            Mocks.Bind(entity, outfitHolder);
            Mocks.Bind(entity, drawable);

            Position toLocation    = (toX, toY);
            Position closeLocation = (closeToX, closeToY);

            // ReSharper disable CompareOfFloatsByEqualityOperator
            pathFinder.Setup(p => p.GetWalkPoints(It.Is <Position>(l => l.X == fromX && l.Y == fromY),
                                                  It.Is <Position>(l => l.X == toX && l.Y == toY))).Returns(toWalkable ? new List <Position> {
                toLocation
            } : new List <Position>());

            pathFinder.Setup(p => p.GetWalkPoints(It.Is <Position>(l => l.X == fromX && l.Y == fromY),
                                                  It.Is <Position>(l => l.X == closeToX && l.Y == closeToY))).Returns(hasCloseToWalkable ? new List <Position> {
                closeLocation
            } : new List <Position>());
            // ReSharper restore CompareOfFloatsByEqualityOperator

            AGSWalkComponent walk = new AGSWalkComponent(pathFinder.Object, objFactory.Object, game.Object)
            {
                WalkStep = new PointF(4f, 4f), MovementLinkedToAnimation = false
            };

            bool walkShouldSucceed = fromWalkable && (toWalkable || hasCloseToWalkable);

            walk.Init(entity.Object, typeof(IWalkComponent));
            walk.AfterInit();

            //Act:
            bool walkSucceded = await walk.WalkAsync(toLocation);

            //Test:
            Assert.AreEqual(walkShouldSucceed, walkSucceded);

            if (walkShouldSucceed)
            {
                Assert.AreEqual(toWalkable ? toX : closeToX, x, 0.1f);
                Assert.AreEqual(toWalkable ? toY : closeToY, y, 0.1f);
            }
        }
        public void BindingCalledForExplicitTypeAlreadyAdded()
        {
            AGSEmptyEntity       entity = new AGSEmptyEntity("test" + Guid.NewGuid(), Mocks.GetResolver());
            AGSCropSelfComponent crop   = new AGSCropSelfComponent();

            entity.AddComponent <ICropSelfComponent>(crop);
            bool bindingCalled = false;

            entity.Bind <ICropSelfComponent>(c =>
            {
                Assert.AreSame(crop, c);
                bindingCalled = true;
            }, _ => {});
            Assert.IsTrue(bindingCalled);
        }