@btc-vision/bitcoin 6.4.10 → 6.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/.babelrc +13 -4
  2. package/.mocharc.json +13 -13
  3. package/.prettierrc.json +12 -12
  4. package/CHANGELOG.md +403 -403
  5. package/CONTRIBUTING.md +83 -83
  6. package/LICENSE +21 -21
  7. package/README.md +201 -201
  8. package/browser/chunks/crypto-C6FlKKmp.js +2006 -0
  9. package/browser/chunks/payments-BE4vwHhV.js +1045 -0
  10. package/browser/chunks/psbt-Dlosf9CT.js +3853 -0
  11. package/browser/chunks/script-COWGdiOo.js +318 -0
  12. package/browser/chunks/transaction-BiXwH2v4.js +421 -0
  13. package/browser/chunks/utils-BKmkTzNZ.js +759 -0
  14. package/browser/crypto/crypto.d.ts +1 -1
  15. package/browser/index.d.ts +7 -27
  16. package/browser/index.js +92 -2
  17. package/build/index.d.ts +7 -27
  18. package/build/index.js +2 -2
  19. package/cjs/package.json +3 -3
  20. package/gulpfile.js +42 -42
  21. package/package.json +153 -150
  22. package/src/bip66.ts +107 -107
  23. package/src/block.ts +233 -233
  24. package/src/bufferutils.ts +188 -188
  25. package/src/crypto.ts +108 -108
  26. package/src/ecc_lib.ts +94 -94
  27. package/src/hooks/AdvancedSignatureManager.ts +104 -104
  28. package/src/hooks/SignatureManager.ts +84 -84
  29. package/src/index.ts +83 -105
  30. package/src/merkle.ts +31 -31
  31. package/src/opcodes.ts +280 -280
  32. package/src/payments/bip341.ts +140 -140
  33. package/src/payments/embed.ts +61 -61
  34. package/src/payments/index.ts +172 -172
  35. package/src/payments/lazy.ts +28 -28
  36. package/src/payments/p2ms.ts +156 -156
  37. package/src/payments/p2op.ts +195 -195
  38. package/src/payments/p2pk.ts +93 -93
  39. package/src/payments/p2pkh.ts +214 -214
  40. package/src/payments/p2tr.ts +309 -309
  41. package/src/psbt/bip371.ts +441 -441
  42. package/src/push_data.ts +97 -97
  43. package/src/script.ts +247 -247
  44. package/src/script_number.ts +72 -72
  45. package/src/script_signature.ts +91 -91
  46. package/src/transaction.ts +656 -656
  47. package/test/address.spec.ts +155 -155
  48. package/test/bitcoin.core.spec.ts +212 -212
  49. package/test/block.spec.ts +171 -171
  50. package/test/bufferutils.spec.ts +450 -450
  51. package/test/crypto.spec.ts +49 -49
  52. package/test/fixtures/address.json +329 -329
  53. package/test/fixtures/block.json +148 -148
  54. package/test/fixtures/bufferutils.json +102 -102
  55. package/test/fixtures/core/README.md +26 -26
  56. package/test/fixtures/core/base58_encode_decode.json +50 -50
  57. package/test/fixtures/core/base58_keys_invalid.json +152 -152
  58. package/test/fixtures/core/base58_keys_valid.json +452 -452
  59. package/test/fixtures/core/blocks.json +27 -27
  60. package/test/fixtures/core/sig_canonical.json +7 -7
  61. package/test/fixtures/core/sig_noncanonical.json +33 -33
  62. package/test/fixtures/core/sighash.json +3505 -3505
  63. package/test/fixtures/core/tx_valid.json +2023 -2023
  64. package/test/fixtures/crypto.json +43 -43
  65. package/test/fixtures/ecdsa.json +217 -217
  66. package/test/fixtures/ecpair.json +141 -141
  67. package/test/fixtures/embed.json +108 -108
  68. package/test/fixtures/p2ms.json +434 -434
  69. package/test/fixtures/p2pk.json +179 -179
  70. package/test/fixtures/p2pkh.json +276 -276
  71. package/test/fixtures/p2sh.json +508 -508
  72. package/test/fixtures/p2tr.json +1198 -1198
  73. package/test/fixtures/p2wpkh.json +290 -290
  74. package/test/fixtures/p2wsh.json +489 -489
  75. package/test/fixtures/psbt.json +924 -924
  76. package/test/fixtures/script.json +465 -465
  77. package/test/fixtures/script_number.json +225 -225
  78. package/test/fixtures/signature.json +140 -140
  79. package/test/fixtures/transaction.json +916 -916
  80. package/test/integration/_regtest.ts +6 -6
  81. package/test/integration/addresses.spec.ts +142 -142
  82. package/test/integration/bip32.spec.ts +130 -130
  83. package/test/integration/blocks.spec.ts +28 -28
  84. package/test/integration/cltv.spec.ts +241 -241
  85. package/test/integration/csv.spec.ts +452 -452
  86. package/test/integration/payments.spec.ts +110 -110
  87. package/test/integration/taproot.spec.ts +663 -663
  88. package/test/integration/transactions.spec.ts +668 -668
  89. package/test/payments.spec.ts +114 -114
  90. package/test/payments.utils.ts +165 -165
  91. package/test/psbt.spec.ts +1285 -1285
  92. package/test/script.spec.ts +186 -186
  93. package/test/script_number.spec.ts +26 -26
  94. package/test/script_signature.spec.ts +66 -66
  95. package/test/transaction.spec.ts +337 -337
  96. package/test/ts-node-register.js +7 -7
  97. package/test/tsconfig.json +48 -48
  98. package/test/types.spec.ts +53 -53
  99. package/tsconfig.base.json +27 -27
  100. package/tsconfig.json +19 -19
  101. package/tsconfig.webpack.json +18 -18
  102. package/vite.config.browser.ts +93 -0
  103. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  104. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +0 -3
  105. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +0 -962
  106. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +0 -34
  107. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +0 -24
  108. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +0 -273
  109. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +0 -2
  110. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +0 -204
  111. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +0 -138
  112. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  113. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +0 -28
  114. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  115. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  116. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +0 -116
  117. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +0 -46
  118. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +0 -1080
  119. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +0 -430
  120. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +0 -27
  121. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +0 -450
  122. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +0 -965
  123. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +0 -8
  124. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +0 -5
  125. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  126. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  127. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  128. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1272
  129. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1547
  130. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  131. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -153
  132. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -271
  133. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -574
  134. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -692
  135. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -711
  136. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -171
  137. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -169
  138. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  139. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  140. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  141. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -804
  142. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1173
  143. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1318
  144. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -127
  145. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -103
  146. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  147. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -89
  148. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -57
  149. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2745
  150. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3976
  151. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  152. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2964
  153. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -67
  154. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1391
  155. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -25
  156. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3115
  157. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -98
  158. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -771
  159. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1260
  160. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  161. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  162. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -373
  163. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1938
  164. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -53
  165. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -302
  166. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3198
  167. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -65
  168. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  169. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  170. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  171. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  172. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -108
  173. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  174. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  175. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  176. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  177. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  178. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -252
  179. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -825
  180. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  181. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  182. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  183. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -553
  184. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  185. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  186. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +0 -120
  187. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  188. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +0 -261
  189. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  190. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +0 -227
  191. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +0 -15
  192. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +0 -328
  193. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +0 -150
  194. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +0 -39
  195. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  196. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +0 -310
  197. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +0 -590
  198. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +0 -415
  199. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +0 -26
  200. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +0 -168
  201. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +0 -188
  202. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +0 -146
  203. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +0 -12
  204. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +0 -43
  205. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +0 -81
  206. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  207. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +0 -51
  208. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +0 -40
  209. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -39
  210. package/browser/index.js.LICENSE.txt +0 -14
  211. package/browser/ops.d.ts +0 -126
  212. package/build/ops.d.ts +0 -126
  213. package/build/ops.js +0 -127
  214. package/coverage/tmp/coverage-31752-1735543485354-0.json +0 -1
  215. package/coverage/tmp/coverage-59920-1735543484555-0.json +0 -1
  216. package/coverage/tmp/coverage-66252-1735543483919-0.json +0 -1
  217. package/coverage/tmp/coverage-68440-1735543485236-0.json +0 -1
  218. package/coverage/tmp/coverage-70588-1735543484426-0.json +0 -1
  219. package/coverage/tmp/coverage-79292-1735543485296-0.json +0 -1
  220. package/coverage/tmp/coverage-80212-1735543483980-0.json +0 -1
