github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/example/golden/BUILD.bazel (about)

     1  load("@io_bazel_rules_go//go:def.bzl", "go_test")
     2  load("//rules:example.bzl", "gazelle_testdata_example")
     3  
     4  # gazelle:exclude testdata
     5  
     6  genrule(
     7      name = "gazelle_tool",
     8      outs = ["gazelle"],
     9      cmd = "cp $(location //:gazelle-protobuf) $@",
    10      executable = True,
    11      tools = ["//:gazelle-protobuf"],
    12  )
    13  
    14  go_test(
    15      name = "golden_test",
    16      srcs = ["golden_test.go"],
    17      data = [":gazelle"] + glob(["testdata/**"]),
    18      deps = ["//pkg/goldentest"],
    19  )
    20  
    21  gazelle_testdata_example(
    22      name = "cpp",
    23      srcs = glob(["testdata/cpp/*"]),
    24      workspace_template = "prebuilt.WORKSPACE",
    25  )
    26  
    27  gazelle_testdata_example(
    28      name = "java",
    29      srcs = glob(["testdata/java/*"]),
    30      # TODO: investigate java does not PASS with the prebuilt toolchain protoc.
    31      # Perhaps the version is too old?
    32      workspace_template = "builtin.WORKSPACE",
    33  )
    34  
    35  gazelle_testdata_example(
    36      name = "python",
    37      srcs = glob(["testdata/python/*"]),
    38      workspace_template = "prebuilt.WORKSPACE",
    39  )
    40  
    41  gazelle_testdata_example(
    42      name = "ruby",
    43      srcs = glob(["testdata/ruby/*"]),
    44      workspace_template = "prebuilt.WORKSPACE",
    45  )
    46  
    47  gazelle_testdata_example(
    48      name = "csharp",
    49      srcs = glob(["testdata/csharp/*"]),
    50      workspace_template = "prebuilt.WORKSPACE",
    51  )
    52  
    53  gazelle_testdata_example(
    54      name = "objc",
    55      srcs = glob(["testdata/objc/*"]),
    56      workspace_template = "prebuilt.WORKSPACE",
    57  )
    58  
    59  gazelle_testdata_example(
    60      name = "commonjs",
    61      srcs = glob(["testdata/commonjs/*"]),
    62      workspace_template = "prebuilt.WORKSPACE",
    63  )
    64  
    65  gazelle_testdata_example(
    66      name = "closurejs",
    67      srcs = glob(["testdata/closurejs/*"]),
    68      workspace_template = "prebuilt.WORKSPACE",
    69  )
    70  
    71  gazelle_testdata_example(
    72      name = "gogo",
    73      srcs = glob(["testdata/gogo/*"]),
    74      workspace_template = "prebuilt.WORKSPACE",
    75  )
    76  
    77  gazelle_testdata_example(
    78      name = "go",
    79      srcs = glob(["testdata/go/*"]),
    80      workspace_template = "prebuilt.WORKSPACE",
    81  )
    82  
    83  gazelle_testdata_example(
    84      name = "gomerge",
    85      srcs = glob(["testdata/gomerge/*"]),
    86      workspace_template = "prebuilt.WORKSPACE",
    87  )
    88  
    89  gazelle_testdata_example(
    90      name = "goembed",
    91      srcs = glob(["testdata/goembed/**/*"]),
    92      strip_prefix = "example/golden/testdata/goembed",
    93      workspace_template = "builtin.WORKSPACE",
    94  )
    95  
    96  gazelle_testdata_example(
    97      name = "proto_repository",
    98      srcs = glob(["testdata/proto_repository/**/*"]),
    99      strip_prefix = "example/golden/testdata/proto_repository",
   100      test_content = """
   101  func TestRunGazelle(t *testing.T) {
   102  	if err := bazel_testing.RunBazel("run", "//:gazelle"); err != nil {
   103  		t.Fatal(err)
   104  	}
   105  	if err := bazel_testing.RunBazel("build", "..."); err != nil {
   106  		t.Fatal(err)
   107  	}
   108  	if err := bazel_testing.RunBazel("test", "..."); err != nil {
   109  		t.Fatal(err)
   110  	}
   111  }
   112  """,
   113      workspace_template = "prebuilt.WORKSPACE",
   114  )
   115  
   116  gazelle_testdata_example(
   117      name = "scala",
   118      srcs = glob(["testdata/scala/**/*"]),
   119      strip_prefix = "example/golden/testdata/scala",
   120      workspace_template = "prebuilt.WORKSPACE",
   121  )
   122  
   123  gazelle_testdata_example(
   124      name = "starlark_java",
   125      srcs = glob(["testdata/starlark_java/**/*"]),
   126      strip_prefix = "example/golden/testdata/starlark_java",
   127      workspace_template = "prebuilt.WORKSPACE",
   128  )
   129  
   130  filegroup(
   131      name = "all_files",
   132      testonly = True,
   133      srcs = ["BUILD.bazel"] + glob(["*.go"]),
   134      visibility = ["//:__pkg__"],
   135  )
   136  
   137  gazelle_testdata_example(
   138      name = "strip_import_prefix",
   139      srcs = glob(["testdata/strip_import_prefix/**/*"]),
   140      strip_prefix = "example/golden/testdata/strip_import_prefix",
   141      test_content = """
   142  func TestBuild(t *testing.T) {
   143  	if err := bazel_testing.RunBazel("build", "..."); err != nil {
   144  		t.Fatal(err)
   145  	}
   146  }
   147  
   148  func TestRunPyApp(t *testing.T) {
   149  	if err := bazel_testing.RunBazel("run", "//module_app/app:app_py"); err != nil {
   150  		t.Fatal(err)
   151  	}
   152  }
   153  """,
   154      workspace_template = "prebuilt.WORKSPACE",
   155  )
   156  
   157  gazelle_testdata_example(
   158      name = "proto_compiled_sources",
   159      srcs = glob(["testdata/proto_compiled_sources/**/*"]),
   160      strip_prefix = "example/golden/testdata/proto_compiled_sources",
   161      test_content = """
   162  
   163  func TestUpdate(t *testing.T) {
   164      var want = `proto_compile_gencopy_run rule //:assets
   165  proto_library rule //api/v1:api_v1_proto
   166  proto_compile rule //api/v1:api_v1_python_compiled_sources
   167  proto_compile_gencopy_run rule //api/v1:api_v1_python_compiled_sources.update
   168  proto_compile_gencopy_test rule //api/v1:api_v1_python_compiled_sources_test
   169  proto_library rule //src/idl:svc_proto
   170  proto_compile rule //src/idl:svc_python_compiled_sources
   171  proto_compile_gencopy_run rule //src/idl:svc_python_compiled_sources.update
   172  proto_compile_gencopy_test rule //src/idl:svc_python_compiled_sources_test
   173  `
   174  
   175      // document query outputs
   176  	if got, err := bazel_testing.BazelOutput("query", "--output=label_kind", "..."); err != nil {
   177  		t.Fatal(err)
   178  	} else {
   179          if diff := cmp.Diff(want, string(got)); diff != "" {
   180              t.Fatalf("query mismatch (-want +got): %s", diff)
   181          }
   182      }
   183  
   184      // generated files should not initially exist
   185      if err := os.Remove("api/v1/v1_pb2.py"); err == nil {
   186  		t.Fatal("remove should have failed")
   187      }
   188      if err := os.Remove("src/idl/svc_pb2.py"); err == nil {
   189  		t.Fatal("remove should have failed")
   190      }
   191  
   192      // assert test initially fails
   193  	if err := bazel_testing.RunBazel("test", "//api/v1:api_v1_python_compiled_sources_test"); err == nil {
   194  		t.Fatal("expected initial test to fail!")
   195  	}
   196  
   197      // copy the files in place
   198  	if err := bazel_testing.RunBazel("run", "//api/v1:api_v1_python_compiled_sources.update"); err != nil {
   199  		t.Fatal(err)
   200  	}
   201  	if err := bazel_testing.RunBazel("run", "//src/idl:svc_python_compiled_sources.update"); err != nil {
   202  		t.Fatal(err)
   203  	}
   204  
   205      // tests should now pass
   206  	if err := bazel_testing.RunBazel("test", "..."); err != nil {
   207  		t.Fatal(err)
   208  	}
   209  
   210      // delete the generated files
   211      if err := os.Remove("api/v1/v1_pb2.py"); err != nil {
   212  		t.Fatal(err)
   213      }
   214      if err := os.Remove("src/idl/svc_pb2.py"); err != nil {
   215  		t.Fatal(err)
   216      }
   217  
   218      // document that running the proto_compile_assets rule also copies both files in place
   219  	if err := bazel_testing.RunBazel("run", "//:assets"); err != nil {
   220  		t.Fatal(err)
   221  	}
   222  
   223      // test should still pass
   224  	if err := bazel_testing.RunBazel("test", "..."); err != nil {
   225  		t.Fatal(err)
   226  	}
   227  }
   228  """,
   229      workspace_template = "prebuilt.WORKSPACE",
   230  )