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
91 lines (68 loc) · 2.78 KB
/
Copy pathtest_output.py
File metadata and controls
91 lines (68 loc) · 2.78 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
"""Tests for the Renderer (Rich + JSON output paths)."""
from __future__ import annotations
import json
from datetime import datetime, timezone
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"}
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