Beispiel #1
0
 public void Initialize(ISpecs <ValidatingOrderProcessor> state)
 {
     state.GetMockFor <IInventory>()
     .Setup(i => i.IsQuantityAvailable("TestPart", 10))
     .Returns(true)
     .Verifiable();
 }
 public void Initialize(ISpecs <WorkoutEventHandler> state)
 {
     state.GetMockFor <IRepository <WorkoutViewModel> >()
     .Setup(r => r.UpdateAsync(It.IsAny <WorkoutViewModel>()))
     .Callback((WorkoutViewModel w) => Callback = w)
     .Returns(Task.CompletedTask);
 }
 public void Initialize(ISpecs <TotalUpdater> state)
 {
     state.SUT.Set(new List <GoalAmountRequired>
     {
         new GoalAmountRequired(4, DateTime.Now.AddHours(-24))
     });
 }
        public LinkedList <string> Serialize(ISpecs specs, OnSerialized?onSerialized)
        {
            LinkedList <string> argList = new();

            _SerializeOptions(specs.Options, argList, onSerialized);
            _SerializeArguments(specs.Arguments, argList, onSerialized);
            return(argList);
        }
        /// <summary>
        /// <inheritdoc cref="Deserialize(System.Collections.Generic.IEnumerable{string},Decoherence.CommandLineSerialization.ISpecs,Decoherence.CommandLineSerialization.OnDeserialized?)"/>
        /// </summary>
        /// <param name="argList">命令行参数,本集合会被修改,调用完毕后集合内是剩余的命令行参数</param>
        /// <param name="specs">命令行参数说明</param>
        /// <param name="onDeserialized">当反序列化成功时调用</param>
        public void Deserialize(LinkedList <string> argList,
                                ISpecs specs,
                                OnDeserialized?onDeserialized)
        {
            var nodeAfterDemarcate = _DeserializeOptions(argList.First, specs, onDeserialized);

            _DeserializeArguments(argList, nodeAfterDemarcate, specs, onDeserialized);
        }
		public void ValidateSpec(ISpecs spec)
		{
			//NOTE: Other validations may be performed in the future.  For now,
			//		just verify that everything in the spec's assembly that derives
			//		from SpecsForConfiguration has the correct attribute.
			var assembly = spec.GetType().Assembly;

			_validationResults.GetOrAdd(assembly.FullName, _ => ValidateAssembly(assembly));
		}
 public void Initialize(ISpecs<ChallengeService> state)
 {
     state.GetMockFor<IEventStore>().Setup(e => e.Get(It.IsAny<IAggregateIdentity>()))
         .Returns(new List<IEvent>
         {
             new ChallengeCreated(It.IsAny<ChallengeId>(),It.IsAny<int>(),It.IsAny<string>(),It.IsAny<DateTime>()),
             new ChallengePaused(It.IsAny<TimeSpan>(),It.IsAny<DateTime>())
         });
 }
Beispiel #8
0
        public void ApplySpecInitTo(ISpecs specs)
        {
            var behaviors = FindBehaviorsFor(specs);

            foreach (var behavior in behaviors)
            {
                behavior.ApplySpecInitTo(specs);
            }
        }
		public void ApplyAfterClassUnderTestInitializedTo(ISpecs specs)
		{
			var behaviors = FindBehaviorsFor(specs);

			foreach (var behavior in behaviors)
			{
				behavior.ApplyAfterClassUnderTestInitializedTo(specs);
			}
		}
Beispiel #10
0
		public void ApplySpecInitTo(ISpecs specs)
		{
			var behaviors = FindBehaviorsFor(specs);

			foreach (var behavior in behaviors)
			{
				behavior.ApplySpecInitTo(specs);
			}
		}
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="args">命令行参数</param>
        /// <param name="specs">命令行参数说明</param>
        /// <param name="onDeserialized">当反序列化成功时调用</param>
        /// <returns>反序列化后剩余的命令行参数</returns>
        public LinkedList <string> Deserialize(IEnumerable <string> args,
                                               ISpecs specs,
                                               OnDeserialized?onDeserialized)
        {
            LinkedList <string> argList = new(args);

            Deserialize(argList, specs, onDeserialized);
            return(argList);
        }
