예제 #1
0
        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()));
        }
예제 #2
0
        /**
         * <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);
            }
        }
예제 #3
0
 public Operation(IEnvironment environment, AC.Configuration configuration)
 {
     Effect        = environment.Effect;
     Environment   = environment;
     Configuration = configuration;
 }
예제 #4
0
 /**
  * <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.");
예제 #5
0
 CyclicBindingException(AC.Configuration configuration, AC.CommandEntry cyclicEntry, string message) : base(message)
 {
     Configuration = configuration;
     CyclicEntry   = cyclicEntry;
 }
예제 #6
0
 public void Serializes(string expected, AC.Configuration sut)
 {
     using var writer = new SIO.StringWriter();
     sut.Serialize(writer);
     Assert.Equal(expected, writer.ToString());
 }
예제 #7
0
 public async STT.Task Deserializes(AC.Configuration expected, string input)
 => Assert.Equal(expected, await FromString(input).ConfigureAwait(false));