Skip to content

Commit

Permalink
Merge pull request #20 from iamtalhaasghar/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
iamtalhaasghar authored Feb 17, 2022
2 parents ff6e59d + ba70beb commit d2384e9
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 9 deletions.
32 changes: 32 additions & 0 deletions .github/workflows/python-app.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Python application

on:
push:
branches: [develop]
pull_request:
branches: [develop]

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10']
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest
pip install .
- name: Test with pytest
run: |
pytest
32 changes: 25 additions & 7 deletions mps_youtube/players/mplayer.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import os
import re
import subprocess
import sys
import tempfile
import subprocess
import re

from .. import g, screen, c, paths, config, util
import typing as T

from .. import c, config, g, paths, screen, util
from ..player import CmdPlayer

mswin = os.name == "nt"
Expand Down Expand Up @@ -225,9 +225,27 @@ def _get_input_file():
return tmpfile.name


def _get_mplayer_version(exename):
o = subprocess.check_output([exename]).decode()
m = re.search('MPlayer SVN[\s-]r([0-9]+)', o, re.MULTILINE | re.IGNORECASE)
def _get_mplayer_version(exename: str) -> T.Union[int, T.Tuple[int, ...]]:
"""get mplayer version.
Args:
exename: mplayer executable name.
Returns:
single integer value or tuple of mplayer version. Return `0` if failed
Raises:
OSError: if `exename` is invalid
FileNotFoundError: if no mplayer found
PermissionError: if user dont have permission to run `exename`
TypeError: if `exename` return invalid type
"""
try:
o = subprocess.check_output([exename]).decode()
except FileNotFoundError as err:
util.dbg("%sFailed to detect mplayer version, exename %s,%s", c.r, exename, c.w)
raise err
m = re.search(r"MPlayer \S*?SVN[\s-]r([0-9]+)", o, re.MULTILINE | re.IGNORECASE)

ver = 0
if m:
Expand Down
9 changes: 7 additions & 2 deletions mps_youtube/test/test_main.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
import unittest

import pytest

import mps_youtube.main as mps


class TestMain(unittest.TestCase):

def test_fmt_time(self):
pytest.skip('main not have tested attribute')
self.assertEqual(mps.fmt_time(0), '00:00')
self.assertEqual(mps.fmt_time(59), '00:59')
self.assertEqual(mps.fmt_time(100), '01:40')
self.assertEqual(mps.fmt_time(1000), '16:40')
self.assertEqual(mps.fmt_time(5000), '83:20')
self.assertEqual(mps.fmt_time(6500), '1:48:20')

def test_num_repr(self):
pytest.skip('main not have tested attribute')
self.assertEqual(mps.num_repr(0), '0')
self.assertEqual(mps.num_repr(1001), '1001')
self.assertEqual(mps.num_repr(10001), '10k')
Expand Down
41 changes: 41 additions & 0 deletions mps_youtube/test/test_players_mplayer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from unittest import mock

import pytest

from mps_youtube.players import mplayer


@pytest.mark.parametrize(
"exename, exp_err",
[
("", (OSError, PermissionError)),
("mplayersomething", FileNotFoundError),
],
)
def test_get_mplayer_version_no_mplayer(exename, exp_err):
with pytest.raises(exp_err):
mplayer._get_mplayer_version(exename)


def test_get_mplayer_version_invalid_input():
with mock.patch("mps_youtube.players.mplayer.subprocess"), pytest.raises(TypeError):
mplayer._get_mplayer_version(mock.MagicMock())


@pytest.mark.parametrize(
"output, exp_res",
[
(
"MPlayer Redxii-SVN-r38151-6.2.0 (x86_64) (C) 2000-2019 MPlayer Team...",
38151,
),
("MPlayer SVN-r38151-6.2.0 (x86_64) (C) 2000-2019 MPlayer Team...", 38151),
("MPlayer 1.4 (Debian), built with gcc-10 (C) 2000-2019 MPlayer Team", (1, 4)),
],
)
def test_get_mplayer_version(output, exp_res):
with mock.patch("mps_youtube.players.mplayer.subprocess") as m_subprocess:
m_subprocess.check_output.return_value.decode.return_value = output
assert mplayer._get_mplayer_version(mock.MagicMock()) == exp_res
17 changes: 17 additions & 0 deletions mps_youtube/test/test_util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pytest

import mps_youtube.util as util


@pytest.mark.parametrize(
"num,t,exp_res",
(
(0, "", ""),
(0, None, ""),
),
)
def test_uea_pad(num, t, exp_res):
res = util.uea_pad(num, t)
assert res == exp_res

0 comments on commit d2384e9

Please sign in to comment.