defaults_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Copyright 2019 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. package android
  15. import (
  16. "testing"
  17. )
  18. type defaultsTestProperties struct {
  19. Foo []string
  20. }
  21. type defaultsTestModule struct {
  22. ModuleBase
  23. DefaultableModuleBase
  24. properties defaultsTestProperties
  25. }
  26. func (d *defaultsTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
  27. ctx.Build(pctx, BuildParams{
  28. Rule: Touch,
  29. Output: PathForModuleOut(ctx, "out"),
  30. })
  31. }
  32. func defaultsTestModuleFactory() Module {
  33. module := &defaultsTestModule{}
  34. module.AddProperties(&module.properties)
  35. InitAndroidModule(module)
  36. InitDefaultableModule(module)
  37. return module
  38. }
  39. type defaultsTestDefaults struct {
  40. ModuleBase
  41. DefaultsModuleBase
  42. }
  43. func defaultsTestDefaultsFactory() Module {
  44. defaults := &defaultsTestDefaults{}
  45. defaults.AddProperties(&defaultsTestProperties{})
  46. InitDefaultsModule(defaults)
  47. return defaults
  48. }
  49. var prepareForDefaultsTest = GroupFixturePreparers(
  50. PrepareForTestWithDefaults,
  51. FixtureRegisterWithContext(func(ctx RegistrationContext) {
  52. ctx.RegisterModuleType("test", defaultsTestModuleFactory)
  53. ctx.RegisterModuleType("defaults", defaultsTestDefaultsFactory)
  54. }),
  55. )
  56. func TestDefaults(t *testing.T) {
  57. bp := `
  58. defaults {
  59. name: "transitive",
  60. foo: ["transitive"],
  61. }
  62. defaults {
  63. name: "defaults",
  64. defaults: ["transitive"],
  65. foo: ["defaults"],
  66. }
  67. test {
  68. name: "foo",
  69. defaults: ["defaults"],
  70. foo: ["module"],
  71. }
  72. `
  73. result := GroupFixturePreparers(
  74. prepareForDefaultsTest,
  75. FixtureWithRootAndroidBp(bp),
  76. ).RunTest(t)
  77. foo := result.Module("foo", "").(*defaultsTestModule)
  78. AssertDeepEquals(t, "foo", []string{"transitive", "defaults", "module"}, foo.properties.Foo)
  79. }
  80. func TestDefaultsAllowMissingDependencies(t *testing.T) {
  81. bp := `
  82. defaults {
  83. name: "defaults",
  84. defaults: ["missing"],
  85. foo: ["defaults"],
  86. }
  87. test {
  88. name: "missing_defaults",
  89. defaults: ["missing"],
  90. foo: ["module"],
  91. }
  92. test {
  93. name: "missing_transitive_defaults",
  94. defaults: ["defaults"],
  95. foo: ["module"],
  96. }
  97. `
  98. result := GroupFixturePreparers(
  99. prepareForDefaultsTest,
  100. PrepareForTestWithAllowMissingDependencies,
  101. FixtureWithRootAndroidBp(bp),
  102. ).RunTest(t)
  103. missingDefaults := result.ModuleForTests("missing_defaults", "").Output("out")
  104. missingTransitiveDefaults := result.ModuleForTests("missing_transitive_defaults", "").Output("out")
  105. AssertSame(t, "missing_defaults rule", ErrorRule, missingDefaults.Rule)
  106. AssertStringEquals(t, "missing_defaults", "module missing_defaults missing dependencies: missing\n", missingDefaults.Args["error"])
  107. // TODO: missing transitive defaults is currently not handled
  108. _ = missingTransitiveDefaults
  109. }