Beispiel #12
0
        public void ValidateSpec(ISpecs spec)
        {
            //NOTE: Other validations may be performed in the future.  For now,
            //		just verify that everything in the spec's assembly that derives
            //		from SpecsForConfiguration has the correct attribute.
            var assembly = spec.GetType().Assembly;

            _validationResults.GetOrAdd(assembly.FullName, _ => ValidateAssembly(assembly));
        }
Beispiel #13
0
        public void ApplyAfterClassUnderTestInitializedTo(ISpecs specs)
        {
            var behaviors = FindBehaviorsFor(specs);

            foreach (var behavior in behaviors)
            {
                behavior.ApplyAfterClassUnderTestInitializedTo(specs);
            }
        }
Beispiel #14
0
 public void Initialize(ISpecs <MoneyWrapper> state)
 {
     state.GetMockFor <ICurrencyLookup>().Setup(l => l.FindCurrency("NOK"))
     .Returns(new CurrencyDetails {
         CurrencyCode = "NOK", DecimalPlaces = 2, InUse = true
     });
     state.GetMockFor <ICurrencyLookup>().Setup(l => l.FindCurrency("SEK"))
     .Returns(new CurrencyDetails {
         CurrencyCode = "SEK", DecimalPlaces = 2, InUse = true
     });
 }
        private bool _TryGetOption(string optionName, ISpecs specs, ISet <IOption> parsedOptions, [NotNullWhen(true)] out IOption?option)
        {
            if (specs.TryGetOption(optionName, out option))
            {
                if (!parsedOptions.Contains(option))
                {
                    if (option.ValueType != ValueType.Multi)
                    {// -a1 -a2 -a3 可以匹配多次
                        parsedOptions.Add(option);
                    }

                    return(true);
                }
            }

            return(false);
        }
Beispiel #16
0
 public ObjectSpecs(
     ISpecs specs,
     OnDeserializeObject onBeginDeserializeObject,
     OnDeserialized onDeserialized,
     OnDeserializeObject onEndDeserializeObject,
     OnSerializeObject onBeginSerializeObject,
     OnSerialized onSerialized,
     OnSerializeObject onEndSerializeObject)
 {
     mSpecs = specs;
     mOnBeginDeserializeObject = onBeginDeserializeObject;
     mOnDeserialized           = onDeserialized;
     mOnEndDeserializeObject   = onEndDeserializeObject;
     mOnBeginSerializeObject   = onBeginSerializeObject;
     mOnSerialized             = onSerialized;
     mOnEndSerializeObject     = onEndSerializeObject;
 }
