This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/test/test_util.py
2015-10-22 12:07:31 -04:00

136 lines
4.7 KiB
Python

import unittest
from itertools import islice
from util.validation import generate_valid_usernames
from util.registry.generatorfile import GeneratorFile
class TestGeneratorFile(unittest.TestCase):
def sample_generator(self):
yield 'this'
yield 'is'
yield 'a'
yield 'test'
def test_basic_generator(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals(0, f.tell())
self.assertEquals("thisisatest", f.read())
self.assertEquals(len("thisisatest"), f.tell())
def test_same_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("this", f.read(4))
self.assertEquals(4, f.tell())
self.assertEquals("is", f.read(2))
self.assertEquals(6, f.tell())
self.assertEquals("a", f.read(1))
self.assertEquals(7, f.tell())
self.assertEquals("test", f.read(4))
self.assertEquals(11, f.tell())
def test_indexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals(6, f.tell())
self.assertEquals("atest", f.read(5))
self.assertEquals(11, f.tell())
def test_misindexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals(6, f.tell())
self.assertEquals("ate", f.read(3))
self.assertEquals(9, f.tell())
self.assertEquals("st", f.read(2))
self.assertEquals(11, f.tell())
self.assertEquals("", f.read(2))
self.assertEquals(11, f.tell())
def test_misindexed_lengths_2(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisat", f.read(8))
self.assertEquals(8, f.tell())
self.assertEquals("e", f.read(1))
self.assertEquals(9, f.tell())
self.assertEquals("st", f.read(2))
self.assertEquals(11, f.tell())
self.assertEquals("", f.read(2))
self.assertEquals(11, f.tell())
def test_overly_long(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisatest", f.read(60))
self.assertEquals(11, f.tell())
class TestUsernameGenerator(unittest.TestCase):
def assert_generated_output(self, input_username, expected_output):
name_gen = generate_valid_usernames(input_username)
generated_output = list(islice(name_gen, 1))[0]
self.assertEquals(expected_output, generated_output)
def test_basic_ascii_names(self):
self.assert_generated_output('jake', 'jake')
self.assert_generated_output('frank', 'frank')
self.assert_generated_output('fra-nk', 'fra_nk')
def test_names_with_caps(self):
self.assert_generated_output('Jake', 'jake')
self.assert_generated_output('FranK', 'frank')
def test_multiple_underscores(self):
self.assert_generated_output('ja__ke', 'ja_ke')
self.assert_generated_output('ja___ke', 'ja_ke')
def test_trailing_underscores(self):
self.assert_generated_output('ja__', 'ja00')
self.assert_generated_output('jake__', 'jake')
def test_short_names(self):
self.assert_generated_output('a', 'a000')
self.assert_generated_output('ab', 'ab00')
self.assert_generated_output('abc', 'abc0')
def test_long_names(self):
self.assert_generated_output('abcdefghijklmnopqrstuvwxyz1234567890',
'abcdefghijklmnopqrstuvwxyz1234')
def test_unicode_transliteration(self):
self.assert_generated_output(u'\xc6neid', 'aeneid')
self.assert_generated_output(u'\xe9tude', 'etude')
self.assert_generated_output(u'\u5317\u4eb0', 'bei_jing')
self.assert_generated_output(u'\u1515\u14c7\u14c7', 'shanana')
self.assert_generated_output(u'\u13d4\u13b5\u13c6', 'taliqua')
self.assert_generated_output(u'\u0726\u071b\u073d\u0710\u073a', 'ptu_i')
self.assert_generated_output(u'\u0905\u092d\u093f\u091c\u0940\u0924', 'abhijiit')
self.assert_generated_output(u'\u0985\u09ad\u09bf\u099c\u09c0\u09a4', 'abhijiit')
self.assert_generated_output(u'\u0d05\u0d2d\u0d3f\u0d1c\u0d40\u0d24', 'abhijiit')
self.assert_generated_output(u'\u0d2e\u0d32\u0d2f\u0d3e\u0d32\u0d2e\u0d4d', 'mlyaalm')
self.assert_generated_output(u'\ue000', '0000')
self.assert_generated_output(u'\u03ff', '0000')
self.assert_generated_output(u'\u0d2e\u0d32\u03ff\u03ff\u0d2e\u0d32', 'mlml')
def test_multiple_suggestions(self):
name_gen = generate_valid_usernames('a')
generated_output = list(islice(name_gen, 4))
self.assertEquals('a000', generated_output[0])
self.assertEquals('a001', generated_output[1])
self.assertEquals('a002', generated_output[2])
self.assertEquals('a003', generated_output[3])
if __name__ == '__main__':
unittest.main()