truffleを読む
test実行開始までの流れ
前提
JSのtestの処理だけ見てます。
流れ
configからmochaの設定をロードしてmochaのインスタンスを作成
test/以下の*.sol以外のファイルを取得。これらはjsのテストファイルとしてマーク
test/以下の*.solのpathを取得。これはらsolidityのテストファイルとしてマーク
test/*.solをコンパイル対象に含める。
TestResolverをtest/*.solの一覧と、build/のパスを渡して作成。
solidityファイルをコンパイル。この時 test/*.solはキャッシュに残っていても必ずcompileされる。(多分ここのcacheを消す処理はconsole起動時にcompile叩いた時用かな)
TestResolverはtestの最初の方に書くartifact.requireのartifactのこと。
setJSTestGlobals: line 208でtestで使えるグローバル変数(web3, assert, artifactsとか)を設定
mochaを起動
Sub Packages
truffle-workflow-compile
truffle compile した時の処理の流れを定義したlibっぽい。
最終的なcompileはtruffle-compileで行われるけど、それを呼び出す前にconfigの設定とチェックを行う。
compile後のjsonデータをbuild/contracts/以下に書き込んでいるのもこのlib
option.artifactorとoption.resolverは引数に渡すoptionで指定することができる。defaultではsub packagesのtruffle-artifactorとtruffle-resolverが使われる。
truffle-artifactor
コンパイル後の結果(abiとかsourceMapとかbytecodesなど)を保存する処理を行うもの。
保存対象のdirectoryをconstractorの引数にとる。
ちなみに、truffle testでロードされているartifactsはこいつじゃなくて、truffle-resolverの方なので間違えないように。(この辺の名前付けちょっとややこしいな。。。歴史的な何かがありそうw)
truffle-resolver
build/contracts/以下から指定されたcontractのcompile後のデータを読み出して、TruffleContractのインスタンスにして返すlib
testの中で書いているartifactsはこいつ
requireでロードするcontractを指定する。
truffle-resolver/npm.jsはnode_modules以下のファイルをロードするためのresolver。こいつのおかげでnpm i openzeppelin-solidityしたzeppelinのlibがロードできる。
fs.jsはプロジェクト以下のbuild/contracts/を対象にロードするためのresolver.
epm.jsはよくわからない。。。package.jsonとかを見て何かやってた。