示例#1
0
        public void AssignCorrectInstance_ToICombatStatisticsContainerParameterCurrentComabtStatisticsProperty()
        {
            // Arrange
            var combatStatisticsFactory = new Mock <ICombatStatisticsFactory>();

            var enterCombatCommandResolutionHandler = new MockEnterCombatCommandResolutionHandler(combatStatisticsFactory.Object);

            var command = new Mock <ICommand>();
            var combatStatisticsContainer = new Mock <ICombatStatisticsContainer>();

            ICombatStatistics actualCombatStatisticsInstance = null;
            var currentCombatStatistics = new Mock <ICombatStatistics>();
            var allCombatStatistics     = new Mock <ICollection <ICombatStatistics> >();

            combatStatisticsContainer.SetupGet(c => c.AllCombatStatistics).Returns(allCombatStatistics.Object);
            combatStatisticsContainer.SetupGet(c => c.CurrentCombatStatistics).Returns(currentCombatStatistics.Object);
            combatStatisticsContainer.SetupSet(c => c.CurrentCombatStatistics = It.IsAny <ICombatStatistics>()).Callback <ICombatStatistics>((combatStats) => actualCombatStatisticsInstance = combatStats);

            var combatStatistics = new Mock <ICombatStatistics>();

            combatStatisticsFactory.Setup(f => f.CreateCombatStatistics()).Returns(combatStatistics.Object);

            var expectedComabtStatisticsInstance = combatStatistics.Object;

            // Act
            enterCombatCommandResolutionHandler.HandleCommand(command.Object, combatStatisticsContainer.Object);

            // Assert
            Assert.That(actualCombatStatisticsInstance, Is.SameAs(expectedComabtStatisticsInstance));
        }
示例#2
0
        protected virtual void CurrentCombatChanged(ICombatStatistics combatStatistics)
        {
            Guard.WhenArgument(combatStatistics, nameof(ICombatStatistics)).IsNull().Throw();

            var currentCombatStatisticsChangedEventArgs = this.currentCombatStatisticsChangedEventArgsFactory.CreateCurrentCombatStatisticsChangedEventArgs(combatStatistics);

            this.OnCurrentCombatChanged?.Invoke(this, currentCombatStatisticsChangedEventArgs);
        }
示例#3
0
        private TimeSpan GetCombatDuration(ICombatStatistics combatStatistics)
        {
            if (combatStatistics.EnterCombatTime > combatStatistics.ExitCombatTime)
            {
                combatStatistics.ExitCombatTime = combatStatistics.ExitCombatTime.AddDays(1);
            }

            return(combatStatistics.ExitCombatTime - combatStatistics.EnterCombatTime);
        }
示例#4
0
        public void ThrowArgumentNullException_WhenICombatStatisticsParameterIsNull()
        {
            // Arrange
            ICombatStatistics combatStatistics = null;

            // Act & Assert
            Assert.That(
                () => new CurrentCombatStatisticsChangedEventArgs(combatStatistics),
                Throws.InstanceOf <ArgumentNullException>().With.Message.Contains(nameof(ICombatStatistics)));
        }
示例#5
0
        private IFinalizedCombatStatistics GetHealingDoneAndHealingDonePerSecond(ICombatStatistics combatStatistics, IFinalizedCombatStatistics finalizedCombatStatistics)
        {
            var healingDone          = combatStatistics.HealingDone;
            var healingDonePerSecond = healingDone / finalizedCombatStatistics.CombatDurationInSeconds;

            finalizedCombatStatistics.HealingDone          = healingDone;
            finalizedCombatStatistics.HealingDonePerSecond = healingDonePerSecond;

            return(finalizedCombatStatistics);
        }
示例#6
0
        private IFinalizedCombatStatistics GetDamageTakenAndDamageTakenPerSecond(ICombatStatistics combatStatistics, IFinalizedCombatStatistics finalizedCombatStatistics)
        {
            var damageTaken          = combatStatistics.DamageTaken;
            var damageTakenPerSecond = damageTaken / finalizedCombatStatistics.CombatDurationInSeconds;

            finalizedCombatStatistics.DamageTaken          = damageTaken;
            finalizedCombatStatistics.DamageTakenPerSecond = damageTakenPerSecond;

            return(finalizedCombatStatistics);
        }
