interoptopus_csharp 0.16.0-alpha.17

The C# backend for Interoptopus.
Documentation
using System.Collections.Generic;
using My.Company;
using My.Company.Common;
using Xunit;
using Interop = My.Company.Interop;

public class TestWireOption
{
    private static OptionLeaf MakeLeaf(uint? score1, uint? score2, string name1, string name2)
    {
        return new OptionLeaf
        {
            tags = new Dictionary<string, string> { { "key", "value" } },
            score_1 = score1,
            score_2 = score2,
            name_1 = name1,
            name_2 = name2,
        };
    }

    [Fact]
    public void wire_option_1a()
    {
        var leaf = MakeLeaf(10, 20, "hello", "world");
        var root = new OptionRoot
        {
            id = 42,
            middle_1 = new OptionMiddle
            {
                label = "mid",
                leaf_1 = leaf,
                leaf_2 = null,
            },
            middle_2 = null,
            items = new List<OptionLeaf> { leaf },
        };

        var result = Interop.wire_option_1(root.Wire()).Unwire();
        Assert.Equal(42u, result.id);
        Assert.NotNull(result.middle_1);
        Assert.Equal("mid", result.middle_1!.label);
        Assert.NotNull(result.middle_1.leaf_1);
        Assert.Equal(10u, result.middle_1.leaf_1!.score_1);
        Assert.Equal(20u, result.middle_1.leaf_1.score_2);
        Assert.Equal("hello", result.middle_1.leaf_1.name_1);
        Assert.Equal("world", result.middle_1.leaf_1.name_2);
        Assert.Null(result.middle_1.leaf_2);
        Assert.Null(result.middle_2);
        Assert.Single(result.items);
    }

    [Fact]
    public void wire_option_1b()
    {
        var leaf = MakeLeaf(null, null, null, null);
        var root = new OptionRoot
        {
            id = 1,
            middle_1 = null,
            middle_2 = null,
            items = new List<OptionLeaf> { leaf },
        };

        var result = Interop.wire_option_1(root.Wire()).Unwire();
        Assert.Equal(1u, result.id);
        Assert.Null(result.middle_1);
        Assert.Null(result.middle_2);
        Assert.Single(result.items);
        Assert.Null(result.items[0].score_1);
        Assert.Null(result.items[0].score_2);
        Assert.Null(result.items[0].name_1);
        Assert.Null(result.items[0].name_2);
    }

    [Fact]
    public void wire_option_2()
    {
        var root = new OptionRoot
        {
            id = 0,
            middle_1 = null,
            middle_2 = null,
            items = new List<OptionLeaf>
            {
                MakeLeaf(10, 20, null, null),
                MakeLeaf(null, 30, null, null),
                MakeLeaf(5, null, null, null),
            },
        };

        var sum = Interop.wire_option_2(root.Wire());
        Assert.Equal(65u, sum);
    }

    [Fact]
    public void wire_option_3()
    {
        var root = new OptionRoot
        {
            id = 0,
            middle_1 = null,
            middle_2 = null,
            items = new List<OptionLeaf>
            {
                MakeLeaf(null, null, "a", null),
                MakeLeaf(null, null, null, null),
                MakeLeaf(null, null, "b", null),
            },
        };

        var count = Interop.wire_option_3(root.Wire());
        Assert.Equal(2u, count);
    }

    [Fact]
    public void wire_option_4a()
    {
        var root = new OptionRoot
        {
            id = 0,
            middle_1 = new OptionMiddle
            {
                label = "x",
                leaf_1 = MakeLeaf(null, 99, null, null),
                leaf_2 = null,
            },
            middle_2 = null,
            items = new List<OptionLeaf>(),
        };

        var score = Interop.wire_option_4(root.Wire());
        Assert.Equal(99u, score);
    }

    [Fact]
    public void wire_option_4b()
    {
        var root = new OptionRoot
        {
            id = 0,
            middle_1 = null,
            middle_2 = null,
            items = new List<OptionLeaf>(),
        };

        var score = Interop.wire_option_4(root.Wire());
        Assert.Equal(0u, score);
    }
}