blob: 5901b8192b89e303a4e0c9e20c9f702a2bf6de82 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2018 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 unittest
import graphyte_common # pylint: disable=unused-import
from graphyte import data_parser
class ParseTest(unittest.TestCase):
def testConvertEmpty(self):
self.assertEqual(None, data_parser.Parse(''))
self.assertEqual(None, data_parser.Parse(' '))
def testConvertNone(self):
self.assertEqual(None, data_parser.Parse('None'))
self.assertEqual(None, data_parser.Parse('none'))
self.assertEqual(None, data_parser.Parse('null'))
def testConvertInt(self):
self.assertEqual(2015, data_parser.Parse('2015'))
self.assertEqual(-50, data_parser.Parse('-50'))
def testConvertFloat(self):
self.assertEqual(3.05, data_parser.Parse('3.05'))
self.assertEqual(-1.38, data_parser.Parse('-1.38'))
def testConvertString(self):
self.assertEqual('RECOMMEND_STYLE', data_parser.Parse('RECOMMEND_STYLE'))
self.assertEqual('321_Hello_World', data_parser.Parse('321_Hello_World'))
def testInvalidString(self):
self.assertRaises(ValueError, data_parser.Parse, 'space inside')
self.assertRaises(ValueError, data_parser.Parse, '1-1')
self.assertRaises(ValueError, data_parser.Parse, '"comma,inside"')
self.assertRaises(ValueError, data_parser.Parse, '"I\'m happy"')
def testConvertList(self):
self.assertEqual(['string', 123, None],
data_parser.Parse('[string, 123, None]'))
self.assertEqual(['string', 123, None],
data_parser.Parse(' [ string , 123 , None ] '))
self.assertEqual([None, 123, None],
data_parser.Parse(' [ , 123 , None ] '))
def testConvertTuple(self):
self.assertEqual(('string', 123, None),
data_parser.Parse('(string, 123, None)'))
self.assertEqual(('string', 123, None),
data_parser.Parse(' ( string , 123 , None ) '))
self.assertEqual((None, 123, None),
data_parser.Parse(' ( , 123 , None ) '))
class LiteralCheckerTest(unittest.TestCase):
def setUp(self):
self.checker = data_parser.LiteralChecker([int, 'a', None])
def testCheckerStr(self):
self.assertEqual(
"LiteralChecker([<type 'int'>, 'a', None])", str(self.checker))
def testValidData(self):
self.assertTrue(self.checker.CheckData(123))
self.assertTrue(self.checker.CheckData(-55))
self.assertTrue(self.checker.CheckData('a'))
self.assertTrue(self.checker.CheckData(None))
def testInvalidData(self):
self.assertFalse(self.checker.CheckData(123.45))
self.assertFalse(self.checker.CheckData('hello'))
self.assertFalse(self.checker.CheckData(''))
class ListCheckerTest(unittest.TestCase):
def setUp(self):
self.checker = data_parser.ListChecker([int, 'a', None])
def testCheckerStr(self):
self.assertEqual(
"ListChecker([<type 'int'>, 'a', None])", str(self.checker))
def testValidData(self):
self.assertTrue(self.checker.CheckData([123, -55, 'a', None]))
self.assertTrue(self.checker.CheckData(123))
self.assertTrue(self.checker.CheckData([]))
def testInvalidData(self):
self.assertFalse(self.checker.CheckData(123.45))
self.assertFalse(self.checker.CheckData([123.45, -55, 'a', None]))
class TupleCheckerTest(unittest.TestCase):
def setUp(self):
self.checker = data_parser.TupleChecker([[int, None], ['hello', float]])
def testCheckerStr(self):
self.assertEqual(
"TupleChecker([<type 'int'>, None], ['hello', <type 'float'>])",
str(self.checker))
def testValidData(self):
self.assertTrue(self.checker.CheckData((None, 'hello')))
self.assertTrue(self.checker.CheckData((123, -44.5)))
def testInvalidData(self):
self.assertFalse(self.checker.CheckData([123, -44.5]))
self.assertFalse(self.checker.CheckData((123, -44.5, 'hello')))
self.assertFalse(self.checker.CheckData(123))
self.assertFalse(self.checker.CheckData(('hello', 123)))
if __name__ == '__main__':
unittest.main()