Sha256: 62d4e8d557f8f938fa405dbd17f726c2a60d6b26840ca53fa29d217d49646d56

Contents?: true

Size: 1.59 KB

Versions: 17

Compression:

Stored size: 1.59 KB

Contents

using System;
using System.Linq;
using System.Text;
using Generators.Input;
using Generators.Output;
using Humanizer;
using Newtonsoft.Json.Linq;

namespace Generators.Exercises
{
    public class Pov : GeneratorExercise
    {
        protected override void UpdateCanonicalData(CanonicalData canonicalData)
        {
            foreach (var canonicalDataCase in canonicalData.Cases)
            {
                canonicalDataCase.UseVariablesForInput = true;
                canonicalDataCase.UseVariableForExpected = true;
                canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is null ? typeof(ArgumentException) : null;

                canonicalDataCase.Input["tree"] = RenderTree(canonicalDataCase.Input["tree"]);

                if (canonicalDataCase.Property == "fromPov")
                {
                    canonicalDataCase.Expected = RenderTree(canonicalDataCase.Expected);
                }
            }
        }

        private static UnescapedValue RenderTree(dynamic tree)
        {
            if (tree == null)
            {
                return null;
            }

            var sb = new StringBuilder();

            var label = ValueFormatter.Format(tree["label"]);

            if (tree.ContainsKey("children"))
            {
                var children = string.Join(", ", ((object[])tree["children"]).Select(RenderTree));
                sb.Append($"new Tree({label}, {children})");
            }
            else
            {
                sb.Append($"new Tree({label})");
            }

            return new UnescapedValue(sb.ToString());
        }
    }
}

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.179 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.178 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.177 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.176 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.175 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.174 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.173 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.172 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.171 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.170 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.169 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.167 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.166 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.165 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.164 tracks/csharp/generators/Exercises/Pov.cs
trackler-2.2.1.163 tracks/csharp/generators/Exercises/Pov.cs