@@ -47,6 +47,7 @@ def wrapped(self, *args, **kwargs):
47
47
return wrapped
48
48
49
49
term = os .environ .get ('TERM' )
50
+ SHORT_MAX = 0x7fff
50
51
51
52
# If newterm was supported we could use it instead of initscr and not exit
52
53
@unittest .skipIf (not term or term == 'unknown' ,
@@ -327,11 +328,20 @@ def bad_colors2(self):
327
328
def bad_pairs (self ):
328
329
return (- 1 , - 2 ** 31 - 1 , 2 ** 31 , - 2 ** 63 - 1 , 2 ** 63 , 2 ** 64 )
329
330
331
+ def test_start_color (self ):
332
+ if not curses .has_colors ():
333
+ self .skipTest ('requires colors support' )
334
+ curses .start_color ()
335
+ if verbose :
336
+ print (f'COLORS = { curses .COLORS } ' , file = sys .stderr )
337
+ print (f'COLOR_PAIRS = { curses .COLOR_PAIRS } ' , file = sys .stderr )
338
+
330
339
@requires_colors
331
340
def test_color_content (self ):
332
341
self .assertEqual (curses .color_content (curses .COLOR_BLACK ), (0 , 0 , 0 ))
333
342
curses .color_content (0 )
334
- curses .color_content (curses .COLORS - 1 )
343
+ maxcolor = curses .COLORS - 1
344
+ curses .color_content (maxcolor )
335
345
336
346
for color in self .bad_colors ():
337
347
self .assertRaises (ValueError , curses .color_content , color )
@@ -352,11 +362,12 @@ def test_init_color(self):
352
362
curses .init_color (0 , 1000 , 1000 , 1000 )
353
363
self .assertEqual (curses .color_content (0 ), (1000 , 1000 , 1000 ))
354
364
355
- old = curses .color_content (curses .COLORS - 1 )
356
- curses .init_color (curses .COLORS - 1 , * old )
357
- self .addCleanup (curses .init_color , curses .COLORS - 1 , * old )
358
- curses .init_color (curses .COLORS - 1 , 0 , 500 , 1000 )
359
- self .assertEqual (curses .color_content (curses .COLORS - 1 ), (0 , 500 , 1000 ))
365
+ maxcolor = curses .COLORS - 1
366
+ old = curses .color_content (maxcolor )
367
+ curses .init_color (maxcolor , * old )
368
+ self .addCleanup (curses .init_color , maxcolor , * old )
369
+ curses .init_color (maxcolor , 0 , 500 , 1000 )
370
+ self .assertEqual (curses .color_content (maxcolor ), (0 , 500 , 1000 ))
360
371
361
372
for color in self .bad_colors ():
362
373
self .assertRaises (ValueError , curses .init_color , color , 0 , 0 , 0 )
@@ -365,13 +376,25 @@ def test_init_color(self):
365
376
self .assertRaises (ValueError , curses .init_color , 0 , 0 , comp , 0 )
366
377
self .assertRaises (ValueError , curses .init_color , 0 , 0 , 0 , comp )
367
378
379
+ def get_pair_limit (self ):
380
+ pair_limit = curses .COLOR_PAIRS
381
+ if hasattr (curses , 'ncurses_version' ):
382
+ if curses .has_extended_color_support ():
383
+ pair_limit += 2 * curses .COLORS + 1
384
+ if (not curses .has_extended_color_support ()
385
+ or (6 , 1 ) <= curses .ncurses_version < (6 , 2 )):
386
+ pair_limit = min (pair_limit , SHORT_MAX )
387
+ return pair_limit
388
+
368
389
@requires_colors
369
390
def test_pair_content (self ):
370
391
if not hasattr (curses , 'use_default_colors' ):
371
392
self .assertEqual (curses .pair_content (0 ),
372
393
(curses .COLOR_WHITE , curses .COLOR_BLACK ))
373
394
curses .pair_content (0 )
374
- curses .pair_content (curses .COLOR_PAIRS - 1 )
395
+ maxpair = self .get_pair_limit () - 1
396
+ if maxpair > 0 :
397
+ curses .pair_content (maxpair )
375
398
376
399
for pair in self .bad_pairs ():
377
400
self .assertRaises (ValueError , curses .pair_content , pair )
@@ -384,11 +407,15 @@ def test_init_pair(self):
384
407
385
408
curses .init_pair (1 , 0 , 0 )
386
409
self .assertEqual (curses .pair_content (1 ), (0 , 0 ))
387
- curses .init_pair (1 , curses .COLORS - 1 , curses .COLORS - 1 )
388
- self .assertEqual (curses .pair_content (1 ),
389
- (curses .COLORS - 1 , curses .COLORS - 1 ))
390
- curses .init_pair (curses .COLOR_PAIRS - 1 , 2 , 3 )
391
- self .assertEqual (curses .pair_content (curses .COLOR_PAIRS - 1 ), (2 , 3 ))
410
+ maxcolor = curses .COLORS - 1
411
+ curses .init_pair (1 , maxcolor , 0 )
412
+ self .assertEqual (curses .pair_content (1 ), (maxcolor , 0 ))
413
+ curses .init_pair (1 , 0 , maxcolor )
414
+ self .assertEqual (curses .pair_content (1 ), (0 , maxcolor ))
415
+ maxpair = self .get_pair_limit () - 1
416
+ if maxpair > 1 :
417
+ curses .init_pair (maxpair , 0 , 0 )
418
+ self .assertEqual (curses .pair_content (maxpair ), (0 , 0 ))
392
419
393
420
for pair in self .bad_pairs ():
394
421
self .assertRaises (ValueError , curses .init_pair , pair , 0 , 0 )
@@ -582,6 +609,8 @@ def test_update_lines_cols(self):
582
609
@requires_curses_func ('ncurses_version' )
583
610
def test_ncurses_version (self ):
584
611
v = curses .ncurses_version
612
+ if verbose :
613
+ print (f'ncurses_version = { curses .ncurses_version } ' , flush = True )
585
614
self .assertIsInstance (v [:], tuple )
586
615
self .assertEqual (len (v ), 3 )
587
616
self .assertIsInstance (v [0 ], int )
0 commit comments