androidmk_test.go 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468
  1. // Copyright 2016 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 androidmk
  15. import (
  16. "bytes"
  17. "fmt"
  18. "strings"
  19. "testing"
  20. "android/soong/bpfix/bpfix"
  21. )
  22. var testCases = []struct {
  23. desc string
  24. in string
  25. expected string
  26. }{
  27. {
  28. desc: "basic cc_library_shared with comments",
  29. in: `
  30. #
  31. # Copyright
  32. #
  33. # Module Comment
  34. include $(CLEAR_VARS)
  35. # Name Comment
  36. LOCAL_MODULE := test
  37. # Source comment
  38. LOCAL_SRC_FILES_EXCLUDE := a.c
  39. # Second source comment
  40. LOCAL_SRC_FILES_EXCLUDE += b.c
  41. include $(BUILD_SHARED_LIBRARY)`,
  42. expected: `
  43. //
  44. // Copyright
  45. //
  46. // Module Comment
  47. cc_library_shared {
  48. // Name Comment
  49. name: "test",
  50. // Source comment
  51. exclude_srcs: ["a.c"] + ["b.c"], // Second source comment
  52. }`,
  53. },
  54. {
  55. desc: "split local/global include_dirs (1)",
  56. in: `
  57. include $(CLEAR_VARS)
  58. LOCAL_C_INCLUDES := $(LOCAL_PATH)
  59. include $(BUILD_SHARED_LIBRARY)`,
  60. expected: `
  61. cc_library_shared {
  62. local_include_dirs: ["."],
  63. }`,
  64. },
  65. {
  66. desc: "split local/global include_dirs (2)",
  67. in: `
  68. include $(CLEAR_VARS)
  69. LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
  70. include $(BUILD_SHARED_LIBRARY)`,
  71. expected: `
  72. cc_library_shared {
  73. local_include_dirs: ["include"],
  74. }`,
  75. },
  76. {
  77. desc: "split local/global include_dirs (3)",
  78. in: `
  79. include $(CLEAR_VARS)
  80. LOCAL_C_INCLUDES := system/core/include
  81. include $(BUILD_SHARED_LIBRARY)`,
  82. expected: `
  83. cc_library_shared {
  84. include_dirs: ["system/core/include"],
  85. }`,
  86. },
  87. {
  88. desc: "split local/global include_dirs (4)",
  89. in: `
  90. input := testing/include
  91. include $(CLEAR_VARS)
  92. # Comment 1
  93. LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/include system/core/include $(input)
  94. # Comment 2
  95. LOCAL_C_INCLUDES += $(TOP)/system/core/include $(LOCAL_PATH)/test/include
  96. # Comment 3
  97. include $(BUILD_SHARED_LIBRARY)`,
  98. expected: `
  99. input = ["testing/include"]
  100. cc_library_shared {
  101. // Comment 1
  102. include_dirs: ["system/core/include"] + input + ["system/core/include"], // Comment 2
  103. local_include_dirs: ["."] + ["include"] + ["test/include"],
  104. // Comment 3
  105. }`,
  106. },
  107. {
  108. desc: "Convert to local path",
  109. in: `
  110. include $(CLEAR_VARS)
  111. LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res $(LOCAL_PATH)/res2
  112. LOCAL_ASSET_DIR := $(LOCAL_PATH)/asset
  113. LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
  114. include $(BUILD_PACKAGE)
  115. `,
  116. expected: `
  117. android_app {
  118. resource_dirs: [
  119. "res",
  120. "res2",
  121. ],
  122. asset_dirs: ["asset"],
  123. jarjar_rules: "jarjar-rules.txt",
  124. }`,
  125. },
  126. {
  127. desc: "LOCAL_MODULE_STEM",
  128. in: `
  129. include $(CLEAR_VARS)
  130. LOCAL_MODULE := libtest
  131. LOCAL_MODULE_STEM := $(LOCAL_MODULE).so
  132. include $(BUILD_SHARED_LIBRARY)
  133. include $(CLEAR_VARS)
  134. LOCAL_MODULE := libtest2
  135. LOCAL_MODULE_STEM := testing.so
  136. include $(BUILD_SHARED_LIBRARY)
  137. `,
  138. expected: `
  139. cc_library_shared {
  140. name: "libtest",
  141. suffix: ".so",
  142. }
  143. cc_library_shared {
  144. name: "libtest2",
  145. stem: "testing.so",
  146. }
  147. `,
  148. },
  149. {
  150. desc: "LOCAL_MODULE_HOST_OS",
  151. in: `
  152. include $(CLEAR_VARS)
  153. LOCAL_MODULE := libtest
  154. LOCAL_MODULE_HOST_OS := linux darwin windows
  155. include $(BUILD_SHARED_LIBRARY)
  156. include $(CLEAR_VARS)
  157. LOCAL_MODULE := libtest2
  158. LOCAL_MODULE_HOST_OS := linux
  159. include $(BUILD_SHARED_LIBRARY)
  160. `,
  161. expected: `
  162. cc_library_shared {
  163. name: "libtest",
  164. target: {
  165. windows: {
  166. enabled: true,
  167. }
  168. }
  169. }
  170. cc_library_shared {
  171. name: "libtest2",
  172. target: {
  173. darwin: {
  174. enabled: false,
  175. }
  176. }
  177. }
  178. `,
  179. },
  180. {
  181. desc: "LOCAL_RTTI_VALUE",
  182. in: `
  183. include $(CLEAR_VARS)
  184. LOCAL_MODULE := libtest
  185. LOCAL_RTTI_FLAG := # Empty flag
  186. include $(BUILD_SHARED_LIBRARY)
  187. include $(CLEAR_VARS)
  188. LOCAL_MODULE := libtest2
  189. LOCAL_RTTI_FLAG := -frtti
  190. include $(BUILD_SHARED_LIBRARY)
  191. `,
  192. expected: `
  193. cc_library_shared {
  194. name: "libtest",
  195. rtti: false, // Empty flag
  196. }
  197. cc_library_shared {
  198. name: "libtest2",
  199. rtti: true,
  200. }
  201. `,
  202. },
  203. {
  204. desc: "LOCAL_ARM_MODE",
  205. in: `
  206. include $(CLEAR_VARS)
  207. LOCAL_ARM_MODE := arm
  208. include $(BUILD_SHARED_LIBRARY)
  209. `,
  210. expected: `
  211. cc_library_shared {
  212. arch: {
  213. arm: {
  214. instruction_set: "arm",
  215. },
  216. },
  217. }
  218. `,
  219. },
  220. {
  221. desc: "_<OS> suffixes",
  222. in: `
  223. include $(CLEAR_VARS)
  224. LOCAL_SRC_FILES_darwin := darwin.c
  225. LOCAL_SRC_FILES_linux := linux.c
  226. LOCAL_SRC_FILES_windows := windows.c
  227. include $(BUILD_SHARED_LIBRARY)
  228. `,
  229. expected: `
  230. cc_library_shared {
  231. target: {
  232. darwin: {
  233. srcs: ["darwin.c"],
  234. },
  235. linux_glibc: {
  236. srcs: ["linux.c"],
  237. },
  238. windows: {
  239. srcs: ["windows.c"],
  240. },
  241. },
  242. }
  243. `,
  244. },
  245. {
  246. desc: "LOCAL_SANITIZE := never",
  247. in: `
  248. include $(CLEAR_VARS)
  249. LOCAL_SANITIZE := never
  250. include $(BUILD_SHARED_LIBRARY)
  251. `,
  252. expected: `
  253. cc_library_shared {
  254. sanitize: {
  255. never: true,
  256. },
  257. }
  258. `,
  259. },
  260. {
  261. desc: "LOCAL_SANITIZE unknown parameter",
  262. in: `
  263. include $(CLEAR_VARS)
  264. LOCAL_SANITIZE := thread cfi asdf
  265. LOCAL_SANITIZE_DIAG := cfi
  266. LOCAL_SANITIZE_RECOVER := qwert
  267. include $(BUILD_SHARED_LIBRARY)
  268. `,
  269. expected: `
  270. cc_library_shared {
  271. sanitize: {
  272. thread: true,
  273. cfi: true,
  274. misc_undefined: ["asdf"],
  275. diag: {
  276. cfi: true,
  277. },
  278. recover: ["qwert"],
  279. },
  280. }
  281. `,
  282. },
  283. {
  284. desc: "LOCAL_SANITIZE_RECOVER",
  285. in: `
  286. include $(CLEAR_VARS)
  287. LOCAL_SANITIZE_RECOVER := shift-exponent
  288. include $(BUILD_SHARED_LIBRARY)
  289. `,
  290. expected: `
  291. cc_library_shared {
  292. sanitize: {
  293. recover: ["shift-exponent"],
  294. },
  295. }
  296. `,
  297. },
  298. {
  299. desc: "version_script in LOCAL_LDFLAGS",
  300. in: `
  301. include $(CLEAR_VARS)
  302. LOCAL_LDFLAGS := -Wl,--link-opt -Wl,--version-script,$(LOCAL_PATH)/exported32.map
  303. include $(BUILD_SHARED_LIBRARY)
  304. `,
  305. expected: `
  306. cc_library_shared {
  307. ldflags: ["-Wl,--link-opt"],
  308. version_script: "exported32.map",
  309. }
  310. `,
  311. },
  312. {
  313. desc: "Handle TOP",
  314. in: `
  315. include $(CLEAR_VARS)
  316. LOCAL_C_INCLUDES := $(TOP)/system/core/include $(TOP)
  317. include $(BUILD_SHARED_LIBRARY)
  318. `,
  319. expected: `
  320. cc_library_shared {
  321. include_dirs: ["system/core/include", "."],
  322. }
  323. `,
  324. },
  325. {
  326. desc: "Remove LOCAL_MODULE_TAGS optional",
  327. in: `
  328. include $(CLEAR_VARS)
  329. LOCAL_MODULE_TAGS := optional
  330. include $(BUILD_SHARED_LIBRARY)
  331. `,
  332. expected: `
  333. cc_library_shared {
  334. }
  335. `,
  336. },
  337. {
  338. desc: "Warn for LOCAL_MODULE_TAGS non-optional",
  339. in: `
  340. include $(CLEAR_VARS)
  341. LOCAL_MODULE_TAGS := debug
  342. include $(BUILD_SHARED_LIBRARY)
  343. `,
  344. expected: `
  345. cc_library_shared {
  346. // WARNING: Module tags are not supported in Soong.
  347. // Add this module to PRODUCT_PACKAGES_DEBUG in your product file if you want to
  348. // force installation for -userdebug and -eng builds.
  349. }
  350. `,
  351. },
  352. {
  353. desc: "Custom warning for LOCAL_MODULE_TAGS tests",
  354. in: `
  355. include $(CLEAR_VARS)
  356. LOCAL_MODULE_TAGS := debug tests
  357. include $(BUILD_SHARED_LIBRARY)
  358. `,
  359. expected: `
  360. cc_library_shared {
  361. // WARNING: Module tags are not supported in Soong.
  362. // Add this module to PRODUCT_PACKAGES_DEBUG in your product file if you want to
  363. // force installation for -userdebug and -eng builds.
  364. // WARNING: Module tags are not supported in Soong.
  365. // To make a shared library only for tests, use the "cc_test_library" module
  366. // type. If you don't use gtest, set "gtest: false".
  367. }
  368. `,
  369. },
  370. {
  371. desc: "Ignore LOCAL_MODULE_TAGS tests for cc_test",
  372. in: `
  373. include $(CLEAR_VARS)
  374. LOCAL_MODULE_TAGS := tests
  375. include $(BUILD_NATIVE_TEST)
  376. `,
  377. expected: `
  378. cc_test {
  379. }
  380. `,
  381. },
  382. {
  383. desc: "Convert LOCAL_MODULE_TAGS tests to java_test",
  384. in: `
  385. include $(CLEAR_VARS)
  386. LOCAL_MODULE_TAGS := tests
  387. include $(BUILD_JAVA_LIBRARY)
  388. include $(CLEAR_VARS)
  389. LOCAL_MODULE_TAGS := tests
  390. include $(BUILD_PACKAGE)
  391. include $(CLEAR_VARS)
  392. LOCAL_MODULE_TAGS := tests
  393. include $(BUILD_HOST_JAVA_LIBRARY)
  394. `,
  395. expected: `
  396. java_test {
  397. }
  398. android_test {
  399. }
  400. java_test_host {
  401. }
  402. `,
  403. },
  404. {
  405. desc: "Input containing escaped quotes",
  406. in: `
  407. include $(CLEAR_VARS)
  408. LOCAL_MODULE:= libsensorservice
  409. LOCAL_CFLAGS:= -DLOG_TAG=\"-DDontEscapeMe\"
  410. LOCAL_SRC_FILES := \"EscapeMe.cc\"
  411. include $(BUILD_SHARED_LIBRARY)
  412. `,
  413. expected: `
  414. cc_library_shared {
  415. name: "libsensorservice",
  416. cflags: ["-DLOG_TAG=\"-DDontEscapeMe\""],
  417. srcs: ["\\\"EscapeMe.cc\\\""],
  418. }
  419. `,
  420. },
  421. {
  422. desc: "Don't fail on missing CLEAR_VARS",
  423. in: `
  424. LOCAL_MODULE := iAmAModule
  425. include $(BUILD_SHARED_LIBRARY)`,
  426. expected: `
  427. // ANDROIDMK TRANSLATION WARNING: No 'include $(CLEAR_VARS)' detected before first assignment; clearing vars now
  428. cc_library_shared {
  429. name: "iAmAModule",
  430. }`,
  431. },
  432. {
  433. desc: "LOCAL_AIDL_INCLUDES",
  434. in: `
  435. include $(CLEAR_VARS)
  436. LOCAL_MODULE := iAmAModule
  437. LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/main/java system/core
  438. include $(BUILD_SHARED_LIBRARY)`,
  439. expected: `
  440. cc_library_shared {
  441. name: "iAmAModule",
  442. aidl: {
  443. include_dirs: ["system/core"],
  444. local_include_dirs: ["src/main/java"],
  445. }
  446. }`,
  447. },
  448. {
  449. // the important part of this test case is that it confirms that androidmk doesn't
  450. // panic in this case
  451. desc: "multiple directives inside recipe",
  452. in: `
  453. ifeq ($(a),true)
  454. ifeq ($(b),false)
  455. imABuildStatement: somefile
  456. echo begin
  457. endif # a==true
  458. echo middle
  459. endif # b==false
  460. echo end
  461. `,
  462. expected: `
  463. // ANDROIDMK TRANSLATION ERROR: unsupported conditional
  464. // ifeq ($(a),true)
  465. // ANDROIDMK TRANSLATION ERROR: unsupported conditional
  466. // ifeq ($(b),false)
  467. // ANDROIDMK TRANSLATION ERROR: unsupported line
  468. // rule: imABuildStatement: somefile
  469. // echo begin
  470. // # a==true
  471. // echo middle
  472. // # b==false
  473. // echo end
  474. //
  475. // ANDROIDMK TRANSLATION ERROR: endif from unsupported conditional
  476. // endif
  477. // ANDROIDMK TRANSLATION ERROR: endif from unsupported conditional
  478. // endif
  479. `,
  480. },
  481. {
  482. desc: "ignore all-makefiles-under",
  483. in: `
  484. include $(call all-makefiles-under,$(LOCAL_PATH))
  485. `,
  486. expected: ``,
  487. },
  488. {
  489. desc: "proguard options for java library",
  490. in: `
  491. include $(CLEAR_VARS)
  492. # Empty
  493. LOCAL_PROGUARD_ENABLED :=
  494. # Disabled
  495. LOCAL_PROGUARD_ENABLED := disabled
  496. # Full
  497. LOCAL_PROGUARD_ENABLED := full
  498. # Obfuscation and optimization
  499. LOCAL_PROGUARD_ENABLED := obfuscation optimization
  500. # Custom
  501. LOCAL_PROGUARD_ENABLED := custom
  502. include $(BUILD_STATIC_JAVA_LIBRARY)
  503. `,
  504. expected: `
  505. java_library {
  506. // Empty
  507. // Disabled
  508. optimize: {
  509. enabled: false,
  510. // Full
  511. enabled: true,
  512. // Obfuscation and optimization
  513. obfuscate: true,
  514. optimize: true,
  515. enabled: true,
  516. // Custom
  517. no_aapt_flags: true,
  518. enabled: true,
  519. },
  520. }
  521. `,
  522. },
  523. {
  524. desc: "java library",
  525. in: `
  526. include $(CLEAR_VARS)
  527. LOCAL_SRC_FILES := a.java
  528. include $(BUILD_STATIC_JAVA_LIBRARY)
  529. include $(CLEAR_VARS)
  530. LOCAL_SRC_FILES := b.java
  531. include $(BUILD_JAVA_LIBRARY)
  532. include $(CLEAR_VARS)
  533. LOCAL_SRC_FILES := c.java
  534. LOCAL_UNINSTALLABLE_MODULE := true
  535. include $(BUILD_JAVA_LIBRARY)
  536. include $(CLEAR_VARS)
  537. LOCAL_SRC_FILES := d.java
  538. LOCAL_UNINSTALLABLE_MODULE := false
  539. include $(BUILD_JAVA_LIBRARY)
  540. include $(CLEAR_VARS)
  541. LOCAL_SRC_FILES := $(call all-java-files-under, src gen)
  542. include $(BUILD_STATIC_JAVA_LIBRARY)
  543. include $(CLEAR_VARS)
  544. LOCAL_JAVA_RESOURCE_FILES := foo bar
  545. include $(BUILD_STATIC_JAVA_LIBRARY)
  546. `,
  547. expected: `
  548. java_library {
  549. srcs: ["a.java"],
  550. }
  551. java_library {
  552. installable: true,
  553. srcs: ["b.java"],
  554. }
  555. java_library {
  556. installable: false,
  557. srcs: ["c.java"],
  558. }
  559. java_library {
  560. installable: true,
  561. srcs: ["d.java"],
  562. }
  563. java_library {
  564. srcs: [
  565. "src/**/*.java",
  566. "gen/**/*.java",
  567. ],
  568. }
  569. java_library {
  570. java_resources: [
  571. "foo",
  572. "bar",
  573. ],
  574. }
  575. `,
  576. },
  577. {
  578. desc: "errorprone options for java library",
  579. in: `
  580. include $(CLEAR_VARS)
  581. LOCAL_ERROR_PRONE_FLAGS := -Xep:AsyncCallableReturnsNull:ERROR -Xep:AsyncFunctionReturnsNull:ERROR
  582. include $(BUILD_STATIC_JAVA_LIBRARY)
  583. `,
  584. expected: `
  585. java_library {
  586. errorprone: {
  587. javacflags: [
  588. "-Xep:AsyncCallableReturnsNull:ERROR",
  589. "-Xep:AsyncFunctionReturnsNull:ERROR",
  590. ],
  591. },
  592. }
  593. `,
  594. },
  595. {
  596. desc: "java prebuilt",
  597. in: `
  598. include $(CLEAR_VARS)
  599. LOCAL_SRC_FILES := test.jar
  600. LOCAL_MODULE_CLASS := JAVA_LIBRARIES
  601. LOCAL_STATIC_ANDROID_LIBRARIES :=
  602. LOCAL_JETIFIER_ENABLED := true
  603. include $(BUILD_PREBUILT)
  604. `,
  605. expected: `
  606. java_import {
  607. jars: ["test.jar"],
  608. jetifier: true,
  609. }
  610. `,
  611. },
  612. {
  613. desc: "aar prebuilt",
  614. in: `
  615. include $(CLEAR_VARS)
  616. LOCAL_SRC_FILES := test.aar
  617. LOCAL_MODULE_CLASS := JAVA_LIBRARIES
  618. include $(BUILD_PREBUILT)
  619. `,
  620. expected: `
  621. android_library_import {
  622. aars: ["test.aar"],
  623. }
  624. `,
  625. },
  626. {
  627. desc: "aar",
  628. in: `
  629. include $(CLEAR_VARS)
  630. LOCAL_SRC_FILES := test.java
  631. LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
  632. LOCAL_JACK_COVERAGE_INCLUDE_FILTER := foo.*
  633. include $(BUILD_STATIC_JAVA_LIBRARY)
  634. include $(CLEAR_VARS)
  635. LOCAL_SRC_FILES := test.java
  636. LOCAL_STATIC_LIBRARIES := foo
  637. LOCAL_STATIC_ANDROID_LIBRARIES := bar
  638. LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := bar.*
  639. include $(BUILD_STATIC_JAVA_LIBRARY)
  640. include $(CLEAR_VARS)
  641. LOCAL_SRC_FILES := test.java
  642. LOCAL_SHARED_LIBRARIES := foo
  643. LOCAL_SHARED_ANDROID_LIBRARIES := bar
  644. include $(BUILD_STATIC_JAVA_LIBRARY)
  645. include $(CLEAR_VARS)
  646. LOCAL_SRC_FILES := test.java
  647. LOCAL_STATIC_ANDROID_LIBRARIES :=
  648. include $(BUILD_STATIC_JAVA_LIBRARY)
  649. `,
  650. expected: `
  651. android_library {
  652. srcs: ["test.java"],
  653. resource_dirs: ["res"],
  654. jacoco: {
  655. include_filter: ["foo.*"],
  656. },
  657. }
  658. android_library {
  659. srcs: ["test.java"],
  660. static_libs: [
  661. "foo",
  662. "bar",
  663. ],
  664. jacoco: {
  665. exclude_filter: ["bar.*"],
  666. },
  667. }
  668. android_library {
  669. srcs: ["test.java"],
  670. libs: [
  671. "foo",
  672. "bar",
  673. ],
  674. }
  675. java_library {
  676. srcs: ["test.java"],
  677. static_libs: [],
  678. }
  679. `,
  680. },
  681. {
  682. desc: "cc_library shared_libs",
  683. in: `
  684. include $(CLEAR_VARS)
  685. LOCAL_SHARED_LIBRARIES := libfoo
  686. include $(BUILD_SHARED_LIBRARY)
  687. `,
  688. expected: `
  689. cc_library_shared {
  690. shared_libs: ["libfoo"],
  691. }
  692. `,
  693. },
  694. {
  695. desc: "LOCAL_STRIP_MODULE",
  696. in: `
  697. include $(CLEAR_VARS)
  698. LOCAL_MODULE := libtest
  699. LOCAL_STRIP_MODULE := false
  700. include $(BUILD_SHARED_LIBRARY)
  701. include $(CLEAR_VARS)
  702. LOCAL_MODULE := libtest2
  703. LOCAL_STRIP_MODULE := true
  704. include $(BUILD_SHARED_LIBRARY)
  705. include $(CLEAR_VARS)
  706. LOCAL_MODULE := libtest3
  707. LOCAL_STRIP_MODULE := keep_symbols
  708. include $(BUILD_SHARED_LIBRARY)
  709. `,
  710. expected: `
  711. cc_library_shared {
  712. name: "libtest",
  713. strip: {
  714. none: true,
  715. }
  716. }
  717. cc_library_shared {
  718. name: "libtest2",
  719. strip: {
  720. all: true,
  721. }
  722. }
  723. cc_library_shared {
  724. name: "libtest3",
  725. strip: {
  726. keep_symbols: true,
  727. }
  728. }
  729. `,
  730. },
  731. {
  732. desc: "BUILD_CTS_SUPPORT_PACKAGE",
  733. in: `
  734. include $(CLEAR_VARS)
  735. LOCAL_PACKAGE_NAME := FooTest
  736. LOCAL_COMPATIBILITY_SUITE := cts
  737. LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
  738. include $(BUILD_CTS_SUPPORT_PACKAGE)
  739. `,
  740. expected: `
  741. android_test {
  742. name: "FooTest",
  743. defaults: ["cts_support_defaults"],
  744. test_suites: ["cts"],
  745. }
  746. `,
  747. },
  748. {
  749. desc: "BUILD_CTS_PACKAGE",
  750. in: `
  751. include $(CLEAR_VARS)
  752. LOCAL_PACKAGE_NAME := FooTest
  753. LOCAL_COMPATIBILITY_SUITE := cts
  754. LOCAL_CTS_TEST_PACKAGE := foo.bar
  755. LOCAL_COMPATIBILITY_SUPPORT_FILES := file1
  756. include $(BUILD_CTS_PACKAGE)
  757. `,
  758. expected: `
  759. android_test {
  760. name: "FooTest",
  761. defaults: ["cts_defaults"],
  762. test_suites: ["cts"],
  763. data: ["file1"],
  764. }
  765. `,
  766. },
  767. {
  768. desc: "BUILD_CTS_*_JAVA_LIBRARY",
  769. in: `
  770. include $(CLEAR_VARS)
  771. LOCAL_MODULE := foolib
  772. include $(BUILD_CTS_TARGET_JAVA_LIBRARY)
  773. include $(CLEAR_VARS)
  774. LOCAL_MODULE := foolib-host
  775. include $(BUILD_CTS_HOST_JAVA_LIBRARY)
  776. `,
  777. expected: `
  778. java_library {
  779. name: "foolib",
  780. defaults: ["cts_defaults"],
  781. }
  782. java_library_host {
  783. name: "foolib-host",
  784. defaults: ["cts_defaults"],
  785. }
  786. `,
  787. },
  788. {
  789. desc: "LOCAL_ANNOTATION_PROCESSORS",
  790. in: `
  791. include $(CLEAR_VARS)
  792. LOCAL_MODULE := foolib
  793. LOCAL_ANNOTATION_PROCESSORS := bar
  794. LOCAL_ANNOTATION_PROCESSOR_CLASSES := com.bar
  795. include $(BUILD_STATIC_JAVA_LIBRARY)
  796. `,
  797. expected: `
  798. java_library {
  799. name: "foolib",
  800. plugins: ["bar"],
  801. }
  802. `,
  803. },
  804. {
  805. desc: "prebuilt_etc_TARGET_OUT_ETC",
  806. in: `
  807. include $(CLEAR_VARS)
  808. LOCAL_MODULE := etc.test1
  809. LOCAL_SRC_FILES := mymod
  810. LOCAL_MODULE_CLASS := ETC
  811. LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/foo/bar
  812. include $(BUILD_PREBUILT)
  813. `,
  814. expected: `
  815. prebuilt_etc {
  816. name: "etc.test1",
  817. src: "mymod",
  818. relative_install_path: "foo/bar",
  819. }
  820. `,
  821. },
  822. {
  823. desc: "prebuilt_etc_PRODUCT_OUT/system/etc",
  824. in: `
  825. include $(CLEAR_VARS)
  826. LOCAL_MODULE := etc.test1
  827. LOCAL_MODULE_CLASS := ETC
  828. LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/etc/foo/bar
  829. LOCAL_SRC_FILES := $(LOCAL_MODULE)
  830. include $(BUILD_PREBUILT)
  831. `,
  832. expected: `
  833. prebuilt_etc {
  834. name: "etc.test1",
  835. src: "etc.test1",
  836. relative_install_path: "foo/bar",
  837. }
  838. `,
  839. },
  840. {
  841. desc: "prebuilt_etc_TARGET_OUT_ODM/etc",
  842. in: `
  843. include $(CLEAR_VARS)
  844. LOCAL_MODULE := etc.test1
  845. LOCAL_MODULE_CLASS := ETC
  846. LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/foo/bar
  847. include $(BUILD_PREBUILT)
  848. `,
  849. expected: `
  850. prebuilt_etc {
  851. name: "etc.test1",
  852. relative_install_path: "foo/bar",
  853. device_specific: true,
  854. }
  855. `,
  856. },
  857. {
  858. desc: "prebuilt_etc_TARGET_OUT_PRODUCT/etc",
  859. in: `
  860. include $(CLEAR_VARS)
  861. LOCAL_MODULE := etc.test1
  862. LOCAL_MODULE_CLASS := ETC
  863. LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/etc/foo/bar
  864. include $(BUILD_PREBUILT)
  865. `,
  866. expected: `
  867. prebuilt_etc {
  868. name: "etc.test1",
  869. relative_install_path: "foo/bar",
  870. product_specific: true,
  871. }
  872. `,
  873. },
  874. {
  875. desc: "prebuilt_etc_TARGET_OUT_PRODUCT_ETC",
  876. in: `
  877. include $(CLEAR_VARS)
  878. LOCAL_MODULE := etc.test1
  879. LOCAL_MODULE_CLASS := ETC
  880. LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/foo/bar
  881. include $(BUILD_PREBUILT)
  882. `,
  883. expected: `
  884. prebuilt_etc {
  885. name: "etc.test1",
  886. relative_install_path: "foo/bar",
  887. product_specific: true,
  888. }
  889. `,
  890. },
  891. {
  892. desc: "prebuilt_etc_TARGET_OUT_SYSTEM_EXT/etc",
  893. in: `
  894. include $(CLEAR_VARS)
  895. LOCAL_MODULE := etc.test1
  896. LOCAL_MODULE_CLASS := ETC
  897. LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_EXT)/etc/foo/bar
  898. include $(BUILD_PREBUILT)
  899. `,
  900. expected: `
  901. prebuilt_etc {
  902. name: "etc.test1",
  903. relative_install_path: "foo/bar",
  904. system_ext_specific: true,
  905. }
  906. `,
  907. },
  908. {
  909. desc: "prebuilt_etc_TARGET_OUT_SYSTEM_EXT_ETC",
  910. in: `
  911. include $(CLEAR_VARS)
  912. LOCAL_MODULE := etc.test1
  913. LOCAL_MODULE_CLASS := ETC
  914. LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_EXT_ETC)/foo/bar
  915. include $(BUILD_PREBUILT)
  916. `,
  917. expected: `
  918. prebuilt_etc {
  919. name: "etc.test1",
  920. relative_install_path: "foo/bar",
  921. system_ext_specific: true,
  922. }
  923. `,
  924. },
  925. {
  926. desc: "prebuilt_etc_TARGET_OUT_VENDOR/etc",
  927. in: `
  928. include $(CLEAR_VARS)
  929. LOCAL_MODULE := etc.test1
  930. LOCAL_MODULE_CLASS := ETC
  931. LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc/foo/bar
  932. include $(BUILD_PREBUILT)
  933. `,
  934. expected: `
  935. prebuilt_etc {
  936. name: "etc.test1",
  937. relative_install_path: "foo/bar",
  938. proprietary: true,
  939. }
  940. `,
  941. },
  942. {
  943. desc: "prebuilt_etc_PRODUCT_OUT/TARGET_COPY_OUT_VENDOR/etc",
  944. in: `
  945. include $(CLEAR_VARS)
  946. LOCAL_MODULE := etc.test1
  947. LOCAL_MODULE_CLASS := ETC
  948. LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/foo/bar
  949. include $(BUILD_PREBUILT)
  950. `,
  951. expected: `
  952. prebuilt_etc {
  953. name: "etc.test1",
  954. relative_install_path: "foo/bar",
  955. proprietary: true,
  956. }
  957. `,
  958. },
  959. {
  960. desc: "prebuilt_etc_TARGET_OUT_VENDOR_ETC",
  961. in: `
  962. include $(CLEAR_VARS)
  963. LOCAL_MODULE := etc.test1
  964. LOCAL_MODULE_CLASS := ETC
  965. LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/foo/bar
  966. include $(BUILD_PREBUILT)
  967. `,
  968. expected: `
  969. prebuilt_etc {
  970. name: "etc.test1",
  971. relative_install_path: "foo/bar",
  972. proprietary: true,
  973. }
  974. `,
  975. },
  976. {
  977. desc: "prebuilt_etc_TARGET_RECOVERY_ROOT_OUT/system/etc",
  978. in: `
  979. include $(CLEAR_VARS)
  980. LOCAL_MODULE := etc.test1
  981. LOCAL_MODULE_CLASS := ETC
  982. LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/etc/foo/bar
  983. include $(BUILD_PREBUILT)
  984. `,
  985. expected: `
  986. prebuilt_etc {
  987. name: "etc.test1",
  988. relative_install_path: "foo/bar",
  989. recovery: true,
  990. }
  991. `,
  992. },
  993. {
  994. desc: "prebuilt_usr_share",
  995. in: `
  996. include $(CLEAR_VARS)
  997. LOCAL_MODULE := foo
  998. LOCAL_MODULE_CLASS := ETC
  999. LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share
  1000. LOCAL_SRC_FILES := foo.txt
  1001. include $(BUILD_PREBUILT)
  1002. `,
  1003. expected: `
  1004. prebuilt_usr_share {
  1005. name: "foo",
  1006. src: "foo.txt",
  1007. }
  1008. `,
  1009. },
  1010. {
  1011. desc: "prebuilt_usr_share subdir_bar",
  1012. in: `
  1013. include $(CLEAR_VARS)
  1014. LOCAL_MODULE := foo
  1015. LOCAL_MODULE_CLASS := ETC
  1016. LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share/bar
  1017. LOCAL_SRC_FILES := foo.txt
  1018. include $(BUILD_PREBUILT)
  1019. `,
  1020. expected: `
  1021. prebuilt_usr_share {
  1022. name: "foo",
  1023. src: "foo.txt",
  1024. relative_install_path: "bar",
  1025. }
  1026. `,
  1027. },
  1028. {
  1029. desc: "prebuilt_usr_share_host",
  1030. in: `
  1031. include $(CLEAR_VARS)
  1032. LOCAL_MODULE := foo
  1033. LOCAL_MODULE_CLASS := ETC
  1034. LOCAL_MODULE_PATH := $(HOST_OUT)/usr/share
  1035. LOCAL_SRC_FILES := foo.txt
  1036. include $(BUILD_PREBUILT)
  1037. `,
  1038. expected: `
  1039. prebuilt_usr_share_host {
  1040. name: "foo",
  1041. src: "foo.txt",
  1042. }
  1043. `,
  1044. },
  1045. {
  1046. desc: "prebuilt_font",
  1047. in: `
  1048. include $(CLEAR_VARS)
  1049. LOCAL_MODULE := font.ttf
  1050. LOCAL_SRC_FILES := $(LOCAL_MODULE)
  1051. LOCAL_MODULE_CLASS := ETC
  1052. LOCAL_MODULE_TAGS := optional
  1053. LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
  1054. include $(BUILD_PREBUILT)
  1055. `,
  1056. expected: `
  1057. prebuilt_font {
  1058. name: "font.ttf",
  1059. src: "font.ttf",
  1060. }
  1061. `,
  1062. },
  1063. {
  1064. desc: "prebuilt_font",
  1065. in: `
  1066. include $(CLEAR_VARS)
  1067. LOCAL_MODULE := font.ttf
  1068. LOCAL_SRC_FILES := $(LOCAL_MODULE)
  1069. LOCAL_MODULE_CLASS := ETC
  1070. LOCAL_MODULE_TAGS := optional
  1071. LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/fonts
  1072. include $(BUILD_PREBUILT)
  1073. `,
  1074. expected: `
  1075. prebuilt_font {
  1076. name: "font.ttf",
  1077. src: "font.ttf",
  1078. product_specific: true,
  1079. }
  1080. `,
  1081. },
  1082. {
  1083. desc: "prebuilt_usr_share_host subdir_bar",
  1084. in: `
  1085. include $(CLEAR_VARS)
  1086. LOCAL_MODULE := foo
  1087. LOCAL_MODULE_CLASS := ETC
  1088. LOCAL_MODULE_PATH := $(HOST_OUT)/usr/share/bar
  1089. LOCAL_SRC_FILES := foo.txt
  1090. include $(BUILD_PREBUILT)
  1091. `,
  1092. expected: `
  1093. prebuilt_usr_share_host {
  1094. name: "foo",
  1095. src: "foo.txt",
  1096. relative_install_path: "bar",
  1097. }
  1098. `,
  1099. },
  1100. {
  1101. desc: "prebuilt_firmware subdir_bar in $(TARGET_OUT_ETC)",
  1102. in: `
  1103. include $(CLEAR_VARS)
  1104. LOCAL_MODULE := foo
  1105. LOCAL_MODULE_CLASS := ETC
  1106. LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/firmware/bar
  1107. LOCAL_SRC_FILES := foo.fw
  1108. include $(BUILD_PREBUILT)
  1109. `,
  1110. expected: `
  1111. prebuilt_firmware {
  1112. name: "foo",
  1113. src: "foo.fw",
  1114. relative_install_path: "bar",
  1115. }
  1116. `,
  1117. },
  1118. {
  1119. desc: "prebuilt_firmware subdir_bar in $(TARGET_OUT)",
  1120. in: `
  1121. include $(CLEAR_VARS)
  1122. LOCAL_MODULE := foo
  1123. LOCAL_MODULE_CLASS := ETC
  1124. LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/firmware/bar
  1125. LOCAL_SRC_FILES := foo.fw
  1126. include $(BUILD_PREBUILT)
  1127. `,
  1128. expected: `
  1129. prebuilt_firmware {
  1130. name: "foo",
  1131. src: "foo.fw",
  1132. relative_install_path: "bar",
  1133. }
  1134. `,
  1135. },
  1136. {
  1137. desc: "prebuilt_firmware subdir_bar in $(TARGET_OUT_VENDOR)",
  1138. in: `
  1139. include $(CLEAR_VARS)
  1140. LOCAL_MODULE := foo
  1141. LOCAL_MODULE_CLASS := ETC
  1142. LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/firmware/bar
  1143. LOCAL_SRC_FILES := foo.fw
  1144. include $(BUILD_PREBUILT)
  1145. `,
  1146. expected: `
  1147. prebuilt_firmware {
  1148. name: "foo",
  1149. src: "foo.fw",
  1150. relative_install_path: "bar",
  1151. proprietary: true,
  1152. }
  1153. `,
  1154. },
  1155. {
  1156. desc: "prebuilt_firmware subdir_bar in $(TARGET_OUT)/vendor",
  1157. in: `
  1158. include $(CLEAR_VARS)
  1159. LOCAL_MODULE := foo
  1160. LOCAL_MODULE_CLASS := ETC
  1161. LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/firmware/bar
  1162. LOCAL_SRC_FILES := foo.fw
  1163. include $(BUILD_PREBUILT)
  1164. `,
  1165. expected: `
  1166. prebuilt_firmware {
  1167. name: "foo",
  1168. src: "foo.fw",
  1169. relative_install_path: "bar",
  1170. proprietary: true,
  1171. }
  1172. `,
  1173. },
  1174. {
  1175. desc: "comment with ESC",
  1176. in: `
  1177. # Comment line 1 \
  1178. # Comment line 2
  1179. `,
  1180. expected: `
  1181. // Comment line 1 \
  1182. // Comment line 2
  1183. `,
  1184. },
  1185. {
  1186. desc: "Merge with variable reference",
  1187. in: `
  1188. include $(CLEAR_VARS)
  1189. LOCAL_MODULE := foo
  1190. LOCAL_STATIC_ANDROID_LIBRARIES := $(FOO)
  1191. LOCAL_STATIC_JAVA_LIBRARIES := javalib
  1192. LOCAL_JAVA_RESOURCE_DIRS := $(FOO)
  1193. include $(BUILD_PACKAGE)
  1194. `,
  1195. expected: `
  1196. android_app {
  1197. name: "foo",
  1198. static_libs: FOO,
  1199. static_libs: ["javalib"],
  1200. java_resource_dirs: FOO,
  1201. }
  1202. `,
  1203. },
  1204. {
  1205. desc: "LOCAL_JACK_ENABLED and LOCAL_JACK_FLAGS skipped",
  1206. in: `
  1207. include $(CLEAR_VARS)
  1208. LOCAL_MODULE := foo
  1209. LOCAL_JACK_ENABLED := incremental
  1210. LOCAL_JACK_FLAGS := --multi-dex native
  1211. include $(BUILD_PACKAGE)
  1212. `,
  1213. expected: `
  1214. android_app {
  1215. name: "foo",
  1216. }
  1217. `,
  1218. },
  1219. {
  1220. desc: "android_app_import",
  1221. in: `
  1222. include $(CLEAR_VARS)
  1223. LOCAL_MODULE := foo
  1224. LOCAL_SRC_FILES := foo.apk
  1225. LOCAL_PRIVILEGED_MODULE := true
  1226. LOCAL_MODULE_CLASS := APPS
  1227. LOCAL_MODULE_TAGS := optional
  1228. LOCAL_DEX_PREOPT := false
  1229. include $(BUILD_PREBUILT)
  1230. `,
  1231. expected: `
  1232. android_app_import {
  1233. name: "foo",
  1234. privileged: true,
  1235. dex_preopt: {
  1236. enabled: false,
  1237. },
  1238. apk: "foo.apk",
  1239. }
  1240. `,
  1241. },
  1242. {
  1243. desc: "android_test_import prebuilt",
  1244. in: `
  1245. include $(CLEAR_VARS)
  1246. LOCAL_MODULE := foo
  1247. LOCAL_SRC_FILES := foo.apk
  1248. LOCAL_MODULE_CLASS := APPS
  1249. LOCAL_MODULE_TAGS := tests
  1250. LOCAL_MODULE_SUFFIX := .apk
  1251. LOCAL_CERTIFICATE := PRESIGNED
  1252. LOCAL_REPLACE_PREBUILT_APK_INSTALLED := $(LOCAL_PATH)/foo.apk
  1253. LOCAL_COMPATIBILITY_SUITE := cts
  1254. include $(BUILD_PREBUILT)
  1255. `,
  1256. expected: `
  1257. android_test_import {
  1258. name: "foo",
  1259. srcs: ["foo.apk"],
  1260. certificate: "PRESIGNED",
  1261. preprocessed: true,
  1262. test_suites: ["cts"],
  1263. }
  1264. `,
  1265. },
  1266. {
  1267. desc: "dashed_variable gets renamed",
  1268. in: `
  1269. include $(CLEAR_VARS)
  1270. dashed-variable:= a.cpp
  1271. LOCAL_MODULE:= test
  1272. LOCAL_SRC_FILES:= $(dashed-variable)
  1273. include $(BUILD_EXECUTABLE)
  1274. `,
  1275. expected: `
  1276. // ANDROIDMK TRANSLATION WARNING: Variable names cannot contain: "-". Renamed "dashed-variable" to "dashed_dash_variable"
  1277. dashed_dash_variable = ["a.cpp"]
  1278. cc_binary {
  1279. name: "test",
  1280. srcs: dashed_dash_variable,
  1281. }
  1282. `,
  1283. },
  1284. {
  1285. desc: "variableReassigned",
  1286. in: `
  1287. include $(CLEAR_VARS)
  1288. src_files:= a.cpp
  1289. LOCAL_SRC_FILES:= $(src_files)
  1290. LOCAL_MODULE:= test
  1291. include $(BUILD_EXECUTABLE)
  1292. # clear locally used variable
  1293. src_files:=
  1294. `,
  1295. expected: `
  1296. src_files = ["a.cpp"]
  1297. cc_binary {
  1298. name: "test",
  1299. srcs: src_files,
  1300. }
  1301. // clear locally used variable
  1302. // ANDROIDMK TRANSLATION ERROR: cannot assign a variable multiple times: "src_files"
  1303. // src_files :=
  1304. `,
  1305. },
  1306. {
  1307. desc: "undefined_boolean_var",
  1308. in: `
  1309. include $(CLEAR_VARS)
  1310. LOCAL_SRC_FILES:= a.cpp
  1311. LOCAL_MODULE:= test
  1312. LOCAL_32_BIT_ONLY := $(FLAG)
  1313. include $(BUILD_EXECUTABLE)
  1314. `,
  1315. expected: `
  1316. cc_binary {
  1317. name: "test",
  1318. srcs: ["a.cpp"],
  1319. // ANDROIDMK TRANSLATION ERROR: value should evaluate to boolean literal
  1320. // LOCAL_32_BIT_ONLY := $(FLAG)
  1321. }
  1322. `,
  1323. },
  1324. {
  1325. desc: "runtime_resource_overlay",
  1326. in: `
  1327. include $(CLEAR_VARS)
  1328. LOCAL_PACKAGE_NAME := foo
  1329. LOCAL_PRODUCT_MODULE := true
  1330. LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
  1331. LOCAL_SDK_VERSION := current
  1332. LOCAL_RRO_THEME := FooTheme
  1333. include $(BUILD_RRO_PACKAGE)
  1334. `,
  1335. expected: `
  1336. runtime_resource_overlay {
  1337. name: "foo",
  1338. product_specific: true,
  1339. resource_dirs: ["res"],
  1340. sdk_version: "current",
  1341. theme: "FooTheme",
  1342. }
  1343. `,
  1344. },
  1345. }
  1346. func TestEndToEnd(t *testing.T) {
  1347. for i, test := range testCases {
  1348. expected, err := bpfix.Reformat(test.expected)
  1349. if err != nil {
  1350. t.Error(err)
  1351. }
  1352. got, errs := ConvertFile(fmt.Sprintf("<testcase %d>", i), bytes.NewBufferString(test.in))
  1353. if len(errs) > 0 {
  1354. t.Errorf("Unexpected errors: %q", errs)
  1355. continue
  1356. }
  1357. if got != expected {
  1358. t.Errorf("failed testcase '%s'\ninput:\n%s\n\nexpected:\n%s\ngot:\n%s\n", test.desc, strings.TrimSpace(test.in), expected, got)
  1359. }
  1360. }
  1361. }