blob: 434e71abf5634141487b4495d08da79fe70adb74 [file] [log] [blame]
Nan Zhang5323f8e2017-05-10 13:37:54 -07001// Copyright 2017 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 python
16
17import (
18 "android/soong/android"
yelinhsieh80880a32018-11-06 11:49:55 +080019 "android/soong/tradefed"
Nan Zhang5323f8e2017-05-10 13:37:54 -070020)
21
22// This file contains the module types for building Python test.
23
24func init() {
25 android.RegisterModuleType("python_test_host", PythonTestHostFactory)
Nan Zhangd9ec5e72017-12-01 20:00:31 +000026 android.RegisterModuleType("python_test", PythonTestFactory)
Nan Zhang5323f8e2017-05-10 13:37:54 -070027}
28
Julien Despreze146e392018-08-02 15:00:46 -070029type TestProperties struct {
30 // the name of the test configuration (for example "AndroidTest.xml") that should be
31 // installed with the module.
Colin Crossa6384822020-06-09 15:09:22 -070032 Test_config *string `android:"path,arch_variant"`
yelinhsieh80880a32018-11-06 11:49:55 +080033
34 // the name of the test configuration template (for example "AndroidTestTemplate.xml") that
35 // should be installed with the module.
Colin Crossa6384822020-06-09 15:09:22 -070036 Test_config_template *string `android:"path,arch_variant"`
Dan Shi31949122020-09-21 12:11:02 -070037
38 // list of files or filegroup modules that provide data that should be installed alongside
39 // the test
40 Data []string `android:"path,arch_variant"`
Julien Despreze146e392018-08-02 15:00:46 -070041}
42
Nan Zhangd4e641b2017-07-12 12:55:28 -070043type testDecorator struct {
44 *binaryDecorator
Julien Despreze146e392018-08-02 15:00:46 -070045
46 testProperties TestProperties
yelinhsieh80880a32018-11-06 11:49:55 +080047
48 testConfig android.Path
Dan Shi31949122020-09-21 12:11:02 -070049
50 data []android.DataPath
Julien Despreze146e392018-08-02 15:00:46 -070051}
52
53func (test *testDecorator) bootstrapperProps() []interface{} {
54 return append(test.binaryDecorator.bootstrapperProps(), &test.testProperties)
Nan Zhang5323f8e2017-05-10 13:37:54 -070055}
56
Nan Zhangd4e641b2017-07-12 12:55:28 -070057func (test *testDecorator) install(ctx android.ModuleContext, file android.Path) {
yelinhsieh80880a32018-11-06 11:49:55 +080058 test.testConfig = tradefed.AutoGenPythonBinaryHostTestConfig(ctx, test.testProperties.Test_config,
Dan Shi6ffaaa82019-09-26 11:41:36 -070059 test.testProperties.Test_config_template, test.binaryDecorator.binaryProperties.Test_suites,
60 test.binaryDecorator.binaryProperties.Auto_gen_config)
yelinhsieh80880a32018-11-06 11:49:55 +080061
Nan Zhangd9ec5e72017-12-01 20:00:31 +000062 test.binaryDecorator.pythonInstaller.dir = "nativetest"
63 test.binaryDecorator.pythonInstaller.dir64 = "nativetest64"
64
65 test.binaryDecorator.pythonInstaller.relative = ctx.ModuleName()
66
67 test.binaryDecorator.pythonInstaller.install(ctx, file)
Dan Shi31949122020-09-21 12:11:02 -070068
69 dataSrcPaths := android.PathsForModuleSrc(ctx, test.testProperties.Data)
70
71 for _, dataSrcPath := range dataSrcPaths {
72 test.data = append(test.data, android.DataPath{SrcPath: dataSrcPath})
73 }
Nan Zhang5323f8e2017-05-10 13:37:54 -070074}
75
Nan Zhangd4e641b2017-07-12 12:55:28 -070076func NewTest(hod android.HostOrDeviceSupported) *Module {
77 module, binary := NewBinary(hod)
78
Nan Zhangd9ec5e72017-12-01 20:00:31 +000079 binary.pythonInstaller = NewPythonInstaller("nativetest", "nativetest64")
Nan Zhangd4e641b2017-07-12 12:55:28 -070080
81 test := &testDecorator{binaryDecorator: binary}
82
83 module.bootstrapper = test
84 module.installer = test
85
86 return module
Nan Zhang5323f8e2017-05-10 13:37:54 -070087}
88
Colin Cross36242852017-06-23 15:06:31 -070089func PythonTestHostFactory() android.Module {
Nan Zhangd4e641b2017-07-12 12:55:28 -070090 module := NewTest(android.HostSupportedNoCross)
Nan Zhang5323f8e2017-05-10 13:37:54 -070091
Nan Zhangd4e641b2017-07-12 12:55:28 -070092 return module.Init()
Nan Zhang5323f8e2017-05-10 13:37:54 -070093}
Nan Zhangd9ec5e72017-12-01 20:00:31 +000094
95func PythonTestFactory() android.Module {
96 module := NewTest(android.HostAndDeviceSupported)
97 module.multilib = android.MultilibBoth
98
99 return module.Init()
100}