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 java 16 17import ( 18 "reflect" 19 "strings" 20 "testing" 21 22 "android/soong/android" 23) 24 25func TestDroiddoc(t *testing.T) { 26 t.Parallel() 27 ctx, _ := testJavaWithFS(t, ` 28 droiddoc_exported_dir { 29 name: "droiddoc-templates-sdk", 30 path: ".", 31 } 32 filegroup { 33 name: "bar-doc-aidl-srcs", 34 srcs: ["bar-doc/IBar.aidl"], 35 path: "bar-doc", 36 } 37 droidstubs { 38 name: "bar-stubs", 39 srcs: [ 40 "bar-doc/a.java", 41 ], 42 exclude_srcs: [ 43 "bar-doc/b.java" 44 ], 45 api_levels_annotations_dirs: [ 46 "droiddoc-templates-sdk", 47 ], 48 api_levels_annotations_enabled: true, 49 } 50 droiddoc { 51 name: "bar-doc", 52 srcs: [ 53 ":bar-stubs", 54 "bar-doc/IFoo.aidl", 55 ":bar-doc-aidl-srcs", 56 ], 57 custom_template: "droiddoc-templates-sdk", 58 hdf: [ 59 "android.whichdoc offline", 60 ], 61 knowntags: [ 62 "bar-doc/known_oj_tags.txt", 63 ], 64 proofread_file: "libcore-proofread.txt", 65 todo_file: "libcore-docs-todo.html", 66 flags: ["-offlinemode -title \"libcore\""], 67 } 68 `, 69 map[string][]byte{ 70 "bar-doc/a.java": nil, 71 "bar-doc/b.java": nil, 72 }) 73 barStubsOutputs := ctx.ModuleForTests(t, "bar-stubs", "android_common").OutputFiles(ctx, t, "") 74 if len(barStubsOutputs) != 1 { 75 t.Errorf("Expected one output from \"bar-stubs\" got %s", barStubsOutputs) 76 } 77 78 barStubsOutput := barStubsOutputs[0] 79 barDoc := ctx.ModuleForTests(t, "bar-doc", "android_common") 80 javaDoc := barDoc.Rule("javadoc") 81 if g, w := android.PathsRelativeToTop(javaDoc.Implicits), android.PathRelativeToTop(barStubsOutput); !inList(w, g) { 82 t.Errorf("implicits of bar-doc must contain %q, but was %q.", w, g) 83 } 84 85 expected := "-sourcepath out/soong/.intermediates/bar-doc/android_common/srcjars " 86 if !strings.Contains(javaDoc.RuleParams.Command, expected) { 87 t.Errorf("bar-doc command does not contain flag %q, but should\n%q", expected, javaDoc.RuleParams.Command) 88 } 89 90 aidl := barDoc.Rule("aidl") 91 if g, w := android.PathsRelativeToTop(javaDoc.Implicits), android.PathRelativeToTop(aidl.Output); !inList(w, g) { 92 t.Errorf("implicits of bar-doc must contain %q, but was %q.", w, g) 93 } 94 95 if g, w := aidl.Implicits.Strings(), []string{"bar-doc/IBar.aidl", "bar-doc/IFoo.aidl"}; !reflect.DeepEqual(w, g) { 96 t.Errorf("aidl inputs must be %q, but was %q", w, g) 97 } 98} 99 100func TestDroiddocArgsAndFlagsCausesError(t *testing.T) { 101 t.Parallel() 102 testJavaError(t, "flags is set. Cannot set args", ` 103 droiddoc_exported_dir { 104 name: "droiddoc-templates-sdk", 105 path: ".", 106 } 107 filegroup { 108 name: "bar-doc-aidl-srcs", 109 srcs: ["bar-doc/IBar.aidl"], 110 path: "bar-doc", 111 } 112 droidstubs { 113 name: "bar-stubs", 114 srcs: [ 115 "bar-doc/a.java", 116 ], 117 exclude_srcs: [ 118 "bar-doc/b.java" 119 ], 120 api_levels_annotations_dirs: [ 121 "droiddoc-templates-sdk", 122 ], 123 api_levels_annotations_enabled: true, 124 } 125 droiddoc { 126 name: "bar-doc", 127 srcs: [ 128 ":bar-stubs", 129 "bar-doc/IFoo.aidl", 130 ":bar-doc-aidl-srcs", 131 ], 132 custom_template: "droiddoc-templates-sdk", 133 hdf: [ 134 "android.whichdoc offline", 135 ], 136 knowntags: [ 137 "bar-doc/known_oj_tags.txt", 138 ], 139 proofread_file: "libcore-proofread.txt", 140 todo_file: "libcore-docs-todo.html", 141 flags: ["-offlinemode -title \"libcore\""], 142 args: "-offlinemode -title \"libcore\"", 143 } 144 `) 145} 146