81 lines
3.3 KiB
Python
Executable File
81 lines
3.3 KiB
Python
Executable File
#!/usr/bin/python2
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright 2015 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.
|
|
|
|
"""Unit tests for boolparse_lib methods."""
|
|
|
|
from __future__ import print_function
|
|
|
|
import unittest
|
|
|
|
import boolparse_lib
|
|
|
|
|
|
class ParserTest(unittest.TestCase):
|
|
"""Unittest for boolean expression parser."""
|
|
|
|
def testSingleItem(self):
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A', {}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A', {'A', 'B'}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A', {'B'}))
|
|
|
|
def testAndlogic(self):
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A and B', {}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A and B', {}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A and B', {'A', 'B', 'C'}))
|
|
|
|
def testOrlogic(self):
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A or B', {}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or B', {'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or B', {'A', 'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or B', {'A', 'C'}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A or B', {'C'}))
|
|
|
|
def testNotlogic(self):
|
|
self.assertTrue(boolparse_lib.BoolstrResult('not A', {}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('not A', {'A'}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('not A', {'A', 'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('not A', {'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('not not A', {'A'}))
|
|
|
|
def testComplexBoolExpr(self):
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A and not B', {}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A and not B', {'A'}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A and not B', {'A', 'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('not (A and B)', {'A'}))
|
|
self.assertFalse(
|
|
boolparse_lib.BoolstrResult('not (A and B)', {'A', 'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or not B', {'A'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or not B', {'A', 'B'}))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A or not B', {'B'}))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A or not B', {'C'}))
|
|
|
|
def testInvalidBoolExprInput(self):
|
|
"""Test invalid boolean expression.
|
|
|
|
Test whether captures the exceptions caused by invalid boolean
|
|
expression input. Note that only the lowercase and, or, not are allowed.
|
|
"""
|
|
|
|
with self.assertRaises(boolparse_lib.BoolParseError):
|
|
boolparse_lib.BoolstrResult('', {'A'})
|
|
with self.assertRaises(TypeError):
|
|
boolparse_lib.BoolstrResult(None, {'A'})
|
|
|
|
def testCollectionInput(self):
|
|
"""Test whether handle different types of collection input."""
|
|
self.assertFalse(boolparse_lib.BoolstrResult('A', None))
|
|
self.assertTrue(boolparse_lib.BoolstrResult('A', ['A', 'A']))
|
|
self.assertFalse(boolparse_lib.BoolstrResult('not A', ('A', 'B', 'B')))
|
|
|
|
def testVariousOperand(self):
|
|
"""Test on various operand format."""
|
|
self.assertFalse(
|
|
boolparse_lib.BoolstrResult('A:foo and B:foo', {'A:foo'}))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|