summaryrefslogtreecommitdiff
path: root/subplot/jt.py
blob: 380cde426afad4aceeafac0df799ee05c8f3e9b2 (plain)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import logging
import os


def create_script(ctx, filename=None):
    get_file = globals()["get_file"]
    text = get_file(filename)
    open(filename, "wb").write(text)
    os.chmod(filename, 0o755)


def run_jt_init(ctx, dirname=None, journalname=None, title=None):
    runcmd_run = globals()["runcmd_run"]
    runcmd_run(ctx, [_binary("jt"), "init", dirname, journalname, title])


def run_jt_list_journals(ctx):
    runcmd_run = globals()["runcmd_run"]
    runcmd_run(ctx, [_binary("jt"), "list-journals"])


def run_jt_is_journal(ctx, dirname=None):
    runcmd_run = globals()["runcmd_run"]
    runcmd_run(ctx, [_binary("jt"), "is-journal", dirname])


def run_jt_new(ctx, title=None, dirname=None):
    runcmd_run = globals()["runcmd_run"]
    runcmd_run(
        ctx, [_binary("jt"), "new", title, "--dirname", dirname, "--editor=none"]
    )


def run_jt_edit(ctx, editor=None, dirname=None):
    runcmd_run = globals()["runcmd_run"]
    env = dict(os.environ)
    env["JT_LOG"] = "jt"
    runcmd_run(
        ctx, [_binary("jt"), "edit", "--dirname", dirname, "--editor", editor], env=env
    )


def run_jt_finish(ctx, dirname=None):
    runcmd_run = globals()["runcmd_run"]
    runcmd_run(ctx, [_binary("jt"), "finish", "--dirname", dirname])


def _binary(name):
    srcdir = globals()["srcdir"]
    return os.path.join(srcdir, "target", "debug", "jt2")


def is_directory(ctx, dirname=None):
    assert_eq = globals()["assert_eq"]
    logging.debug("checking if %r is a directory", dirname)
    assert_eq(os.path.isdir(dirname), True)


def output_contains(ctx, pattern=None):
    assert_eq = globals()["assert_eq"]
    logging.debug("checking if %r contains", ctx["stdout"], pattern)
    assert_eq(pattern in ctx["stdout"], True)


def journal_has_no_drafts(ctx, dirname=None):
    assert_eq = globals()["assert_eq"]
    logging.debug(f"checking {dirname} has no drafts")
    drafts = os.path.join(dirname, "drafts")
    assert_eq(_find_files(drafts), [])


def journal_has_one_draft(ctx, dirname=None):
    assert_eq = globals()["assert_eq"]
    logging.debug(f"checking {dirname} has one draft")
    drafts = os.path.join(dirname, "drafts")
    assert_eq(len(_find_files(drafts)), 1)


def journal_has_no_entries(ctx, dirname=None):
    assert_eq = globals()["assert_eq"]
    logging.debug(f"checking {dirname} has no entries")
    entries = os.path.join(dirname, "entries")
    assert_eq(_find_files(entries), [])


def journal_has_one_entry(ctx, dirname=None, variable=None):
    assert_eq = globals()["assert_eq"]
    logging.debug(
        f"checking {dirname} has one entry, whose filename is remembered as {variable}"
    )
    entries = os.path.join(dirname, "entries")
    files = _find_files(entries)
    assert_eq(len(files), 1)
    variables = ctx.get("variables", {})
    variables[variable] = files[0]
    ctx["variables"] = variables


def _find_files(root):
    if not os.path.exists(root):
        return []

    files = []
    for dirname, _, basenames in os.walk(root):
        for basename in basenames:
            files.append(os.path.join(dirname, basename))
    return files


def draft_contains_string(ctx, dirname=None, draftno=None, pattern=None):
    logging.debug(f"checking draft {draftno} in {dirname} has contains {pattern!r}")
    draft = os.path.join(dirname, "drafts", f"{draftno}.md")
    with open(draft) as f:
        data = f.read()
        logging.debug(f"draft content: {data!r}")
        assert pattern in data


def edit_draft(ctx, dirname=None, draftno=None, text=None):
    logging.debug(f"editing draft {draftno} in {dirname} to also contain {text!r}")
    draft = os.path.join(dirname, "drafts", f"{draftno}.md")
    with open(draft, "a") as f:
        f.write(text)


def file_contains(ctx, variable=None, pattern=None):
    logging.debug(f"checking {variable} contains {pattern!r}")

    variables = ctx.get("variables", {})
    logging.debug(f"variables: {variables!r}")

    filename = variables[variable]
    with open(filename) as f:
        data = f.read()
        logging.debug(f"file content: {data!r}")
        assert pattern in data