12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2011, Google Inc. 42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# All rights reserved. 52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Redistribution and use in source and binary forms, with or without 72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# modification, are permitted provided that the following conditions are 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# met: 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# * Redistributions of source code must retain the above copyright 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# notice, this list of conditions and the following disclaimer. 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# * Redistributions in binary form must reproduce the above 132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# copyright notice, this list of conditions and the following disclaimer 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# in the documentation and/or other materials provided with the 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distribution. 162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# * Neither the name of Google Inc. nor the names of its 172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# contributors may be used to endorse or promote products derived from 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# this software without specific prior written permission. 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""Tests for memorizingfile module.""" 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport StringIO 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport set_sys_path # Update sys.path to locate mod_pywebsocket module. 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom mod_pywebsocket import memorizingfile 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass UtilTest(unittest.TestCase): 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """A unittest for memorizingfile module.""" 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def check(self, memorizing_file, num_read, expected_list): 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for unused in range(num_read): 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis memorizing_file.readline() 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual_list = memorizing_file.get_memorized_lines() 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(len(expected_list), len(actual_list)) 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for expected, actual in zip(expected_list, actual_list): 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(expected, actual) 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def check_with_size(self, memorizing_file, read_size, expected_list): 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_list = [] 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_line = '' 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis while True: 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis line = memorizing_file.readline(read_size) 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis line_length = len(line) 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(line_length <= read_size) 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if line_length == 0: 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if read_line != '': 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_list.append(read_line) 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis break 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_line += line 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if line[line_length - 1] == '\n': 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_list.append(read_line) 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_line = '' 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual_list = memorizing_file.get_memorized_lines() 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(len(expected_list), len(actual_list)) 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(len(expected_list), len(read_list)) 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for expected, actual, read in zip(expected_list, actual_list, 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis read_list): 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(expected, actual) 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(expected, read) 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def test_get_memorized_lines(self): 792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis memorizing_file = memorizingfile.MemorizingFile(StringIO.StringIO( 802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Hello\nWorld\nWelcome')) 812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.check(memorizing_file, 3, ['Hello\n', 'World\n', 'Welcome']) 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def test_get_memorized_lines_limit_memorized_lines(self): 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis memorizing_file = memorizingfile.MemorizingFile(StringIO.StringIO( 852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Hello\nWorld\nWelcome'), 2) 862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.check(memorizing_file, 3, ['Hello\n', 'World\n']) 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def test_get_memorized_lines_empty_file(self): 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis memorizing_file = memorizingfile.MemorizingFile(StringIO.StringIO( 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '')) 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.check(memorizing_file, 10, []) 922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def test_get_memorized_lines_with_size(self): 942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for size in range(1, 10): 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis memorizing_file = memorizingfile.MemorizingFile(StringIO.StringIO( 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Hello\nWorld\nWelcome')) 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.check_with_size(memorizing_file, size, 982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ['Hello\n', 'World\n', 'Welcome']) 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__': 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis unittest.main() 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# vi:sts=4 sw=4 et 105