示例#7
0
        private IFinalizedCombatStatistics GetDamageDoneAndDamageDonePerSecond(ICombatStatistics combatStatistics, IFinalizedCombatStatistics finalizedCombatStatistics)
        {
            var damageDone          = combatStatistics.DamageDone;
            var damageDonePerSecond = damageDone / finalizedCombatStatistics.CombatDurationInSeconds;

            finalizedCombatStatistics.DamageDone          = damageDone;
            finalizedCombatStatistics.DamageDonePerSecond = damageDonePerSecond;

            return(finalizedCombatStatistics);
        }
示例#8
0
        public void ThrowArgumentNullException_WhenICombatStatisticsParameterIsNull()
        {
            // Arrange
            var finalizedCombatStatisticsFactory = new Mock <IFinalizedCombatStatisticsFactory>();

            var combatStatisticsFinalizationStrategy = new CombatStatisticsFinalizationStrategy(finalizedCombatStatisticsFactory.Object);

            ICombatStatistics combatStatistics = null;

            // Act & Assert
            Assert.That(
                () => combatStatisticsFinalizationStrategy.FinalizeCombatStatistics(combatStatistics),
                Throws.InstanceOf <ArgumentNullException>().With.Message.Contains(nameof(ICombatStatistics)));
        }
示例#9
0
        public IFinalizedCombatStatistics FinalizeCombatStatistics(ICombatStatistics combatStatistics)
        {
            Guard.WhenArgument(combatStatistics, nameof(ICombatStatistics)).IsNull().Throw();

            var finalizedCombatStatistics = this.finalizedCombatStatisticsFactory.CreateFinalizedCombatStatistics();

            finalizedCombatStatistics.CharacterName           = combatStatistics.CharacterName;
            finalizedCombatStatistics.CombatDurationInSeconds = this.GetCombatDurationInSeconds(combatStatistics);

            finalizedCombatStatistics = this.GetDamageDoneAndDamageDonePerSecond(combatStatistics, finalizedCombatStatistics);
            finalizedCombatStatistics = this.GetDamageTakenAndDamageTakenPerSecond(combatStatistics, finalizedCombatStatistics);
            finalizedCombatStatistics = this.GetHealingDoneAndHealingDonePerSecond(combatStatistics, finalizedCombatStatistics);

            return(finalizedCombatStatistics);
        }
示例#10
0
        public ILiveCombatStatistics CreateLiveCombatStatistics(ICombatStatistics combatStatistics)
        {
            if (combatStatistics == null)
            {
                return(null);
            }

            var liveCombatStatistics = this.liveCombatStatisticsFactory.CreateLiveCombatStatistics();

            liveCombatStatistics.CharacterName        = combatStatistics.CharacterName;
            liveCombatStatistics.CombatDuration       = this.GetCombatDuration(combatStatistics);
            liveCombatStatistics.DamageDonePerSecond  = this.GetDamageDonePerSecond(liveCombatStatistics, combatStatistics);
            liveCombatStatistics.HealingDonePerSecond = this.GetHealingDonePerSecond(liveCombatStatistics, combatStatistics);

            return(liveCombatStatistics);
        }
示例#11
0
        public ExitCombatEventArgs(ICombatStatistics combatStatistics)
        {
            Guard.WhenArgument(combatStatistics, nameof(ICombatStatistics)).IsNull().Throw();

            this.CombatStatistics = combatStatistics;
        }
示例#12
0
 private double GetHealingDonePerSecond(ILiveCombatStatistics liveCombatStatistics, ICombatStatistics combatStatistics)
 {
     return(combatStatistics.HealingDone / liveCombatStatistics.CombatDuration.TotalSeconds);
 }
示例#13
0
        private double GetCombatDurationInSeconds(ICombatStatistics combatStatistics)
        {
            var timeSpan = combatStatistics.ExitCombatTime - combatStatistics.EnterCombatTime;

            return(timeSpan.TotalSeconds);
        }