1// Copyright 2021 Google Inc. All rights reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package bp2build 16 17import ( 18 "fmt" 19 "testing" 20 21 "android/soong/android" 22 "android/soong/java" 23) 24 25func runJavaProtoTestCase(t *testing.T, tc bp2buildTestCase) { 26 t.Helper() 27 (&tc).moduleTypeUnderTest = "java_library_static" 28 (&tc).moduleTypeUnderTestFactory = java.LibraryFactory 29 runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc) 30} 31 32func TestJavaProto(t *testing.T) { 33 testCases := []struct { 34 protoType string 35 javaLibraryType string 36 javaLibraryNameExtension string 37 }{ 38 { 39 protoType: "nano", 40 javaLibraryType: "java_nano_proto_library", 41 javaLibraryNameExtension: "java_proto_nano", 42 }, 43 { 44 protoType: "micro", 45 javaLibraryType: "java_micro_proto_library", 46 javaLibraryNameExtension: "java_proto_micro", 47 }, 48 { 49 protoType: "lite", 50 javaLibraryType: "java_lite_proto_library", 51 javaLibraryNameExtension: "java_proto_lite", 52 }, 53 { 54 protoType: "stream", 55 javaLibraryType: "java_stream_proto_library", 56 javaLibraryNameExtension: "java_proto_stream", 57 }, 58 { 59 protoType: "full", 60 javaLibraryType: "java_proto_library", 61 javaLibraryNameExtension: "java_proto", 62 }, 63 } 64 65 bp := `java_library_static { 66 name: "java-protos", 67 proto: { 68 type: "%s", 69 }, 70 srcs: ["a.proto"], 71}` 72 73 protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{ 74 "srcs": `["a.proto"]`, 75 }) 76 77 for _, tc := range testCases { 78 javaLibraryName := fmt.Sprintf("java-protos_%s", tc.javaLibraryNameExtension) 79 80 runJavaProtoTestCase(t, bp2buildTestCase{ 81 description: fmt.Sprintf("java_proto %s", tc.protoType), 82 blueprint: fmt.Sprintf(bp, tc.protoType), 83 expectedBazelTargets: []string{ 84 protoLibrary, 85 makeBazelTarget( 86 tc.javaLibraryType, 87 javaLibraryName, 88 attrNameToString{ 89 "deps": `[":java-protos_proto"]`, 90 }), 91 makeBazelTarget("java_library", "java-protos", attrNameToString{ 92 "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName), 93 }), 94 }, 95 }) 96 } 97} 98 99func TestJavaProtoDefault(t *testing.T) { 100 runJavaProtoTestCase(t, bp2buildTestCase{ 101 description: "java_library proto default", 102 blueprint: `java_library_static { 103 name: "java-protos", 104 srcs: ["a.proto"], 105} 106`, 107 expectedBazelTargets: []string{ 108 makeBazelTarget("proto_library", "java-protos_proto", attrNameToString{ 109 "srcs": `["a.proto"]`, 110 }), 111 makeBazelTarget( 112 "java_lite_proto_library", 113 "java-protos_java_proto_lite", 114 attrNameToString{ 115 "deps": `[":java-protos_proto"]`, 116 }), 117 makeBazelTarget("java_library", "java-protos", attrNameToString{ 118 "exports": `[":java-protos_java_proto_lite"]`, 119 }), 120 }, 121 }) 122} 123