@@ -1,450 +0,0 @@
1
- # Testing
2
-
3
- NOTE: this document is outdated and needs to be updated. Read with your own discretion.
4
-
5
- ## Introduction
6
-
7
- This document describes the GYP testing infrastructure,
8
- as provided by the `TestGyp.py` module.
9
-
10
- These tests emphasize testing the _behavior_ of the
11
- various GYP-generated build configurations:
12
- Visual Studio, Xcode, SCons, Make, etc.
13
- The goal is _not_ to test the output of the GYP generators by,
14
- for example, comparing a GYP-generated Makefile
15
- against a set of known "golden" Makefiles
16
- (although the testing infrastructure could
17
- be used to write those kinds of tests).
18
- The idea is that the generated build configuration files
19
- could be completely written to add a feature or fix a bug
20
- so long as they continue to support the functional behaviors
21
- defined by the tests: building programs, shared libraries, etc.
22
-
23
- ## "Hello, world!" GYP test configuration
24
-
25
- Here is an actual test configuration,
26
- a simple build of a C program to print `"Hello, world!"`.
27
-
28
- ```
29
- $ ls -l test/hello
30
- total 20
31
- -rw-r--r-- 1 knight knight 312 Jul 30 20:22 gyptest-all.py
32
- -rw-r--r-- 1 knight knight 307 Jul 30 20:22 gyptest-default.py
33
- -rwxr-xr-x 1 knight knight 326 Jul 30 20:22 gyptest-target.py
34
- -rw-r--r-- 1 knight knight 98 Jul 30 20:22 hello.c
35
- -rw-r--r-- 1 knight knight 142 Jul 30 20:22 hello.gyp
36
- $
37
- ```
38
-
39
- The `gyptest-*.py` files are three separate tests (test scripts)
40
- that use this configuration. The first one, `gyptest-all.py`,
41
- looks like this:
42
-
43
- ```
44
- #!/usr/bin/env python
45
-
46
- """
47
- Verifies simplest-possible build of a "Hello, world!" program
48
- using an explicit build target of 'all'.
49
- """
50
-
51
- import TestGyp
52
-
53
- test = TestGyp.TestGyp()
54
-
55
- test.run_gyp('hello.gyp')
56
-
57
- test.build_all('hello.gyp')
58
-
59
- test.run_built_executable('hello', stdout="Hello, world!\n")
60
-
61
- test.pass_test()
62
- ```
63
-
64
- The test script above runs GYP against the specified input file
65
- (`hello.gyp`) to generate a build configuration.
66
- It then tries to build the `'all'` target
67
- (or its equivalent) using the generated build configuration.
68
- Last, it verifies that the build worked as expected
69
- by running the executable program (`hello`)
70
- that was just presumably built by the generated configuration,
71
- and verifies that the output from the program
72
- matches the expected `stdout` string (`"Hello, world!\n"`).
73
-
74
- Which configuration is generated
75
- (i.e., which build tool to test)
76
- is specified when the test is run;
77
- see the next section.
78
-
79
- Surrounding the functional parts of the test
80
- described above are the header,
81
- which should be basically the same for each test
82
- (modulo a different description in the docstring):
83
-
84
- ```
85
- #!/usr/bin/env python
86
-
87
- """
88
- Verifies simplest-possible build of a "Hello, world!" program
89
- using an explicit build target of 'all'.
90
- """
91
-
92
- import TestGyp
93
-
94
- test = TestGyp.TestGyp()
95
- ```
96
-
97
- Similarly, the footer should be the same in every test:
98
-
99
- ```
100
- test.pass_test()
101
- ```
102
-
103
- ## Running tests
104
-
105
- Test scripts are run by the `gyptest.py` script.
106
- You can specify (an) explicit test script(s) to run:
107
-
108
- ```
109
- $ python gyptest.py test/hello/gyptest-all.py
110
- PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
111
- TESTGYP_FORMAT=scons
112
- /usr/bin/python test/hello/gyptest-all.py
113
- PASSED
114
- $
115
- ```
116
-
117
- If you specify a directory, all test scripts
118
- (scripts prefixed with `gyptest-`) underneath
119
- the directory will be run:
120
-
121
- ```
122
- $ python gyptest.py test/hello
123
- PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
124
- TESTGYP_FORMAT=scons
125
- /usr/bin/python test/hello/gyptest-all.py
126
- PASSED
127
- /usr/bin/python test/hello/gyptest-default.py
128
- PASSED
129
- /usr/bin/python test/hello/gyptest-target.py
130
- PASSED
131
- $
132
- ```
133
-
134
- Or you can specify the `-a` option to run all scripts
135
- in the tree:
136
-
137
- ```
138
- $ python gyptest.py -a
139
- PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
140
- TESTGYP_FORMAT=scons
141
- /usr/bin/python test/configurations/gyptest-configurations.py
142
- PASSED
143
- /usr/bin/python test/defines/gyptest-defines.py
144
- PASSED
145
- .
146
- .
147
- .
148
- .
149
- /usr/bin/python test/variables/gyptest-commands.py
150
- PASSED
151
- $
152
- ```
153
-
154
- If any tests fail during the run,
155
- the `gyptest.py` script will report them in a
156
- summary at the end.
157
-
158
- ## Debugging tests
159
-
160
- Tests that create intermediate output do so under the gyp/out/testworkarea
161
- directory. On test completion, intermediate output is cleaned up. To preserve
162
- this output, set the environment variable PRESERVE=1. This can be handy to
163
- inspect intermediate data when debugging a test.
164
-
165
- You can also set PRESERVE\_PASS=1, PRESERVE\_FAIL=1 or PRESERVE\_NO\_RESULT=1
166
- to preserve output for tests that fall into one of those categories.
167
-
168
- # Specifying the format (build tool) to use
169
-
170
- By default, the `gyptest.py` script will generate configurations for
171
- the "primary" supported build tool for the platform you're on:
172
- Visual Studio on Windows,
173
- Xcode on Mac,
174
- and (currently) SCons on Linux.
175
- An alternate format (build tool) may be specified
176
- using the `-f` option:
177
-
178
- ```
179
- $ python gyptest.py -f make test/hello/gyptest-all.py
180
- PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
181
- TESTGYP_FORMAT=make
182
- /usr/bin/python test/hello/gyptest-all.py
183
- PASSED
184
- $
185
- ```
186
-
187
- Multiple tools may be specified in a single pass as
188
- a comma-separated list:
189
-
190
- ```
191
- $ python gyptest.py -f make,scons test/hello/gyptest-all.py
192
- PYTHONPATH=/home/knight/src/gyp/trunk/test/lib
193
- TESTGYP_FORMAT=make
194
- /usr/bin/python test/hello/gyptest-all.py
195
- PASSED
196
- TESTGYP_FORMAT=scons
197
- /usr/bin/python test/hello/gyptest-all.py
198
- PASSED
199
- $
200
- ```
201
-
202
- ## Test script functions and methods
203
-
204
- The `TestGyp` class contains a lot of functionality
205
- intended to make it easy to write tests.
206
- This section describes the most useful pieces for GYP testing.
207
-
208
- (The `TestGyp` class is actually a subclass of more generic
209
- `TestCommon` and `TestCmd` base classes
210
- that contain even more functionality than is
211
- described here.)
212
-
213
- ### Initialization
214
-
215
- The standard initialization formula is:
216
-
217
- ```
218
- import TestGyp
219
- test = TestGyp.TestGyp()
220
- ```
221
-
222
- This copies the contents of the directory tree in which
223
- the test script lives to a temporary directory for execution,
224
- and arranges for the temporary directory's removal on exit.
225
-
226
- By default, any comparisons of output or file contents
227
- must be exact matches for the test to pass.
228
- If you need to use regular expressions for matches,
229
- a useful alternative initialization is:
230
-
231
- ```
232
- import TestGyp
233
- test = TestGyp.TestGyp(match = TestGyp.match_re,
234
- diff = TestGyp.diff_re)`
235
- ```
236
-
237
- ### Running GYP
238
-
239
- The canonical invocation is to simply specify the `.gyp` file to be executed:
240
-
241
- ```
242
- test.run_gyp('file.gyp')
243
- ```
244
-
245
- Additional GYP arguments may be specified:
246
-
247
- ```
248
- test.run_gyp('file.gyp', arguments=['arg1', 'arg2', ...])
249
- ```
250
-
251
- To execute GYP from a subdirectory (where, presumably, the specified file
252
- lives):
253
-
254
- ```
255
- test.run_gyp('file.gyp', chdir='subdir')
256
- ```
257
-
258
- ### Running the build tool
259
-
260
- Running the build tool requires passing in a `.gyp` file, which may be used to
261
- calculate the name of a specific build configuration file (such as a MSVS
262
- solution file corresponding to the `.gyp` file).
263
-
264
- There are several different `.build_*()` methods for invoking different types
265
- of builds.
266
-
267
- To invoke a build tool with an explicit `all` target (or equivalent):
268
-
269
- ```
270
- test.build_all('file.gyp')
271
- ```
272
-
273
- To invoke a build tool with its default behavior (for example, executing `make`
274
- with no targets specified):
275
-
276
- ```
277
- test.build_default('file.gyp')
278
- ```
279
-
280
- To invoke a build tool with an explicit specified target:
281
-
282
- ```
283
- test.build_target('file.gyp', 'target')
284
- ```
285
-
286
- ### Running executables
287
-
288
- The most useful method executes a program built by the GYP-generated
289
- configuration:
290
-
291
- ```
292
- test.run_built_executable('program')
293
- ```
294
-
295
- The `.run_built_executable()` method will account for the actual built target
296
- output location for the build tool being tested, as well as tack on any
297
- necessary executable file suffix for the platform (for example `.exe` on
298
- Windows).
299
-
300
- `stdout=` and `stderr=` keyword arguments specify expected standard output and
301
- error output, respectively. Failure to match these (if specified) will cause
302
- the test to fail. An explicit `None` value will suppress that verification:
303
-
304
- ```
305
- test.run_built_executable('program',
306
- stdout="expect this output\n",
307
- stderr=None)
308
- ```
309
-
310
- Note that the default values are `stdout=None` and `stderr=''` (that is, no
311
- check for standard output, and error output must be empty).
312
-
313
- Arbitrary executables (not necessarily those built by GYP) can be executed with
314
- the lower-level `.run()` method:
315
-
316
- ```
317
- test.run('program')
318
- ```
319
-
320
- The program must be in the local directory (that is, the temporary directory
321
- for test execution) or be an absolute path name.
322
-
323
- ### Fetching command output
324
-
325
- ```
326
- test.stdout()
327
- ```
328
-
329
- Returns the standard output from the most recent executed command (including
330
- `.run_gyp()`, `.build_*()`, or `.run*()` methods).
331
-
332
- ```
333
- test.stderr()
334
- ```
335
-
336
- Returns the error output from the most recent executed command (including
337
- `.run_gyp()`, `.build_*()`, or `.run*()` methods).
338
-
339
- ### Verifying existence or non-existence of files or directories
340
-
341
- ```
342
- test.must_exist('file_or_dir')
343
- ```
344
-
345
- Verifies that the specified file or directory exists, and fails the test if it
346
- doesn't.
347
-
348
- ```
349
- test.must_not_exist('file_or_dir')
350
- ```
351
-
352
- Verifies that the specified file or directory does not exist, and fails the
353
- test if it does.
354
-
355
- ### Verifying file contents
356
-
357
- ```
358
- test.must_match('file', 'expected content\n')
359
- ```
360
-
361
- Verifies that the content of the specified file match the expected string, and
362
- fails the test if it does not. By default, the match must be exact, but
363
- line-by-line regular expressions may be used if the `TestGyp` object was
364
- initialized with `TestGyp.match_re`.
365
-
366
- ```
367
- test.must_not_match('file', 'expected content\n')
368
- ```
369
-
370
- Verifies that the content of the specified file does _not_ match the expected
371
- string, and fails the test if it does. By default, the match must be exact,
372
- but line-by-line regular expressions may be used if the `TestGyp` object was
373
- initialized with `TestGyp.match_re`.
374
-
375
- ```
376
- test.must_contain('file', 'substring')
377
- ```
378
-
379
- Verifies that the specified file contains the specified substring, and fails
380
- the test if it does not.
381
-
382
- ```
383
- test.must_not_contain('file', 'substring')
384
- ```
385
-
386
- Verifies that the specified file does not contain the specified substring, and
387
- fails the test if it does.
388
-
389
- ```
390
- test.must_contain_all_lines(output, lines)
391
- ```
392
-
393
- Verifies that the output string contains all of the "lines" in the specified
394
- list of lines. In practice, the lines can be any substring and need not be
395
- `\n`-terminaed lines per se. If any line is missing, the test fails.
396
-
397
- ```
398
- test.must_not_contain_any_lines(output, lines)
399
- ```
400
-
401
- Verifies that the output string does _not_ contain any of the "lines" in the
402
- specified list of lines. In practice, the lines can be any substring and need
403
- not be `\n`-terminaed lines per se. If any line exists in the output string,
404
- the test fails.
405
-
406
- ```
407
- test.must_contain_any_line(output, lines)
408
- ```
409
-
410
- Verifies that the output string contains at least one of the "lines" in the
411
- specified list of lines. In practice, the lines can be any substring and need
412
- not be `\n`-terminaed lines per se. If none of the specified lines is present,
413
- the test fails.
414
-
415
- ### Reading file contents
416
-
417
- ```
418
- test.read('file')
419
- ```
420
-
421
- Returns the contents of the specified file. Directory elements contained in a
422
- list will be joined:
423
-
424
- ```
425
- test.read(['subdir', 'file'])
426
- ```
427
-
428
- ### Test success or failure
429
-
430
- ```
431
- test.fail_test()
432
- ```
433
-
434
- Fails the test, reporting `FAILED` on standard output and exiting with an exit
435
- status of `1`.
436
-
437
- ```
438
- test.pass_test()
439
- ```
440
-
441
- Passes the test, reporting `PASSED` on standard output and exiting with an exit
442
- status of `0`.
443
-
444
- ```
445
- test.no_result()
446
- ```
447
-
448
- Indicates the test had no valid result (i.e., the conditions could not be
449
- tested because of an external factor like a full file system). Reports `NO
450
- RESULT` on standard output and exits with a status of `2`.