@btc-vision/bitcoin 6.4.9 → 6.4.11

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 (230) hide show
  1. package/.babelrc +4 -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/index.d.ts +1 -1
  9. package/browser/index.js +1 -1
  10. package/browser/{ops.d.ts → opcodes.d.ts} +2 -3
  11. package/browser/script.d.ts +2 -2
  12. package/build/address.js +2 -1
  13. package/build/index.d.ts +1 -1
  14. package/build/index.js +1 -1
  15. package/build/{ops.d.ts → opcodes.d.ts} +2 -3
  16. package/build/{ops.js → opcodes.js} +4 -5
  17. package/build/payments/embed.js +1 -1
  18. package/build/payments/p2ms.js +1 -1
  19. package/build/payments/p2op.js +1 -1
  20. package/build/payments/p2pk.js +1 -1
  21. package/build/payments/p2pkh.js +1 -1
  22. package/build/payments/p2sh.js +3 -3
  23. package/build/payments/p2tr.js +1 -1
  24. package/build/payments/p2wpkh.js +2 -2
  25. package/build/payments/p2wsh.js +2 -2
  26. package/build/push_data.js +9 -9
  27. package/build/script.d.ts +2 -2
  28. package/build/script.js +12 -12
  29. package/build/transaction.js +1 -1
  30. package/cjs/package.json +3 -3
  31. package/gulpfile.js +42 -42
  32. package/package.json +150 -150
  33. package/src/address.ts +304 -303
  34. package/src/bip66.ts +107 -107
  35. package/src/block.ts +233 -233
  36. package/src/bufferutils.ts +188 -188
  37. package/src/crypto.ts +108 -108
  38. package/src/ecc_lib.ts +94 -94
  39. package/src/hooks/AdvancedSignatureManager.ts +104 -104
  40. package/src/hooks/SignatureManager.ts +84 -84
  41. package/src/index.ts +105 -105
  42. package/src/merkle.ts +31 -31
  43. package/src/{ops.ts → opcodes.ts} +280 -282
  44. package/src/payments/bip341.ts +140 -140
  45. package/src/payments/embed.ts +61 -61
  46. package/src/payments/index.ts +172 -172
  47. package/src/payments/lazy.ts +28 -28
  48. package/src/payments/p2ms.ts +156 -156
  49. package/src/payments/p2op.ts +195 -195
  50. package/src/payments/p2pk.ts +93 -93
  51. package/src/payments/p2pkh.ts +214 -214
  52. package/src/payments/p2sh.ts +210 -210
  53. package/src/payments/p2tr.ts +309 -309
  54. package/src/payments/p2wpkh.ts +144 -144
  55. package/src/payments/p2wsh.ts +217 -217
  56. package/src/psbt/bip371.ts +441 -441
  57. package/src/push_data.ts +97 -97
  58. package/src/script.ts +247 -247
  59. package/src/script_number.ts +72 -72
  60. package/src/script_signature.ts +91 -91
  61. package/src/transaction.ts +656 -656
  62. package/test/address.spec.ts +155 -155
  63. package/test/bitcoin.core.spec.ts +212 -212
  64. package/test/block.spec.ts +171 -171
  65. package/test/bufferutils.spec.ts +450 -450
  66. package/test/crypto.spec.ts +49 -49
  67. package/test/fixtures/address.json +329 -329
  68. package/test/fixtures/block.json +148 -148
  69. package/test/fixtures/bufferutils.json +102 -102
  70. package/test/fixtures/core/README.md +26 -26
  71. package/test/fixtures/core/base58_encode_decode.json +50 -50
  72. package/test/fixtures/core/base58_keys_invalid.json +152 -152
  73. package/test/fixtures/core/base58_keys_valid.json +452 -452
  74. package/test/fixtures/core/blocks.json +27 -27
  75. package/test/fixtures/core/sig_canonical.json +7 -7
  76. package/test/fixtures/core/sig_noncanonical.json +33 -33
  77. package/test/fixtures/core/sighash.json +3505 -3505
  78. package/test/fixtures/core/tx_valid.json +2023 -2023
  79. package/test/fixtures/crypto.json +43 -43
  80. package/test/fixtures/ecdsa.json +217 -217
  81. package/test/fixtures/ecpair.json +141 -141
  82. package/test/fixtures/embed.json +108 -108
  83. package/test/fixtures/p2ms.json +434 -434
  84. package/test/fixtures/p2pk.json +179 -179
  85. package/test/fixtures/p2pkh.json +276 -276
  86. package/test/fixtures/p2sh.json +508 -508
  87. package/test/fixtures/p2tr.json +1198 -1198
  88. package/test/fixtures/p2wpkh.json +290 -290
  89. package/test/fixtures/p2wsh.json +489 -489
  90. package/test/fixtures/psbt.json +924 -924
  91. package/test/fixtures/script.json +465 -465
  92. package/test/fixtures/script_number.json +225 -225
  93. package/test/fixtures/signature.json +140 -140
  94. package/test/fixtures/transaction.json +916 -916
  95. package/test/integration/_regtest.ts +6 -6
  96. package/test/integration/addresses.spec.ts +142 -142
  97. package/test/integration/bip32.spec.ts +130 -130
  98. package/test/integration/blocks.spec.ts +28 -28
  99. package/test/integration/cltv.spec.ts +241 -241
  100. package/test/integration/csv.spec.ts +452 -452
  101. package/test/integration/payments.spec.ts +110 -110
  102. package/test/integration/taproot.spec.ts +663 -663
  103. package/test/integration/transactions.spec.ts +668 -668
  104. package/test/payments.spec.ts +114 -114
  105. package/test/payments.utils.ts +165 -165
  106. package/test/psbt.spec.ts +1285 -1285
  107. package/test/script.spec.ts +186 -186
  108. package/test/script_number.spec.ts +26 -26
  109. package/test/script_signature.spec.ts +66 -66
  110. package/test/transaction.spec.ts +337 -337
  111. package/test/ts-node-register.js +7 -7
  112. package/test/tsconfig.json +48 -48
  113. package/test/types.spec.ts +53 -53
  114. package/tsconfig.base.json +27 -27
  115. package/tsconfig.json +19 -19
  116. package/tsconfig.webpack.json +18 -18
  117. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  118. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +0 -3
  119. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +0 -962
  120. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +0 -34
  121. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +0 -24
  122. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +0 -273
  123. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +0 -2
  124. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +0 -204
  125. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +0 -138
  126. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  127. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +0 -28
  128. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  129. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  130. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +0 -116
  131. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +0 -46
  132. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +0 -1080
  133. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +0 -430
  134. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +0 -27
  135. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +0 -450
  136. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +0 -965
  137. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +0 -8
  138. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +0 -5
  139. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  140. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  141. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  142. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1272
  143. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1547
  144. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  145. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -153
  146. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -271
  147. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -574
  148. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -692
  149. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -711
  150. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -171
  151. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -169
  152. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  153. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  154. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  155. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -804
  156. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1173
  157. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1318
  158. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -127
  159. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -103
  160. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  161. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -89
  162. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -57
  163. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2745
  164. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3976
  165. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  166. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2964
  167. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -67
  168. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1391
  169. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -25
  170. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3115
  171. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -98
  172. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -771
  173. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1260
  174. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  175. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  176. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -373
  177. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1938
  178. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -53
  179. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -302
  180. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3198
  181. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -65
  182. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  183. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  184. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  185. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  186. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -108
  187. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  188. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  189. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  190. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  191. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  192. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -252
  193. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -825
  194. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  195. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  196. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  197. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -553
  198. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  199. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  200. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +0 -120
  201. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  202. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +0 -261
  203. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  204. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +0 -227
  205. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +0 -15
  206. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +0 -328
  207. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +0 -150
  208. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +0 -39
  209. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  210. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +0 -310
  211. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +0 -590
  212. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +0 -415
  213. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +0 -26
  214. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +0 -168
  215. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +0 -188
  216. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +0 -146
  217. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +0 -12
  218. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +0 -43
  219. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +0 -81
  220. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  221. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +0 -51
  222. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +0 -40
  223. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -39
  224. package/coverage/tmp/coverage-31752-1735543485354-0.json +0 -1
  225. package/coverage/tmp/coverage-59920-1735543484555-0.json +0 -1
  226. package/coverage/tmp/coverage-66252-1735543483919-0.json +0 -1
  227. package/coverage/tmp/coverage-68440-1735543485236-0.json +0 -1
  228. package/coverage/tmp/coverage-70588-1735543484426-0.json +0 -1
  229. package/coverage/tmp/coverage-79292-1735543485296-0.json +0 -1
  230. 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`.