src/pathpicker/curses_api.py (46 lines of code) (raw):
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
import curses
import sys
from abc import ABC, abstractmethod
class CursesApiBase(ABC):
@abstractmethod
def use_default_colors(self) -> None:
pass
@abstractmethod
def echo(self) -> None:
pass
@abstractmethod
def noecho(self) -> None:
pass
@abstractmethod
def init_pair(self, pair_number: int, fg_color: int, bg_color: int) -> None:
pass
@abstractmethod
def color_pair(self, color_number: int) -> int:
pass
@abstractmethod
def get_color_pairs(self) -> int:
pass
@abstractmethod
def exit(self) -> None:
pass
@abstractmethod
def allow_file_output(self) -> bool:
pass
class CursesApi(CursesApiBase):
"""A dummy curses wrapper that allows us to intercept these
calls when in a test environment"""
def use_default_colors(self) -> None:
curses.use_default_colors()
def echo(self) -> None:
curses.echo()
def noecho(self) -> None:
curses.noecho()
def init_pair(self, pair_number: int, fg_color: int, bg_color: int) -> None:
curses.init_pair(pair_number, fg_color, bg_color)
def color_pair(self, color_number: int) -> int:
return curses.color_pair(color_number)
def get_color_pairs(self) -> int:
assert hasattr(curses, "COLOR_PAIRS"), "curses is not initialized!"
return curses.COLOR_PAIRS
def exit(self) -> None:
sys.exit(0)
def allow_file_output(self) -> bool:
return True