import 'package:flutter_test/flutter_test.dart'; import 'package:accessible_terminal/ui/widgets/ansi_text_parser.dart'; import 'package:flutter/material.dart'; void main() { group('AnsiTextParser', () { test('strip removes CSI ANSI color codes', () { const input = '\x1B[31mRed Text\x1B[0m'; final result = AnsiTextParser.strip(input); expect(result, equals('Red Text')); }); test('strip removes OSC sequences (Window Title)', () { const input = '\x1B]0;My Title\x07Content'; final result = AnsiTextParser.strip(input); expect(result, equals('Content')); }); test('strip removes OSC sequences with ST terminator', () { const input = '\x1B]0;My Title\x1B\\Content'; final result = AnsiTextParser.strip(input); expect(result, equals('Content')); }); test('strip removes mixed sequences', () { const input = 'Normal \x1B[1mBold\x1B[0m \x1B]0;Hidden\x07Text'; final result = AnsiTextParser.strip(input); expect(result, equals('Normal Bold Text')); }); test('parse handles OSC sequences by ignoring them (discarding)', () { final parser = AnsiTextParser(); const input = '\x1B]0;Title\x07Visible'; final span = parser.parse(input); expect(span.toPlainText(), equals('Visible')); }); test('strip removes control characters', () { const input = 'Clean\x00\x08Me'; // Null and Backspace final result = AnsiTextParser.strip(input); expect(result, equals('CleanMe')); }); }); }