forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_output.py
More file actions
125 lines (95 loc) · 3.92 KB
/
Copy pathtest_output.py
File metadata and controls
125 lines (95 loc) · 3.92 KB
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
"""Tests for the Renderer (Rich + JSON output paths)."""
from __future__ import annotations
import json
from datetime import datetime, timezone
import pytest
from omi_cli.output import Renderer, coalesce_rows, shorten
def test_json_mode_emits_valid_json_to_stdout(capsys) -> None:
renderer = Renderer(json_mode=True)
renderer.emit({"id": "m1", "content": "hi"})
captured = capsys.readouterr()
parsed = json.loads(captured.out)
assert parsed == {"id": "m1", "content": "hi"}
# Stderr should be quiet for emit() in JSON mode.
assert captured.err == ""
def test_json_mode_silences_info_and_success(capsys) -> None:
renderer = Renderer(json_mode=True)
renderer.info("hello")
renderer.success("yay")
captured = capsys.readouterr()
assert captured.out == ""
assert captured.err == ""
def test_json_mode_emits_errors_as_json_to_stderr(capsys) -> None:
renderer = Renderer(json_mode=True)
renderer.error("bad", detail="reason")
captured = capsys.readouterr()
assert captured.out == ""
parsed = json.loads(captured.err)
assert parsed == {"error": "bad", "detail": "reason"}
@pytest.mark.parametrize("literal", ["Missing [/bold]", "Keep [bold]tags[/bold] :warning:"])
def test_pretty_error_preserves_literal_message_detail_and_metadata(capsys, literal) -> None:
renderer = Renderer(no_color=True)
renderer.error(literal, detail=literal, extra={literal: literal})
captured = capsys.readouterr()
assert captured.out == ""
assert captured.err.count(literal) == 4
def test_json_mode_serializes_datetime() -> None:
import sys
from io import StringIO
renderer = Renderer(json_mode=True)
buffer = StringIO()
sys.stdout, original = buffer, sys.stdout
try:
renderer.emit({"created_at": datetime(2026, 4, 26, 12, 0, tzinfo=timezone.utc)})
finally:
sys.stdout = original
parsed = json.loads(buffer.getvalue())
assert parsed["created_at"].startswith("2026-04-26T12:00:00")
def test_pretty_mode_renders_table_for_list(capsys) -> None:
renderer = Renderer(json_mode=False, no_color=True)
renderer.emit([{"id": "m1", "content": "hello"}], columns=["id", "content"], title="memories")
captured = capsys.readouterr()
assert "m1" in captured.out
assert "hello" in captured.out
def test_pretty_mode_renders_no_results_for_empty_list(capsys) -> None:
renderer = Renderer(json_mode=False, no_color=True)
renderer.emit([])
captured = capsys.readouterr()
assert "no results" in captured.out
def test_shorten_basic() -> None:
assert shorten("abcdef", 3) == "ab…"
assert shorten("abcdef", 10) == "abcdef"
assert shorten(None) == ""
assert shorten("") == ""
def test_coalesce_rows_handles_dicts_and_models() -> None:
class Fake:
def model_dump(self) -> dict:
return {"x": 1}
rows = coalesce_rows([{"a": 1}, Fake()])
assert rows == [{"a": 1}, {"x": 1}]
def test_no_color_env_disables_color(monkeypatch, capsys) -> None:
monkeypatch.setenv("NO_COLOR", "1")
renderer = Renderer(json_mode=False)
renderer.success("done")
captured = capsys.readouterr()
# No ANSI codes when NO_COLOR is set.
assert "\x1b[" not in captured.err
@pytest.mark.parametrize(
"data",
[
[{"content": "[draft] literal [/bold] :warning:"}],
{"content": "[draft] literal [/bold] :warning:"},
"[draft] literal [/bold] :warning:",
],
)
def test_pretty_data_is_literal(data, capsys) -> None:
Renderer(no_color=True).emit(data)
assert "[draft] literal [/bold] :warning:" in capsys.readouterr().out
def test_pretty_data_keys_and_matched_tags_are_literal(capsys) -> None:
renderer = Renderer(no_color=True)
data = {"[key]": "[bold]keep tags[/bold] :warning:"}
renderer.emit(data)
renderer.emit([data])
output = capsys.readouterr().out
assert output.count("[key]") == 2
assert output.count("[bold]keep tags[/bold] :warning:") == 2