OCaml の Test::Simple を目コピしてみた その 4

OCamlソースコードに沿って TAPDocument.ml を test-document.fs にして、TAPBuilder.ml を test-builder.fs に書いてみた。

なんかクラスっぽいやつでやってみたんだけど、これでいいのかな…………(汗

module Test.Builder

type Plan(?count : int) =
  let current_plan : option<int> = count

type TestCaseBuilder () =
  let mutable running_tests : (int -> Test.Document.node) list = [];

  member this.BuildTestCase(todo : option<string>, diag : option<Test.Document.diagnostic>, test : bool, description : string) =
    let running_test = fun number ->
      match todo with
        | None          -> Test.Document.TestCaseNode((if test then Test.Document.Ok else Test.Document.NotOk),
                                                      number,
                                                      description,
                                                      diag)
        | Some x        -> Test.Document.TodoTestCaseNode((if test then Test.Document.Ok else Test.Document.NotOk),
                                                          number,
                                                          description,
                                                          Test.Document.Todo(x),
                                                          diag)
    running_tests <- running_test :: running_tests
    running_test

  member this.BuildDiagnostic(line : string) =
    let running_test = fun (_ : int) ->
                       Test.Document.DiagnosticNode (Test.Document.Diag( [ line ] ))
    running_tests <- running_test :: running_tests
    running_test

今ブログ記事を書いてる時に気がついたけど、これじゃダメだよねwwwwww

だって、Plan とか let plan = Plan(12) とかってしないとわかんないじゃんwwwwww ほげーーーーーーー!!!

あと、F# では、関数に省略した引数を使えないので、typeコンストラクタ?の引数に使わなければならない………

(。・_・。) ………

TestCaseBuilderTestCaseResult とかにして、そのリストをどこかに持ったほうが良いのかも?
こんな感じ:

type TestCase(?todo, ?diag, test, description) =
  let running_test = fun number ->
      match todo with
        | None          -> Test.Document.TestCaseNode((if test then Test.Document.Ok else Test.Document.NotOk),
                                                      number,
                                                      description,
                                                      diag)
        | Some x        -> Test.Document.TodoTestCaseNode((if test then Test.Document.Ok else Test.Document.NotOk),
                                                          number,
                                                          description,
                                                          Test.Document.Todo(x),
                                                          diag)