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>()) }); }
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); } }
/// <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); }
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); }
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; }
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())); }
public void Initialize(ISpecs <object> state) { state.GetMockFor <TextWriter>().Object.Write(_name); }
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())); }
public void Initialize(ISpecs <DailyBudget> state) { state.SUT.AddOutgo(70m, "description", NOW); }
public Func <object> GetInitializationMethodFor(ISpecs specs) { return(_stack.Reverse().Select(c => c.GetInitializationMethodFor(specs.GetType())).FirstOrDefault(i => i != null)); }
public void Initialize(ISpecs <ValidatingOrderProcessor> state) { state.GetMockFor <IValidator <Order> >() .Setup(v => v.Validate(It.IsAny <Order>())) .Returns(false); }
public Func<object> GetInitializationMethodFor(ISpecs specs) { return _stack.Reverse().Select(c => c.GetInitializationMethodFor(specs.GetType())).FirstOrDefault(i => i != null); }
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>(); }
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>(); }
public SpecsForEngine(ISpecs <T> specs, IBehaviorStack currentBehaviors, ISpecValidator validator) { _specs = specs; _currentBehaviors = currentBehaviors; _validator = validator; }