#!/usr/bin/env python3

from __future__ import division
from __future__ import print_function

import unittest

from printpages import printpages


class PrintPagesTests(unittest.TestCase):
    """
    Tests for PrintPages.
    """

    def test_basic_page_selection(self):
        """
        Test for base Exercice.
        """
        self.assertEqual(list(printpages("1")), [1])
        self.assertEqual(list(printpages("1,2")), [1, 2])
        self.assertEqual(list(printpages("1,2,3")), [1, 2, 3])
        self.assertEqual(list(printpages("1,2,3,7")), [1, 2, 3, 7])

    def test_spaces(self):
        self.assertEqual(list(printpages("1, 2 ,3")), [1, 2, 3])
        self.assertEqual(list(printpages("1,2,  3,7")), [1, 2, 3, 7])
        self.assertEqual(list(printpages("1 , 2  ,    3 ,   7")), [1, 2, 3, 7])

    # Comment the following line to force the check the bonus code
    @unittest.expectedFailure
    def test_bonus1_semi_column(self):
        self.assertEqual(list(printpages("1;2;3")), [1, 2, 3])
        self.assertEqual(list(printpages("1;2,3;7")), [1, 2, 3, 7])
        self.assertEqual(list(printpages("1,2;3,7")), [1, 2, 3, 7])

    # Comment the following line to force the check the bonus code
    @unittest.expectedFailure
    def test_bonus2_ranges(self):
        self.assertEqual(list(printpages("1-3")), [1, 2, 3])
        self.assertEqual(list(printpages("1  - 3")), [1, 2, 3])
        self.assertEqual(list(printpages("1 -3; 7")), [1, 2, 3, 7])
        self.assertEqual(list(printpages("1, 2; 3- 7")), [1, 2, 3, 4, 5, 6, 7])

    # Comment the following line to force the check the bonus code
    @unittest.expectedFailure
    def test_bonus3_generator(self):
        pages = printpages("1-3")
        self.assertEqual(list(pages), [1, 2, 3])
        self.assertEqual(list(pages), [])

    # Comment the following line to force the check the bonus code
    @unittest.expectedFailure
    def test_bonus4_til_the_end(self):
        self.assertEqual(list(printpages("1->end", 7)), [1, 2, 3, 4, 5, 6, 7])
        self.assertEqual(list(printpages("1-2, 5->end", 7)), [1, 2, 5, 6, 7])


if __name__ == "__main__":
    unittest.main(verbosity=2)
