async STT.Task WriteConfigurationSucceeds(string expected, AC.Configuration conf) { using var fakeFile = new ATF.FakeFile(string.Empty, string.Empty); await Utility.FromOk(_effect.WriteConfiguration(conf, fakeFile.Mock.Object)).ConfigureAwait(false); Assert.Equal(expected, new S.Text.UTF8Encoding().GetString(fakeFile.MemoryStream.ToArray())); }
/** * <summary> * Construct external options from command resolution of <paramref name="alias"/> in <paramref name="configuration"/>. * </summary> * <param name="configuration">Application configuration.</param> * <param name="alias">Alias to lookup.</param> * <returns>Nothing if alias is unconfigured. Otherwise, optional possibility of external options if alias successfully resolves. Otherwise, <see cref='CyclicBindingException'/> as optional error.</returns> * <exception cref='CyclicBindingException'>Resolution fails due to a resolution cycle.</exception> */ public static ST.Maybe <ST.Result <External> > Parse(AC.Configuration configuration, Command alias) { var commandSequence = configuration.Binding.GetResolutionSequence(alias); if (commandSequence.Any()) { var first = commandSequence.First(); return(commandSequence.Skip(1) .AggregateAcyclically <AC.CommandEntry, (Command Command, Arguments Arguments)> (object.ReferenceEquals , (first.Command, first.Arguments.ToMaybe()) , (acc, entry) => (entry.Command , entry.Arguments is null ? acc.Arguments : acc.Arguments.Prepend(entry.Arguments) ) ) .Select(pair => ST.Factory.Result(new External(alias, pair.Command, pair.Arguments))) .ReduceRight(commandEntry => CyclicBindingException.CommandError(configuration, commandEntry))); } else { return(ST.Nothing.Value); } }
public Operation(IEnvironment environment, AC.Configuration configuration) { Effect = environment.Effect; Environment = environment; Configuration = configuration; }
/** * <summary> * Create error for unresolvable commands. * </summary> * <param name="cyclicEntry">A cycle member.</param> * <returns>Error for unresolvable commands.</returns> */ public static CyclicBindingException CommandError(AC.Configuration configuration, AC.CommandEntry cyclicEntry) => new CyclicBindingException(configuration, cyclicEntry, @"Unable to resolve command due to a cycle in alias resolution.");
CyclicBindingException(AC.Configuration configuration, AC.CommandEntry cyclicEntry, string message) : base(message) { Configuration = configuration; CyclicEntry = cyclicEntry; }
public void Serializes(string expected, AC.Configuration sut) { using var writer = new SIO.StringWriter(); sut.Serialize(writer); Assert.Equal(expected, writer.ToString()); }
public async STT.Task Deserializes(AC.Configuration expected, string input) => Assert.Equal(expected, await FromString(input).ConfigureAwait(false));