Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (.venv) user@system:~/src/arcade-roguelike$ pytest
- ========================================= test session starts ==========================================
- platform linux -- Python 3.9.2, pytest-7.1.2, pluggy-1.0.0
- rootdir: /home/user/src/arcade-roguelike
- plugins: cov-3.0.0, mock-3.7.0
- collected 29 items
- tests/test_game_window.py ..........EE..............EEE [100%]
- ================================================ ERRORS ================================================
- _________ ERROR at setup of TestMyGame.test_draw_in_select_location_state_with_mouse_position __________
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- > sound = Sound(file_name, streaming)
- .venv/lib/python3.9/site-packages/arcade/sound.py:144:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <arcade.sound.Sound object at 0x7fdd9a745df0>, file_name = 'sounds/footstep_concrete_002.ogg'
- streaming = False
- def __init__(self, file_name: Union[str, Path], streaming: bool = False):
- self.file_name: str = ""
- > file_name = resolve_resource_path(file_name)
- .venv/lib/python3.9/site-packages/arcade/sound.py:26:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = PosixPath('sounds/footstep_concrete_002.ogg')
- def resolve_resource_path(path: Union[str, Path]) -> Path:
- """Resolves a resource path and returns a Path object.
- :param Union[str, Path] path: A Path or string
- """
- # Convert to a Path object and resolve :resources:
- if isinstance(path, str):
- path = path.strip() # Allow for silly mistakes with extra spaces
- if path.startswith(':'):
- path = path[1:]
- handle, resource = path.split(":")
- while resource.startswith('/') or resource.startswith('\\'):
- resource = resource[1:]
- try:
- handle_path = resource_handles[handle]
- except KeyError:
- raise KeyError(f"Unknown resource handle \"{handle}\"")
- # Always convert into a Path object
- path = Path(handle_path / resource)
- else:
- path = Path(path)
- # Check for the existence of the file and provide useful feedback to
- # avoid deep stack trace into pathlib
- if not path.exists():
- > raise FileNotFoundError(f"Cannot locate resource : {path}")
- E FileNotFoundError: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/resources/__init__.py:39: FileNotFoundError
- During handling of the above exception, another exception occurred:
- mock_arcade = <MagicMock name='arcade' id='140589756285088'>
- @pytest.fixture
- def window(mock_arcade):
- > return MyGame(100, 100, "foo")
- tests/test_game_window.py:47:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- source/game_window.py:35: in __init__
- self.game_engine = GameEngine()
- source/game_engine.py:49: in __init__
- self.walk_sound = arcade.load_sound("sounds/footstep_concrete_002.ogg")
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- sound = Sound(file_name, streaming)
- return sound
- except Exception as ex:
- > raise FileNotFoundError(f'Unable to load sound file: "{file_name}". Exception: {ex}')
- E FileNotFoundError: Unable to load sound file: "sounds/footstep_concrete_002.ogg". Exception: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/sound.py:147: FileNotFoundError
- ________ ERROR at setup of TestMyGame.test_draw_in_select_location_state_without_mouse_position ________
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- > sound = Sound(file_name, streaming)
- .venv/lib/python3.9/site-packages/arcade/sound.py:144:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <arcade.sound.Sound object at 0x7fdd9a8a44c0>, file_name = 'sounds/footstep_concrete_002.ogg'
- streaming = False
- def __init__(self, file_name: Union[str, Path], streaming: bool = False):
- self.file_name: str = ""
- > file_name = resolve_resource_path(file_name)
- .venv/lib/python3.9/site-packages/arcade/sound.py:26:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = PosixPath('sounds/footstep_concrete_002.ogg')
- def resolve_resource_path(path: Union[str, Path]) -> Path:
- """Resolves a resource path and returns a Path object.
- :param Union[str, Path] path: A Path or string
- """
- # Convert to a Path object and resolve :resources:
- if isinstance(path, str):
- path = path.strip() # Allow for silly mistakes with extra spaces
- if path.startswith(':'):
- path = path[1:]
- handle, resource = path.split(":")
- while resource.startswith('/') or resource.startswith('\\'):
- resource = resource[1:]
- try:
- handle_path = resource_handles[handle]
- except KeyError:
- raise KeyError(f"Unknown resource handle \"{handle}\"")
- # Always convert into a Path object
- path = Path(handle_path / resource)
- else:
- path = Path(path)
- # Check for the existence of the file and provide useful feedback to
- # avoid deep stack trace into pathlib
- if not path.exists():
- > raise FileNotFoundError(f"Cannot locate resource : {path}")
- E FileNotFoundError: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/resources/__init__.py:39: FileNotFoundError
- During handling of the above exception, another exception occurred:
- mock_arcade = <MagicMock name='arcade' id='140589755480816'>
- @pytest.fixture
- def window(mock_arcade):
- > return MyGame(100, 100, "foo")
- tests/test_game_window.py:47:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- source/game_window.py:35: in __init__
- self.game_engine = GameEngine()
- source/game_engine.py:49: in __init__
- self.walk_sound = arcade.load_sound("sounds/footstep_concrete_002.ogg")
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- sound = Sound(file_name, streaming)
- return sound
- except Exception as ex:
- > raise FileNotFoundError(f'Unable to load sound file: "{file_name}". Exception: {ex}')
- E FileNotFoundError: Unable to load sound file: "sounds/footstep_concrete_002.ogg". Exception: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/sound.py:147: FileNotFoundError
- __________________ ERROR at setup of TestMyGame.test_on_draw_in_select_location_state __________________
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- > sound = Sound(file_name, streaming)
- .venv/lib/python3.9/site-packages/arcade/sound.py:144:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <arcade.sound.Sound object at 0x7fdd9a7b1a30>, file_name = 'sounds/footstep_concrete_002.ogg'
- streaming = False
- def __init__(self, file_name: Union[str, Path], streaming: bool = False):
- self.file_name: str = ""
- > file_name = resolve_resource_path(file_name)
- .venv/lib/python3.9/site-packages/arcade/sound.py:26:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = PosixPath('sounds/footstep_concrete_002.ogg')
- def resolve_resource_path(path: Union[str, Path]) -> Path:
- """Resolves a resource path and returns a Path object.
- :param Union[str, Path] path: A Path or string
- """
- # Convert to a Path object and resolve :resources:
- if isinstance(path, str):
- path = path.strip() # Allow for silly mistakes with extra spaces
- if path.startswith(':'):
- path = path[1:]
- handle, resource = path.split(":")
- while resource.startswith('/') or resource.startswith('\\'):
- resource = resource[1:]
- try:
- handle_path = resource_handles[handle]
- except KeyError:
- raise KeyError(f"Unknown resource handle \"{handle}\"")
- # Always convert into a Path object
- path = Path(handle_path / resource)
- else:
- path = Path(path)
- # Check for the existence of the file and provide useful feedback to
- # avoid deep stack trace into pathlib
- if not path.exists():
- > raise FileNotFoundError(f"Cannot locate resource : {path}")
- E FileNotFoundError: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/resources/__init__.py:39: FileNotFoundError
- During handling of the above exception, another exception occurred:
- mock_arcade = <MagicMock name='arcade' id='140589755075696'>
- @pytest.fixture
- def window(mock_arcade):
- > return MyGame(100, 100, "foo")
- tests/test_game_window.py:47:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- source/game_window.py:35: in __init__
- self.game_engine = GameEngine()
- source/game_engine.py:49: in __init__
- self.walk_sound = arcade.load_sound("sounds/footstep_concrete_002.ogg")
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- sound = Sound(file_name, streaming)
- return sound
- except Exception as ex:
- > raise FileNotFoundError(f'Unable to load sound file: "{file_name}". Exception: {ex}')
- E FileNotFoundError: Unable to load sound file: "sounds/footstep_concrete_002.ogg". Exception: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/sound.py:147: FileNotFoundError
- ______________________ ERROR at setup of TestMyGame.test_on_draw_in_normal_state _______________________
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- > sound = Sound(file_name, streaming)
- .venv/lib/python3.9/site-packages/arcade/sound.py:144:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <arcade.sound.Sound object at 0x7fdd9a6c8a60>, file_name = 'sounds/footstep_concrete_002.ogg'
- streaming = False
- def __init__(self, file_name: Union[str, Path], streaming: bool = False):
- self.file_name: str = ""
- > file_name = resolve_resource_path(file_name)
- .venv/lib/python3.9/site-packages/arcade/sound.py:26:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = PosixPath('sounds/footstep_concrete_002.ogg')
- def resolve_resource_path(path: Union[str, Path]) -> Path:
- """Resolves a resource path and returns a Path object.
- :param Union[str, Path] path: A Path or string
- """
- # Convert to a Path object and resolve :resources:
- if isinstance(path, str):
- path = path.strip() # Allow for silly mistakes with extra spaces
- if path.startswith(':'):
- path = path[1:]
- handle, resource = path.split(":")
- while resource.startswith('/') or resource.startswith('\\'):
- resource = resource[1:]
- try:
- handle_path = resource_handles[handle]
- except KeyError:
- raise KeyError(f"Unknown resource handle \"{handle}\"")
- # Always convert into a Path object
- path = Path(handle_path / resource)
- else:
- path = Path(path)
- # Check for the existence of the file and provide useful feedback to
- # avoid deep stack trace into pathlib
- if not path.exists():
- > raise FileNotFoundError(f"Cannot locate resource : {path}")
- E FileNotFoundError: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/resources/__init__.py:39: FileNotFoundError
- During handling of the above exception, another exception occurred:
- mock_arcade = <MagicMock name='arcade' id='140589754760016'>
- @pytest.fixture
- def window(mock_arcade):
- > return MyGame(100, 100, "foo")
- tests/test_game_window.py:47:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- source/game_window.py:35: in __init__
- self.game_engine = GameEngine()
- source/game_engine.py:49: in __init__
- self.walk_sound = arcade.load_sound("sounds/footstep_concrete_002.ogg")
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- sound = Sound(file_name, streaming)
- return sound
- except Exception as ex:
- > raise FileNotFoundError(f'Unable to load sound file: "{file_name}". Exception: {ex}')
- E FileNotFoundError: Unable to load sound file: "sounds/footstep_concrete_002.ogg". Exception: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/sound.py:147: FileNotFoundError
- _________________ ERROR at setup of TestMyGame.test_on_draw_in_character_screen_state __________________
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- > sound = Sound(file_name, streaming)
- .venv/lib/python3.9/site-packages/arcade/sound.py:144:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- self = <arcade.sound.Sound object at 0x7fdd9a6e9100>, file_name = 'sounds/footstep_concrete_002.ogg'
- streaming = False
- def __init__(self, file_name: Union[str, Path], streaming: bool = False):
- self.file_name: str = ""
- > file_name = resolve_resource_path(file_name)
- .venv/lib/python3.9/site-packages/arcade/sound.py:26:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = PosixPath('sounds/footstep_concrete_002.ogg')
- def resolve_resource_path(path: Union[str, Path]) -> Path:
- """Resolves a resource path and returns a Path object.
- :param Union[str, Path] path: A Path or string
- """
- # Convert to a Path object and resolve :resources:
- if isinstance(path, str):
- path = path.strip() # Allow for silly mistakes with extra spaces
- if path.startswith(':'):
- path = path[1:]
- handle, resource = path.split(":")
- while resource.startswith('/') or resource.startswith('\\'):
- resource = resource[1:]
- try:
- handle_path = resource_handles[handle]
- except KeyError:
- raise KeyError(f"Unknown resource handle \"{handle}\"")
- # Always convert into a Path object
- path = Path(handle_path / resource)
- else:
- path = Path(path)
- # Check for the existence of the file and provide useful feedback to
- # avoid deep stack trace into pathlib
- if not path.exists():
- > raise FileNotFoundError(f"Cannot locate resource : {path}")
- E FileNotFoundError: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/resources/__init__.py:39: FileNotFoundError
- During handling of the above exception, another exception occurred:
- mock_arcade = <MagicMock name='arcade' id='140589755402224'>
- @pytest.fixture
- def window(mock_arcade):
- > return MyGame(100, 100, "foo")
- tests/test_game_window.py:47:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- source/game_window.py:35: in __init__
- self.game_engine = GameEngine()
- source/game_engine.py:49: in __init__
- self.walk_sound = arcade.load_sound("sounds/footstep_concrete_002.ogg")
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- path = 'sounds/footstep_concrete_002.ogg', streaming = False
- def load_sound(path: Union[str, Path], streaming: bool = False) -> Optional[Sound]:
- """
- Load a sound.
- :param Path path: Name of the sound file to load.
- :param bool streaming: Boolean for determining if we stream the sound
- or load it all into memory. Set to ``True`` for long sounds to save
- memory, ``False`` for short sounds to speed playback.
- :returns: Sound object which can be used by the :func:`play_sound` function.
- :rtype: Sound
- """
- file_name = str(path)
- try:
- sound = Sound(file_name, streaming)
- return sound
- except Exception as ex:
- > raise FileNotFoundError(f'Unable to load sound file: "{file_name}". Exception: {ex}')
- E FileNotFoundError: Unable to load sound file: "sounds/footstep_concrete_002.ogg". Exception: Cannot locate resource : sounds/footstep_concrete_002.ogg
- .venv/lib/python3.9/site-packages/arcade/sound.py:147: FileNotFoundError
- ======================================= short test summary info ========================================
- ERROR tests/test_game_window.py::TestMyGame::test_draw_in_select_location_state_with_mouse_position
- ERROR tests/test_game_window.py::TestMyGame::test_draw_in_select_location_state_without_mouse_position
- ERROR tests/test_game_window.py::TestMyGame::test_on_draw_in_select_location_state - FileNotFoundErro...
- ERROR tests/test_game_window.py::TestMyGame::test_on_draw_in_normal_state - FileNotFoundError: Unable...
- ERROR tests/test_game_window.py::TestMyGame::test_on_draw_in_character_screen_state - FileNotFoundErr...
- ===================================== 24 passed, 5 errors in 0.76s =====================================
Advertisement
Add Comment
Please, Sign In to add comment