about summary refs log tree commit diff
path: root/users/sterni/nix/html/tests/default.nix
blob: ed520675c55aa820a0edf2e3240da5ff5435ffa8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{ depot, pkgs, ... }:

let
  inherit (depot.users.sterni.nix.html)
    __findFile
    esc
    withDoctype
    ;

  exampleDocument = withDoctype (<html> { lang = "en"; } [
    (<head> { } [
      (<meta> { charset = "utf-8"; } null)
      (<title> { } "html.nix example document")
      (<link>
        {
          rel = "license";
          href = "https://code.tvl.fyi/about/LICENSE";
          type = "text/html";
        }
        null)
      (<style> { } (esc ''
        hgroup h2 {
          font-weight: normal;
        }

        dd {
          margin: 0;
        }
      ''))
    ])
    (<body> { } [
      (<main> { } [
        (<hgroup> { } [
          (<h1> { } (esc "html.nix"))
          (<h2> { } [
            (<em> { } "the")
            (esc " most cursed HTML DSL ever!")
          ])
        ])
        (<dl> { } [
          (<dt> { } [
            (esc "Q: Wait, it's all ")
            (<a>
              {
                href = "https://cl.tvl.fyi/q/hashtag:cursed";
              }
              (esc "cursed"))
            (esc " nix hacks?")
          ])
          (<dd> { } (esc "A: Always has been. 🔫"))
          (<dt> { } (esc "Q: Why does this work?"))
          (<dd> { } [
            (esc "Because nix ")
            (<a>
              {
                href = "https://github.com/NixOS/nix/blob/293220bed5a75efc963e33c183787e87e55e28d9/src/libexpr/parser.y#L410-L416";
              }
              (esc "translates "))
            (<a>
              {
                href = "https://github.com/NixOS/nix/blob/293220bed5a75efc963e33c183787e87e55e28d9/src/libexpr/lexer.l#L100";
              }
              (esc "SPATH tokens"))
            (esc " like ")
            (<code> { } (esc "<nixpkgs>"))
            (esc " into calls to ")
            (<code> { } (esc "__findFile"))
            (esc " in the ")
            (<em> { } (esc "current"))
            (esc " scope.")
          ])
        ])
      ])
    ])
  ]);
in

pkgs.runCommand "html.nix.html"
{
  passAsFile = [ "exampleDocument" ];
  inherit exampleDocument;
  nativeBuildInputs = [ pkgs.html5validator ];
} ''
  set -x
  test "${esc "<> && \" \'"}" = "&lt;&gt; &amp;&amp; &quot; &#039;"

  # slow as hell unfortunately
  html5validator "$exampleDocumentPath"

  mv "$exampleDocumentPath" "$out"

  set +x
''