Beispiel #17
0
        public static void FakeAjaxRequest <TController>(this ISpecs <TController> specs)
            where TController : Controller
        {
            if (!(specs.SUT.ControllerContext is FakeControllerContext))
            {
                if (specs.SUT.ControllerContext != null)
                {
                    throw new NotSupportedException("The FakeAjaxRequest extension method can only be used if the current ControllerContext is of type FakeControllerContext.");
                }

                specs.UseFakeContextForController();
            }

            specs.GetMockFor <IHeadersParamsProvider>().Setup(x => x.Values).Returns(
                new NameValueCollection()
            {
                { "X-Requested-With", "XMLHttpRequest" }
            });
        }
        private void _DeserializeArguments(LinkedList <string> argList, LinkedListNode <string>?nodeAfterDemarcate, ISpecs specs, OnDeserialized?onDeserialized)
        {
            if (specs.Arguments.Count <= 0)
            {
                return;
            }

            var           arguments             = specs.Arguments;
            List <string> parsingArgumentValues = new();
            IArgument?    parsingArgument       = null;
            var           i    = 0;
            var           node = nodeAfterDemarcate ?? argList.First;

            while (node != null)
            {
                var arg = node.Value;

                if (nodeAfterDemarcate == null && !_IsNonOption(_MatchArg(arg)))
                {// 跳过"-"开头
                    node = node.Next;
                    continue;
                }

                if (parsingArgument != null)
                {
                    parsingArgumentValues.Add(arg);
                    node = _ConsumeNode(node);
                    continue;
                }

                if (i >= arguments.Count)
                {
                    if (parsingArgument == null)
                    {// 无事可做直接退出循序
                        break;
                    }

                    continue;
                }

                var argument = arguments[i++];
                if (argument.ValueType == ValueType.Single)
                {
                    onDeserialized?.Invoke(argument, _DeserializeSingleValue(argument, arg));
                }
                else if (argument.ValueType == ValueType.Sequence)
                {
                    parsingArgumentValues.Add(arg);
                    parsingArgument = argument;
                }

                node = _ConsumeNode(node);
            }

            // 处理多值argument
            if (parsingArgument != null)
            {
                onDeserialized?.Invoke(parsingArgument, _DeserializeMultiValue(parsingArgument, parsingArgumentValues));
            }
        }
        private LinkedListNode <string>?_DeserializeOptions(LinkedListNode <string>?node, ISpecs specs, OnDeserialized?onDeserialized)
        {
            Dictionary <IOption, List <string> > parsingMultiValueOptions = new();
            StringBuilder           shortOptionHolder  = new();
            HashSet <IOption>       parsedOptions      = new();
            LinkedListNode <string>?nodeAfterDemarcate = null;
            IOption?parsingOption = null;

            // 按顺序处理每个参数,解析option
            while (node != null)
            {
                var arg = node.Value;

                var m = _MatchArg(arg);
                if (_IsDemarcated(m))
                {// 处理"--"
                    if (parsingOption != null)
                    {
                        _ParseParsingOption(null, onDeserialized, parsingOption, parsingMultiValueOptions);
                    }

                    nodeAfterDemarcate = node.Next;
                    break;
                }

                if (parsingOption != null)
                {// 这里优先解析parsingOption的Value,就算当前arg由-开头(比如-a、--aaa)也当做value处理
                    parsingOption = _ParseParsingOption(arg, onDeserialized, parsingOption, parsingMultiValueOptions);
                    node          = _ConsumeNode(node);
                    continue;
                }

                if (_IsLongOption(m))
                {
                    var optionName    = m.Groups[3].Value;
                    var appendedValue = m.Groups[4].Value == "=" ? m.Groups[5].Value : null; // 有"="时可能空值可能有值,没有则为null

                    if (_TryGetOption(optionName, specs, parsedOptions, out var option))
                    {
                        _DeserializeOption(onDeserialized, option, appendedValue, parsingMultiValueOptions, ref parsingOption);
                        node = _ConsumeNode(node);
                    }
                    else
                    {
                        node = node.Next;
                    }

                    continue;
                }

                if (_IsShortOption(m))
                {
                    shortOptionHolder.Clear();
                    shortOptionHolder.Append(arg);

                    for (int i = 1; i < shortOptionHolder.Length; ++i)
                    {
                        if (_TryGetOption(shortOptionHolder[i].ToString(), specs, parsedOptions, out var option))
                        {
                            int    removeCount   = shortOptionHolder.Length - i;
                            string?appendedValue = null;

                            if (option.ValueType == ValueType.Non)
                            {
                                removeCount = 1;
                            }
                            else if (i < shortOptionHolder.Length - 1)
                            {// 只要不是NonValue,在后面还有字符的情况下,都要把字符吃光变成值
                                appendedValue = shortOptionHolder.ToString(i + 1, shortOptionHolder.Length - (i + 1));
                            }

                            _DeserializeOption(onDeserialized, option, appendedValue, parsingMultiValueOptions, ref parsingOption);
                            shortOptionHolder.Remove(i, removeCount);
                        }
                    }

                    if (shortOptionHolder.Length <= 1)
                    {
                        node = _ConsumeNode(node);
                    }
                    else
                    {
                        node.Value = shortOptionHolder.ToString();
                        node       = node.Next;
                    }

                    continue;
                }

                node = node.Next;
            }

            // 处理多值option
            foreach (var kv in parsingMultiValueOptions)
            {
                var option = kv.Key;
                var values = kv.Value;

                onDeserialized?.Invoke(option, _DeserializeMultiValue(option, values));
                parsedOptions.Add(option);
            }

            // 反序列化未匹配的Non类型值
            foreach (var option  in specs.Options)
            {
                if (option.ValueType != ValueType.Non || parsedOptions.Contains(option))
                {
                    continue;
                }

                onDeserialized?.Invoke(option, _DeserializeNonValue(option, false));
            }

            return(nodeAfterDemarcate);
        }
 public void Initialize(ISpecs <WorkoutEventHandler> state)
 {
     state.GetMockFor <IRepository <WorkoutViewModel> >().Setup(r => r.GetAsync(It.IsAny <Guid>()))
     .Returns(Task.FromResult(new WorkoutViewModel()));
 }
