blob: 40c8ba1e92087a1c029bdf2ddf4ee92a727b4fbf [file] [log] [blame]
Jingwen Chen13b9b422021-03-08 07:32:28 -05001package bp2build
2
3import (
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02004 "testing"
5
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux560cb662021-08-26 20:13:29 +00006 "android/soong/android"
Jingwen Chen13b9b422021-03-08 07:32:28 -05007 "android/soong/python"
Jingwen Chen13b9b422021-03-08 07:32:28 -05008)
9
Liz Kammer78cfdaa2021-11-08 12:56:31 -050010func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc bp2buildTestCase) {
11 t.Helper()
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux560cb662021-08-26 20:13:29 +000012 runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
13 ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
14 ctx.RegisterModuleType("python_library_host", python.PythonLibraryHostFactory)
15 }, tc)
16}
17
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020018func TestPythonBinaryHostSimple(t *testing.T) {
Liz Kammer78cfdaa2021-11-08 12:56:31 -050019 runBp2BuildTestCaseWithPythonLibraries(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -040020 description: "simple python_binary_host converts to a native py_binary",
21 moduleTypeUnderTest: "python_binary_host",
22 moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020023 filesystem: map[string]string{
24 "a.py": "",
25 "b/c.py": "",
26 "b/d.py": "",
27 "b/e.py": "",
28 "files/data.txt": "",
29 },
30 blueprint: `python_binary_host {
Jingwen Chen13b9b422021-03-08 07:32:28 -050031 name: "foo",
32 main: "a.py",
Jingwen Chenb4628eb2021-04-08 14:40:57 +000033 srcs: ["**/*.py"],
34 exclude_srcs: ["b/e.py"],
35 data: ["files/data.txt",],
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux560cb662021-08-26 20:13:29 +000036 libs: ["bar"],
Jingwen Chen13b9b422021-03-08 07:32:28 -050037 bazel_module: { bp2build_available: true },
38}
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux560cb662021-08-26 20:13:29 +000039 python_library_host {
40 name: "bar",
41 srcs: ["b/e.py"],
Liz Kammerbe46fcc2021-11-01 15:32:43 -040042 bazel_module: { bp2build_available: false },
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux560cb662021-08-26 20:13:29 +000043 }`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -050044 expectedBazelTargets: []string{
45 makeBazelTarget("py_binary", "foo", attrNameToString{
46 "data": `["files/data.txt"]`,
47 "deps": `[":bar"]`,
48 "main": `"a.py"`,
49 "srcs": `[
Jingwen Chen13b9b422021-03-08 07:32:28 -050050 "a.py",
51 "b/c.py",
52 "b/d.py",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050053 ]`,
54 }),
Jingwen Chen13b9b422021-03-08 07:32:28 -050055 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020056 })
57}
58
59func TestPythonBinaryHostPy2(t *testing.T) {
Alex Márquez Pérez Muñíz Díaz Púras Thaureauxce0a07e2021-08-23 16:17:32 +000060 runBp2BuildTestCaseSimple(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -040061 description: "py2 python_binary_host",
62 moduleTypeUnderTest: "python_binary_host",
63 moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020064 blueprint: `python_binary_host {
Jingwen Chen13b9b422021-03-08 07:32:28 -050065 name: "foo",
66 srcs: ["a.py"],
67 version: {
68 py2: {
69 enabled: true,
70 },
71 py3: {
72 enabled: false,
73 },
74 },
75
76 bazel_module: { bp2build_available: true },
77}
78`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -050079 expectedBazelTargets: []string{
80 makeBazelTarget("py_binary", "foo", attrNameToString{
81 "python_version": `"PY2"`,
82 "srcs": `["a.py"]`,
83 }),
Jingwen Chen13b9b422021-03-08 07:32:28 -050084 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020085 })
86}
87
88func TestPythonBinaryHostPy3(t *testing.T) {
Alex Márquez Pérez Muñíz Díaz Púras Thaureauxce0a07e2021-08-23 16:17:32 +000089 runBp2BuildTestCaseSimple(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -040090 description: "py3 python_binary_host",
91 moduleTypeUnderTest: "python_binary_host",
92 moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020093 blueprint: `python_binary_host {
Jingwen Chen13b9b422021-03-08 07:32:28 -050094 name: "foo",
95 srcs: ["a.py"],
96 version: {
97 py2: {
98 enabled: false,
99 },
100 py3: {
101 enabled: true,
102 },
103 },
104
105 bazel_module: { bp2build_available: true },
106}
107`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200108 expectedBazelTargets: []string{
109 // python_version is PY3 by default.
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500110 makeBazelTarget("py_binary", "foo", attrNameToString{
111 "srcs": `["a.py"]`,
112 }),
Jingwen Chen13b9b422021-03-08 07:32:28 -0500113 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200114 })
Jingwen Chen13b9b422021-03-08 07:32:28 -0500115}
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux19d399d2021-09-17 20:30:21 +0000116
117func TestPythonBinaryHostArchVariance(t *testing.T) {
118 runBp2BuildTestCaseSimple(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400119 description: "test arch variants",
120 moduleTypeUnderTest: "python_binary_host",
121 moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux19d399d2021-09-17 20:30:21 +0000122 filesystem: map[string]string{
123 "dir/arm.py": "",
124 "dir/x86.py": "",
125 },
126 blueprint: `python_binary_host {
127 name: "foo-arm",
128 arch: {
129 arm: {
130 srcs: ["arm.py"],
131 },
132 x86: {
133 srcs: ["x86.py"],
134 },
135 },
136 }`,
137 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500138 makeBazelTarget("py_binary", "foo-arm", attrNameToString{
139 "srcs": `select({
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux19d399d2021-09-17 20:30:21 +0000140 "//build/bazel/platforms/arch:arm": ["arm.py"],
141 "//build/bazel/platforms/arch:x86": ["x86.py"],
142 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500143 })`,
144 }),
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux19d399d2021-09-17 20:30:21 +0000145 },
146 })
147}