@@ -76,6 +76,40 @@ main(int argc, char* argv[])
7676 assert (" Hello" == input);
7777 }
7878
79+ {
80+ auto input = std::string (" AB\x1b [33m\0 CD" , 10 );
81+ string_attrs_t sa;
82+
83+ scrub_ansi_string (input, &sa);
84+ assert (input == " AB CD" );
85+ }
86+
87+ {
88+ auto input = std::string (" \x1b [33m\0 Hello" , 11 );
89+ string_attrs_t sa;
90+
91+ scrub_ansi_string (input, &sa);
92+ assert (input == " Hello" );
93+ }
94+
95+ {
96+ char input[] = " AB\x1b [33m\0 CD" ;
97+ auto sf = string_fragment{input, 0 , 10 };
98+
99+ auto new_len = erase_ansi_escapes (sf);
100+ auto result = std::string (input, new_len);
101+ assert (result == " AB CD" );
102+ }
103+
104+ {
105+ char input[] = " \x1b [33m\0 Hello" ;
106+ auto sf = string_fragment{input, 0 , 11 };
107+
108+ auto new_len = erase_ansi_escapes (sf);
109+ auto result = std::string (input, new_len);
110+ assert (result == " Hello" );
111+ }
112+
79113 {
80114 auto input = std::string (" \x1b [0;1;38:2:1:2:3mHello" );
81115 string_attrs_t sa;
@@ -91,6 +125,24 @@ main(int argc, char* argv[])
91125 assert (rgb->rc_b == 3 );
92126 }
93127
128+ {
129+ auto input = std::string (" \x1b [0;48:2:10:20:30mHello" );
130+ string_attrs_t sa;
131+
132+ scrub_ansi_string (input, &sa);
133+ assert (input == " Hello" );
134+ assert (sa.size () == 1 );
135+ assert (sa[0 ].sa_type == &VC_STYLE );
136+ auto ta = sa[0 ].sa_value .get <text_attrs>();
137+ auto rgb = std::get_if<rgb_color>(&ta.ta_bg_color .cu_value );
138+ assert (rgb != nullptr );
139+ assert (sa[0 ].sa_range .lr_start == 0 );
140+ assert (sa[0 ].sa_range .lr_end == -1 );
141+ assert (rgb->rc_r == 10 );
142+ assert (rgb->rc_g == 20 );
143+ assert (rgb->rc_b == 30 );
144+ }
145+
94146 {
95147 auto input = std::string (" \x1b [0;1;38:5:245mHello" );
96148 string_attrs_t sa;
0 commit comments