github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/pkg/plugin/builtin/objc_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 TestObjcPlugin(t *testing.T) {
    11  	plugintest.Cases(t, &builtin.ObjcPlugin{}, map[string]plugintest.Case{
    12  		"empty file": {
    13  			Input: "",
    14  			Directives: plugintest.WithDirectives(
    15  				"proto_plugin", "objc implementation builtin:objc",
    16  			),
    17  			PluginName: "objc",
    18  			Configuration: plugintest.WithConfiguration(
    19  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    20  				plugintest.WithOutputs("Test.pbobjc.h", "Test.pbobjc.m"),
    21  			),
    22  		},
    23  		"single enum message service": {
    24  			Input: "enum E{U=0;} message M{} service S{}",
    25  			Directives: plugintest.WithDirectives(
    26  				"proto_plugin", "objc implementation builtin:objc",
    27  			),
    28  			PluginName: "objc",
    29  			Configuration: plugintest.WithConfiguration(
    30  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    31  				plugintest.WithOutputs("Test.pbobjc.h", "Test.pbobjc.m"),
    32  			),
    33  		},
    34  		"package does not affect output location": {
    35  			Input: "package p; enum E{U=0;} message M{} service S{}",
    36  			Directives: plugintest.WithDirectives(
    37  				"proto_plugin", "objc implementation builtin:objc",
    38  			),
    39  			PluginName: "objc",
    40  			Configuration: plugintest.WithConfiguration(
    41  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    42  				plugintest.WithOutputs("Test.pbobjc.h", "Test.pbobjc.m"),
    43  			),
    44  		},
    45  		"objc_class_prefix does not affect output location": {
    46  			Input: "package p; option objc_class_prefix=\"CGOOP\"; enum E{U=0;} message M{} service S{}",
    47  			Directives: plugintest.WithDirectives(
    48  				"proto_plugin", "objc implementation builtin:objc",
    49  			),
    50  			PluginName: "objc",
    51  			Configuration: plugintest.WithConfiguration(
    52  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    53  				plugintest.WithOutputs("Test.pbobjc.h", "Test.pbobjc.m"),
    54  			),
    55  		},
    56  		"relative directory": {
    57  			Rel:   "rel",
    58  			Input: "message M{}",
    59  			Directives: plugintest.WithDirectives(
    60  				"proto_plugin", "objc implementation builtin:objc",
    61  			),
    62  			PluginName: "objc",
    63  			Configuration: plugintest.WithConfiguration(
    64  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    65  				plugintest.WithOutputs("rel/Test.pbobjc.h", "rel/Test.pbobjc.m"),
    66  			),
    67  		},
    68  		"basename converted to capitalized camel case": {
    69  			Basename: "foo_bar-baz",
    70  			Input:    "message M{}",
    71  			Directives: plugintest.WithDirectives(
    72  				"proto_plugin", "objc implementation builtin:objc",
    73  			),
    74  			PluginName: "objc",
    75  			Configuration: plugintest.WithConfiguration(
    76  				plugintest.WithLabel(t, "@build_stack_rules_proto//plugin/builtin:objc"),
    77  				plugintest.WithOutputs("FooBarBaz.pbobjc.h", "FooBarBaz.pbobjc.m"),
    78  			),
    79  		},
    80  	})
    81  }