gen_notice_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package android
  2. import (
  3. "testing"
  4. "github.com/google/blueprint"
  5. )
  6. var genNoticeTests = []struct {
  7. name string
  8. fs MockFS
  9. expectedErrors []string
  10. }{
  11. {
  12. name: "gen_notice must not accept licenses property",
  13. fs: map[string][]byte{
  14. "top/Android.bp": []byte(`
  15. gen_notice {
  16. name: "top_license",
  17. licenses: ["other_license"],
  18. }`),
  19. },
  20. expectedErrors: []string{
  21. `not supported on "gen_notice" modules`,
  22. },
  23. },
  24. {
  25. name: "bad gen_notice",
  26. fs: map[string][]byte{
  27. "top/Android.bp": []byte(`
  28. gen_notice {
  29. name: "top_notice",
  30. for: ["top_rule"],
  31. }`),
  32. "other/Android.bp": []byte(`
  33. mock_genrule {
  34. name: "other_rule",
  35. dep: ["top_notice"],
  36. }`),
  37. },
  38. expectedErrors: []string{
  39. `module "top_notice": for: no "top_rule" module exists`,
  40. },
  41. },
  42. {
  43. name: "doubly bad gen_notice",
  44. fs: map[string][]byte{
  45. "top/Android.bp": []byte(`
  46. gen_notice {
  47. name: "top_notice",
  48. for: ["top_rule", "other_rule"],
  49. }`),
  50. },
  51. expectedErrors: []string{
  52. `module "top_notice": for: modules "top_rule", "other_rule" do not exist`,
  53. },
  54. },
  55. {
  56. name: "good gen_notice",
  57. fs: map[string][]byte{
  58. "top/Android.bp": []byte(`
  59. gen_notice {
  60. name: "top_notice",
  61. for: ["top_rule"],
  62. }
  63. mock_genrule {
  64. name: "top_rule",
  65. dep: ["top_notice"],
  66. }`),
  67. "other/Android.bp": []byte(`
  68. mock_genrule {
  69. name: "other_rule",
  70. dep: ["top_notice"],
  71. }`),
  72. },
  73. },
  74. {
  75. name: "multiple license kinds",
  76. fs: map[string][]byte{
  77. "top/Android.bp": []byte(`
  78. gen_notice {
  79. name: "top_notice",
  80. for: ["top_rule"],
  81. }
  82. gen_notice {
  83. name: "top_html_notice",
  84. html: true,
  85. for: ["top_rule"],
  86. }
  87. gen_notice {
  88. name: "top_xml_notice",
  89. xml: true,
  90. for: ["top_notice"],
  91. }
  92. mock_genrule {
  93. name: "top_rule",
  94. dep: [
  95. "top_notice",
  96. "top_html_notice",
  97. "top_xml_notice",
  98. ],
  99. }`),
  100. "other/Android.bp": []byte(`
  101. mock_genrule {
  102. name: "other_rule",
  103. dep: ["top_xml_notice"],
  104. }`),
  105. },
  106. },
  107. }
  108. func TestGenNotice(t *testing.T) {
  109. for _, test := range genNoticeTests {
  110. t.Run(test.name, func(t *testing.T) {
  111. GroupFixturePreparers(
  112. PrepareForTestWithGenNotice,
  113. FixtureRegisterWithContext(func(ctx RegistrationContext) {
  114. ctx.RegisterModuleType("mock_genrule", newMockGenruleModule)
  115. }),
  116. test.fs.AddToFixture(),
  117. ).
  118. ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
  119. RunTest(t)
  120. })
  121. }
  122. }
  123. type mockGenruleProperties struct {
  124. Dep []string
  125. }
  126. type mockGenruleModule struct {
  127. ModuleBase
  128. DefaultableModuleBase
  129. properties mockGenruleProperties
  130. }
  131. func newMockGenruleModule() Module {
  132. m := &mockGenruleModule{}
  133. m.AddProperties(&m.properties)
  134. InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon)
  135. InitDefaultableModule(m)
  136. return m
  137. }
  138. type genruleDepTag struct {
  139. blueprint.BaseDependencyTag
  140. }
  141. func (j *mockGenruleModule) DepsMutator(ctx BottomUpMutatorContext) {
  142. m, ok := ctx.Module().(Module)
  143. if !ok {
  144. return
  145. }
  146. ctx.AddDependency(m, genruleDepTag{}, j.properties.Dep...)
  147. }
  148. func (p *mockGenruleModule) GenerateAndroidBuildActions(ModuleContext) {
  149. }