import pytest

from calculatrice import Calculatrice

from datetime import datetime

def pytest_generate_tests(metafunc):
    # called once per each test function
    funcarglist = metafunc.cls.params[metafunc.function.__name__]
    argnames = sorted(funcarglist[0])
    metafunc.parametrize(argnames, [[funcargs[name] for name in argnames]
            for funcargs in funcarglist])

class TestClass(object):
    # a map specifying multiple argument sets for a test method
    params = {
        'test_sommet': [dict(liste=[4]), dict(liste=[2,7,12]), dict(liste=[2,4,7,-1]),],
        'test_somme': [dict(liste=[2,-3], resAttendu=5), dict(liste=[2,3,6], resAttendu=9)],
    }

    @pytest.mark.skipif(datetime.now().second < 30, reason="à cette heure-ci, on ignore ce test")
    def test_sommet(self, liste):
        calc = Calculatrice()
        for i in liste:
            calc.empiler(i)
        resAttendu = liste[-1]
        resEffectif = calc.sommet()
        assert resAttendu == resEffectif, "le dernier nombre empilé est au sommet"

    def test_somme(self, liste,resAttendu):
        calc = Calculatrice()
        for i in liste:
            calc.empiler(i)
        if calc.sommet() < 0:
            pytest.skip("Pas de nombre négatif en 2è paramètre de l'addition")
        calc.ajouter()
        resEffectif = calc.sommet()
        assert resAttendu == resEffectif, "la somme des 2 derniers nombres est au sommet"