def test_filter(): # Test filtering rows with a filter function. nav = Navigator(data_file, header=True) def when_few_tires(row): if row['product'] == 'tire' and int(row['quantity']) <= 3: return True else: return False rows = [] header = content[0] for row in content[1:]: dict_row = {header[i]: str(r) for i, r in enumerate(row)} if when_few_tires(dict_row): rows.append(dict_row) for i, row in enumerate(nav.filter(when_few_tires)): assert row == rows[i] nav.close()
def test_concurrency(): # Test whether multiple threads can iterate through the file without losing their place. nav = Navigator(data_file) def iterate_rows(): for i, row in enumerate(nav): assert row == [str(r) for r in content[i]] for i, row in enumerate(nav): assert row == [str(r) for r in content[i]] for i, row in enumerate(nav): assert row == [str(r) for r in content[i]] for i, row in enumerate(nav): assert row == [str(r) for r in content[i]] nav.close() threads = [] for _ in range(4): threads.append(threading.Thread(target=iterate_rows)) for thread in threads: thread.start() for thread in threads: thread.join() nav.close()
def test__readrow(): # Test that raw string output works. nav = Navigator(data_file, raw_output=True) for row in content: assert nav._readrow() == ','.join([str(r) for r in row]) + '\n' nav.close() # Test that list output works. nav = Navigator(data_file) for row in content: assert nav._readrow() == [str(r) for r in row] nav.close() # Test that dict output works. nav = Navigator(data_file, header=True) header = content[0] for row in content[1:]: assert nav._readrow() == {header[i]: str(r) for i, r in enumerate(row)} nav.close()
def test_iter(): # Test an iterator over the rows of the file. nav = Navigator(data_file) for i, row in enumerate(nav): assert row == [str(r) for r in content[i]] nav.close()