blob: 532cb8033c93fbe3046bf593e38a94dbd2f5f46f [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import os
import unittest
import factory_common # pylint: disable=W0611
from cros.factory.rf.tools.csv_reader import ReadSingleCell
from cros.factory.rf.tools.csv_reader import ReadCsv
from cros.factory.rf.tools.csv_reader import ReadCsvAsDict
from cros.factory.rf.tools.csv_reader import ReadCsvAsListOfDict
class CsvReaderTest(unittest.TestCase):
def setUp(self):
self.testdata_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)), 'testdata')
self.list_expected = [
{'key1': 3, 'key2': 4},
{'key1': 2, 'key2': 5},
{'key1': None, 'key2': 8},
{'key1': 1, 'key2': 9}]
self.dict_expected = {'key1': 33, 'key2': 2}
def testReadSingleCell(self):
self.assertEqual(ReadSingleCell('100'), 100)
self.assertEqual(ReadSingleCell("'str_test'"), 'str_test')
self.assertEqual(ReadSingleCell('(300, 600)'), (300, 600))
self.assertEqual(ReadSingleCell(''), None)
self.assertEqual(ReadSingleCell('[1, 4, 7]'), [1, 4, 7])
self.assertEqual(ReadSingleCell('[1, 4, 7]'), [1, 4, 7])
self.assertRaisesRegexp(
NameError, 'name .* is not defined',
ReadSingleCell, 'invalid_syntax')
self.assertRaisesRegexp(
ValueError, 'Failed to load external',
ReadSingleCell, "CsvLink('not_exist_file.csv')")
def testReadCsvAsADict(self):
loaded_dict = ReadCsvAsDict(
os.path.join(self.testdata_path, 'dict_normal.csv'))
self.assertEqual(loaded_dict, self.dict_expected)
def testReadCsvAsADictInvalidColumns(self):
self.assertRaisesRegexp(
ValueError, 'Columns format is not a dict', ReadCsvAsDict,
os.path.join(self.testdata_path, 'dict_invalid_column.csv'))
def testReadCsvAsADictDuplicatedKey(self):
self.assertRaisesRegexp(
ValueError, 'Duplicated key', ReadCsvAsDict,
os.path.join(self.testdata_path, 'dict_duplicated_key.csv'))
def testReadCsvAsListOfDict(self):
loaded_list = ReadCsvAsListOfDict(
os.path.join(self.testdata_path, 'list_of_dict_normal.csv'))
self.assertEqual(loaded_list, self.list_expected)
def testReadCsvAsListOfDictDuplicatedColumn(self):
self.assertRaisesRegexp(
ValueError, 'Duplicated column', ReadCsvAsListOfDict,
os.path.join(self.testdata_path, 'list_of_dict_duplicated_column.csv'))
def testReadCsv(self):
loaded_python_obj = ReadCsv(
os.path.join(self.testdata_path, 'recursive_example.csv'))
python_obj_expected = {'key1': self.dict_expected,
'key2': 33,
'key3': self.list_expected}
self.assertEqual(loaded_python_obj, python_obj_expected)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
unittest.main()