import os
from unittest import TestCase

from lutris.util.graphics.glxinfo import GlxInfo

FIXTURES_PATH = os.path.join(os.path.dirname(__file__), "fixtures")


class BaseGlxInfo(TestCase):
    fixture = None

    def setUp(self):
        output = self.read_fixture(self.fixture)
        self.glxinfo = GlxInfo(output)

    def read_fixture(self, fixture_filename):
        with open(os.path.join(FIXTURES_PATH, fixture_filename)) as fixture:
            content = fixture.read()
        return content


class TestAMDGlxInfo(BaseGlxInfo):
    fixture = "glxinfo-amd.txt"

    """GlxInfo tests"""

    def test_can_get_name_of_display(self):
        self.assertEqual(self.glxinfo.display, ":0")
        self.assertEqual(self.glxinfo.screen, "0")
        self.assertEqual(self.glxinfo.opengl_version, "4.5 (Compatibility Profile) Mesa 19.0.0-devel - padoka PPA")
        self.assertEqual(self.glxinfo.opengl_vendor, "X.Org")
        self.assertEqual(self.glxinfo.GLX_MESA_query_renderer.version, "19.0.0")


class TestNvidiaGlxInfo(BaseGlxInfo):
    """GlxInfo tests"""

    fixture = "glxinfo-nvidia.txt"

    def test_can_get_name_of_display(self):
        self.assertEqual(self.glxinfo.display, ":0")
        self.assertEqual(self.glxinfo.screen, "0")
        self.assertEqual(self.glxinfo.opengl_version, "4.6.0 NVIDIA 415.25")
        self.assertEqual(self.glxinfo.opengl_vendor, "NVIDIA Corporation")
        with self.assertRaises(AttributeError):
            self.glxinfo.GLX_MESA_query_renderer.version  # pylint: disable=pointless-statement
