import pytest
from escpos.capabilities import get_profile, NotSupported, BARCODE_B, Profile


@pytest.fixture
def profile():
    return get_profile('default')


class TestBaseProfile:
    """Test the `BaseProfile` class.
    """

    def test_get_font(self, profile):
        with pytest.raises(NotSupported):
            assert profile.get_font('3')
        assert profile.get_font(1) == 1
        assert profile.get_font('a') == 0

    def test_supports(self, profile):
        assert not profile.supports('asdf asdf')
        assert profile.supports(BARCODE_B)

    def test_get_columns(self, profile):
        assert profile.get_columns('a') > 5
        with pytest.raises(NotSupported):
            assert profile.get_columns('asdfasdf')


class TestCustomProfile:
    """Test custom profile options with the `Profile` class.
    """

    def test_columns(self):
        assert Profile(columns=10).get_columns('sdfasdf') == 10

    def test_features(self):
        assert Profile(features={'foo': True}).supports('foo')