import unittest

import sys
import os.path
import mozunit

from printprereleasesuffix import get_prerelease_suffix

class TestGetPreReleaseSuffix(unittest.TestCase):
  """
  Unit tests for the get_prerelease_suffix function
  """

  def test_alpha_1(self):
    """test 1a1 version string"""
    self.c = get_prerelease_suffix('1a1')
    self.assertEqual(self.c, ' 1 Alpha 1')

  def test_alpha_10(self):
    """test 1.2a10 version string"""
    self.c = get_prerelease_suffix('1.2a10')
    self.assertEqual(self.c, ' 1.2 Alpha 10')

  def test_beta_3(self):
    """test 1.2.3b3 version string"""
    self.c = get_prerelease_suffix('1.2.3b3')
    self.assertEqual(self.c, ' 1.2.3 Beta 3')

  def test_beta_30(self):
    """test 1.2.3.4b30 version string"""
    self.c = get_prerelease_suffix('1.2.3.4b30')
    self.assertEqual(self.c, ' 1.2.3.4 Beta 30')

  def test_release_1(self):
    """test 1.2.3.4 version string"""
    self.c = get_prerelease_suffix('1.2.3.4')
    self.assertEqual(self.c, '')

  def test_alpha_1_pre(self):
    """test 1.2a1pre version string"""
    self.c = get_prerelease_suffix('1.2a1pre')
    self.assertEqual(self.c, '')

  def test_beta_10_pre(self):
    """test 3.4b10pre version string"""
    self.c = get_prerelease_suffix('3.4b10pre')
    self.assertEqual(self.c, '')

  def test_pre_0(self):
    """test 1.2pre0 version string"""
    self.c = get_prerelease_suffix('1.2pre0')
    self.assertEqual(self.c, '')

  def test_pre_1_b(self):
    """test 1.2pre1b version string"""
    self.c = get_prerelease_suffix('1.2pre1b')
    self.assertEqual(self.c, '')

  def test_a_a(self):
    """test 1.2aa version string"""
    self.c = get_prerelease_suffix('1.2aa')
    self.assertEqual(self.c, '')

  def test_b_b(self):
    """test 1.2bb version string"""
    self.c = get_prerelease_suffix('1.2bb')
    self.assertEqual(self.c, '')

  def test_a_b(self):
    """test 1.2ab version string"""
    self.c = get_prerelease_suffix('1.2ab')
    self.assertEqual(self.c, '')

  def test_plus(self):
    """test 1.2+ version string """
    self.c = get_prerelease_suffix('1.2+')
    self.assertEqual(self.c, '')

if __name__ == '__main__':
  mozunit.main()
