let
  md = import ../nixite/md.nix;
  elems = import ../nixite/elems.nix;
  it = import ./it.nix;
in with md; [
  (assert heading "# heading 1" == [ "#" "heading 1" ]; "echo gets heading 1")
  (assert heading "## subheading" == [ "##" "subheading" ];
    "echo gets heading 2")
  (assert heading "some paragraph" == null; "echo paragraph is heading 0")

  #(assert mdBlock "# heading 1" == elems.h 1 "heading 1"; "echo makes h1 tag")
  #(assert mdBlock "## subheading" == elems.h 2 "subheading"; "echo makes h2 tag")
  #(assert mdBlock "some paragraph" == elems.p {} "some paragraph"; "echo makes p tag")

  (it "processes md block" {
    actual = readMd ''
      # foo bar

      lorem ipsum
    '';
    expected = [
      (elems.H 1 "foo bar")
      ""
      (elems.p { } ''
        lorem ipsum
      '')
    ];
    asString = true;
  })

  (it "can fix file appendixes" {
    actual = fixAppendix "index.md";
    expected = "index.html";
  })

  (it "recursively reads dir" {
    actual = recReadMd ./blog;
    expected = {
      "index.md" = mdToPage ./blog/index.md;
      "dir" = { "index.md" = mdToPage ./blog/dir/index.md; };
    };
    asJSON = true;
  })

  (it "recursively fixes filename" {
    actual = recFixAppendix {
      "index.md" = "something";
      dir = { "index.md" = "something else"; };
    };
    expected = {
      "index.html" = "something";
      dir = { "index.html" = "something else"; };
    };
  })

  (it "recursively translates md to html" {
    actual = builtins.toJSON (readDir ./blog);
    expected = builtins.toJSON {
      "index.html" = mdToPage ./blog/index.md;
      "dir" = { "index.html" = mdToPage ./blog/dir/index.md; };
    };
  })
]