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 )