Files
qwenpaw/tests/unit/tauri/test_sidecar_logging.py
agent-radar 1a3a4ccde1
Creator App Tests / PR Spam Gate (push) Skipped
Frontend Tests / PR Spam Gate (push) Skipped
NPM Format (website & console) / PR Spam Gate (push) Skipped
Pre-commit Checks / PR Spam Gate (push) Skipped
QwenPaw Creator Plugin Release / check-version (push) Canceled after 0s
QwenPaw Creator Plugin Release / upload-oss (push) Canceled after 0s
Tests / PR Spam Gate (push) Skipped
CodeQL / CodeQL (python) (push) Canceled after 0s
CodeQL / CodeQL (typescript) (push) Canceled after 0s
Creator App Tests / Creator Backend Tests (push) Canceled after 0s
Creator App Tests / Creator UI Build & Tests (push) Canceled after 0s
E2E Smoke Tests / Playwright UI Smoke (push) Canceled after 0s
Frontend Tests / Detect console changes (push) Canceled after 0s
NPM Format (website & console) / website format check (push) Canceled after 0s
NPM Format (website & console) / console format check (push) Canceled after 0s
Pre-commit Checks / Pre-commit (push) Canceled after 0s
QwenPaw Data Plugin Release / check-version (push) Canceled after 0s
Tests / Detect code changes (push) Canceled after 0s
Frontend Tests / Vitest Unit Tests (push) Canceled after 0s
Frontend Tests / Frontend Summary (push) Canceled after 0s
QwenPaw Data Plugin Release / upload-oss (push) Canceled after 0s
Tests / Maintainer Approval (push) Canceled after 0s
Tests / Unit Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - fallback (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p2 (push) Canceled after 0s
Tests / Coverage Report (push) Canceled after 0s
Tests / Test Summary (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:01:50 +08:00

70 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
# pylint: disable=protected-access
from __future__ import annotations
import io
import logging
import sys
from qwenpaw.tauri import sidecar_logging as tauri_logging
def test_tee_stream_writes_text_to_both_streams():
primary = io.StringIO()
secondary = io.StringIO()
stream = tauri_logging._TeeStream(primary, secondary)
assert stream.write("hello") == 5
stream.writelines([" ", "world"])
assert primary.getvalue() == "hello world"
assert secondary.getvalue() == "hello world"
assert stream.writable()
assert not stream.readable()
assert not stream.seekable()
def test_install_sidecar_logging_writes_startup_context_and_tees_output(
monkeypatch,
tmp_path,
):
log_path = tmp_path / "desktop.log"
primary_stdout = io.StringIO()
primary_stderr = io.StringIO()
faulthandler_calls = []
monkeypatch.setattr(sys, "stdout", primary_stdout)
monkeypatch.setattr(sys, "stderr", primary_stderr)
monkeypatch.setattr(
tauri_logging.faulthandler,
"enable",
lambda **kwargs: faulthandler_calls.append(kwargs),
)
try:
assert tauri_logging.install_sidecar_logging(log_path) == log_path
print("stdout hello")
print("stderr hello", file=sys.stderr)
sys.stdout.flush()
sys.stderr.flush()
content = log_path.read_text(encoding="utf-8")
assert "qwenpaw tauri sidecar" in content
assert "stdout hello" in content
assert "stderr hello" in content
assert primary_stdout.getvalue().strip() == "stdout hello"
assert primary_stderr.getvalue().strip() == "stderr hello"
assert faulthandler_calls
assert faulthandler_calls[0]["all_threads"] is True
finally:
if tauri_logging._LOG_FILE is not None:
tauri_logging._LOG_FILE.close()
tauri_logging._LOG_FILE = None
logger = logging.getLogger("qwenpaw")
for handler in list(logger.handlers):
base = getattr(handler, "baseFilename", None)
if base is not None and base == str(log_path.resolve()):
logger.removeHandler(handler)
handler.close()