github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/pkg/plugin/builtin/csharp_plugin_test.go (about)

     1  package builtin_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stackb/rules_proto/pkg/plugin/builtin"
     7  	"github.com/stackb/rules_proto/pkg/plugintest"
     8  )
     9  
    10  func TestCsharpPlugin(t *testing.T) {
    11  	plugintest.Cases(t, &builtin.CsharpPlugin{}, map[string]plugintest.Case{
    12  		// --csharp_out always generates output files
    13  		"empty file": {
    14  			Input: "",
    15  			Directives: plugintest.WithDirectives(
    16  				"proto_plugin", "csharp implementation builtin:csharp",
    17  			),
    18  			PluginName: "csharp",
    19  			Configuration: plugintest.WithConfiguration(
    20  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    21  				plugintest.WithOutputs("Test.cs"),
    22  			),
    23  		},
    24  		// per-object generated files
    25  		"single enum message service": {
    26  			Input: "enum E{U=0;} message M{} service S{}",
    27  			Directives: plugintest.WithDirectives(
    28  				"proto_plugin", "csharp implementation builtin:csharp",
    29  			),
    30  			PluginName: "csharp",
    31  			Configuration: plugintest.WithConfiguration(
    32  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    33  				plugintest.WithOutputs("Test.cs"),
    34  			),
    35  		},
    36  		// package does not affect output location
    37  		"package enum message service": {
    38  			Input: "package p; enum E{U=0;} message M{} service S{}",
    39  			Directives: plugintest.WithDirectives(
    40  				"proto_plugin", "csharp implementation builtin:csharp",
    41  			),
    42  			PluginName: "csharp",
    43  			Configuration: plugintest.WithConfiguration(
    44  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    45  				plugintest.WithOutputs("Test.cs"),
    46  			),
    47  		},
    48  		"csharp_namespace does not on affect output location": {
    49  			Input: "package p; option csharp_namespace=\"Aa.Bb.Cc\"; enum E{U=0;} message M{} service S{}",
    50  			Directives: plugintest.WithDirectives(
    51  				"proto_plugin", "csharp implementation builtin:csharp",
    52  			),
    53  			PluginName: "csharp",
    54  			Configuration: plugintest.WithConfiguration(
    55  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    56  				plugintest.WithOutputs("Test.cs"),
    57  			),
    58  		},
    59  		"relative directory": {
    60  			Rel:   "rel",
    61  			Input: "message M{}",
    62  			Directives: plugintest.WithDirectives(
    63  				"proto_plugin", "csharp implementation builtin:csharp",
    64  			),
    65  			PluginName: "csharp",
    66  			Configuration: plugintest.WithConfiguration(
    67  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    68  				plugintest.WithOutputs("rel/Test.cs"),
    69  				plugintest.WithOut("rel"),
    70  			),
    71  		},
    72  		"basename converted to pascal": {
    73  			Basename: "foo_bar-baz",
    74  			Input:    "message M{}",
    75  			Directives: plugintest.WithDirectives(
    76  				"proto_plugin", "csharp implementation builtin:csharp",
    77  			),
    78  			PluginName: "csharp",
    79  			Configuration: plugintest.WithConfiguration(
    80  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:csharp"),
    81  				plugintest.WithOutputs("FooBarBaz.cs"),
    82  			),
    83  		},
    84  	})
    85  }