Beispiel #21
0
 public void Initialize(ISpecs <object> state)
 {
     state.GetMockFor <TextWriter>().Object.Write(_name);
 }
Beispiel #22
0
 public void Initialize(ISpecs <TotalUpdater> state)
 {
     state.SUT.Start();
 }
 public void Initialize(ISpecs<ChallengeService> state)
 {
     state.GetMockFor<IRepository<ChallengeViewModel>>().Setup(c => c.GetAsync(It.IsAny<Guid>()))
         .Returns(Task.FromResult(new ChallengeViewModel()));
 }
Beispiel #24
0
 public void Initialize(ISpecs <DailyBudget> state)
 {
     state.SUT.AddOutgo(70m, "description", NOW);
 }
Beispiel #25
0
 public Func <object> GetInitializationMethodFor(ISpecs specs)
 {
     return(_stack.Reverse().Select(c => c.GetInitializationMethodFor(specs.GetType())).FirstOrDefault(i => i != null));
 }
Beispiel #26
0
 public void Initialize(ISpecs <ValidatingOrderProcessor> state)
 {
     state.GetMockFor <IValidator <Order> >()
     .Setup(v => v.Validate(It.IsAny <Order>()))
     .Returns(false);
 }
Beispiel #27
0
		public Func<object> GetInitializationMethodFor(ISpecs specs)
		{
			return _stack.Reverse().Select(c => c.GetInitializationMethodFor(specs.GetType())).FirstOrDefault(i => i != null);
		}
Beispiel #28
0
        public AutofacAutoMocker(ISpecs <TSut> specsFor)
        {
            _specsFor = (SpecsFor <TSut>)specsFor;

            InternalMocker = _specsFor.CreateInternalMocker();
        }
 public void Initialize(ISpecs <MeasurementService> state)
 {
     state.GetMockFor <IRepository <MeasurementViewModel> >().Setup(r => r.GetAsync(It.IsAny <Guid>()))
     .Returns(Task.FromResult(new MeasurementViewModel()));
 }
        public StructureMapAutoMocker(ISpecs <TSut> specsFor)
        {
            _specsFor = (SpecsFor <TSut>)specsFor;

            MoqAutoMocker = new MoqAutoMocker <TSut>();
        }
Beispiel #31
0
 public void Initialize(ISpecs <DailyBudget> state)
 {
     state.SUT.SetPeriod(Currentstart(), Currentstart().AddDays(10));
 }
 /// <summary>
 /// 通过name获取Option。LongName长度至少为2所以不用担心LongName和ShortName相同。
 /// </summary>
 /// <param name="specs"></param>
 /// <param name="name"></param>
 /// <param name="option"></param>
 /// <returns></returns>
 public static bool TryGetOption(this ISpecs specs, string name, [NotNullWhen(true)] out IOption?option)
 {
     option = specs.Options.Find(item => item.ShortName?.ToString() == name || item.LongName == name);
     return(option != null);
 }
 public static void UseFakeContextForController <TController>(this ISpecs <TController> specs)
     where TController : Controller
 {
     specs.SUT.ControllerContext = specs.MockContainer.GetInstance <FakeControllerContext>();
 }
Beispiel #34
0
 public SpecsForEngine(ISpecs <T> specs, IBehaviorStack currentBehaviors, ISpecValidator validator)
 {
     _specs            = specs;
     _currentBehaviors = currentBehaviors;
     _validator        = validator;
 }