예제 #1
0
파일: name.py 프로젝트: pombredanne/cahoots
    def is_suffix(self, word):
        """Checks to see if the word passed in is a name suffix"""
        if NumberParser in self.config.enabled_modules:
            nump = NumberParser(self.config)
            if nump.is_roman_numeral(word) != (False, 0):
                return True

        word = word.replace('.', '').upper()
        return word in self.suffixes
예제 #2
0
파일: name.py 프로젝트: pombredanne/cahoots
    def is_suffix(self, word):
        """Checks to see if the word passed in is a name suffix"""
        if NumberParser in self.config.enabled_modules:
            nump = NumberParser(self.config)
            if nump.is_roman_numeral(word) != (False, 0):
                return True

        word = word.replace('.', '').upper()
        return word in self.suffixes
예제 #3
0
    def is_suffix(self, word):
        """
        Checks to see if the word passed in is a name suffix

        :param word: word we want to check for being a suffix
        :type word: str
        :return: if this is a suffix or not
        :rtype: bool
        """
        if NumberParser in self.config.enabled_modules:
            nump = NumberParser(self.config)
            if nump.is_roman_numeral(word) != (False, 0):
                return True

        word = word.replace('.', '').upper()
        return word in self.suffixes
예제 #4
0
 def setUp(self):
     self.np = NumberParser(TestConfig)
예제 #5
0
class NumberParserTests(unittest.TestCase):
    """Unit Testing of the NumberParser"""

    np = None

    def setUp(self):
        self.np = NumberParser(TestConfig)

    def tearDown(self):
        self.np = None

    def test_is_float(self):
        self.assertEqual((True, 123.123), self.np.is_float("123.123"))
        self.assertEqual((False, 0), self.np.is_float("abc"))

    def test_is_integer(self):
        self.assertEqual((True, 123), self.np.is_integer("123"))
        self.assertEqual((False, 0), self.np.is_integer("123.123"))
        self.assertEqual((False, 0), self.np.is_integer("abc"))

    def test_is_hex(self):
        self.assertEqual((True, 3735928559), self.np.is_hex("0xDEADBEEF"))
        self.assertEqual((True, 3735928559), self.np.is_hex("#0xDEADBEEF"))
        self.assertEqual((False, 0), self.np.is_hex("123.123"))

    def test_is_binary(self):
        self.assertEqual((True, b'hello'), self.np.is_binary(
            "0110100001100101011011000110110001101111"
        ))
        self.assertEqual((False, 0), self.np.is_binary("1234"))
        self.assertEqual((False, 0), self.np.is_binary("1001"))
        self.assertEqual((False, 0), self.np.is_binary("10011"))
        self.assertEqual((False, 0), self.np.is_binary("100"))

    def test_is_octal(self):
        self.assertEqual((True, 2739128), self.np.is_octal("12345670"))
        self.assertEqual((False, 0), self.np.is_octal("1234567890"))

    def test_is_roman_numeral(self):
        self.assertEqual((True, 2646), self.np.is_roman_numeral("MMDCXLVI"))
        self.assertEqual((True, 4), self.np.is_roman_numeral("IV"))
        self.assertEqual((False, 0), self.np.is_roman_numeral("1234"))
        self.assertEqual(
            (False, 0),
            self.np.is_roman_numeral("I Am Sparticus!")
        )

    def test_is_fraction(self):
        self.assertEqual((True, "1 1/2"), self.np.is_fraction("1 1/2"))
        self.assertEqual((True, "34/68"), self.np.is_fraction("34/68"))
        self.assertEqual((False, 0), self.np.is_fraction("abc123"))
        self.assertEqual((False, 0), self.np.is_fraction("1 1/"))
        self.assertEqual((False, 0), self.np.is_fraction("1 1"))
        self.assertEqual((False, 0), self.np.is_fraction("1/2/4"))

    def test_isWordNumber(self):
        self.assertEqual((True, 1), self.np.is_words("One"))
        self.assertEqual((True, 200), self.np.is_words("Two Hundred"))
        self.assertEqual(
            (True, 4533412),
            self.np.is_words(
                "Four Million Five Hundred and Thirty " +
                "Three Thousand Four Hundred and Twelve"
            )
        )
        self.assertEqual((False, 0), self.np.is_words("foobar"))

    def test_parseWithEmptyDataReturnsNone(self):
        count = 0
        for _ in self.np.parse(''):
            count += 1
        self.assertEqual(count, 0)

    def test_parseWithStrippedDataReturnsNone(self):
        count = 0
        for _ in self.np.parse('-,'):
            count += 1
        self.assertEqual(count, 0)

    def test_parseWithFractionYieldsProperResult(self):
        count = 0
        for result in self.np.parse('1/2'):
            count += 1
            self.assertEqual(result.subtype, 'Fraction')
            self.assertEqual(result.result_value, '1/2')
            self.assertEqual(result.confidence, 94)
        self.assertEqual(count, 1)

    @classmethod
    # pylint: disable=unused-argument
    def mock_returnsFalse(cls, param1):
        return False

    @mock.patch(
        'cahoots.parsers.equation.EquationParser.solve_equation',
        mock_returnsFalse
    )
    def test_parseWithNonSolveableFractionYieldsProperResult(self):
        count = 0
        for result in self.np.parse('1/2'):
            count += 1
            self.assertEqual(result.subtype, 'Fraction')
            self.assertEqual(result.result_value, '1/2')
            self.assertEqual(result.confidence, 54)
        self.assertEqual(count, 1)

    def test_parseWithBinaryYieldsProperResult(self):
        count = 0
        for result in self.np.parse(
                '0110100001100101011011000110110001101111'
        ):
            count += 1
            self.assertEqual(result.subtype, 'Binary')
            self.assertEqual(result.result_value, b'hello')
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithIntegerNumberYieldsProperResult(self):
        count = 0
        for result in self.np.parse('123456789'):
            count += 1
            self.assertEqual(result.subtype, 'Integer')
            self.assertEqual(result.result_value, 123456789)
            self.assertEqual(result.confidence, 75)
        self.assertEqual(count, 1)

    def test_parseWithOctalNumberYieldsProperResult(self):
        count = 0
        for result in self.np.parse('2345'):
            count += 1
            if count == 1:
                self.assertEqual(result.subtype, 'Integer')
                self.assertEqual(result.result_value, 2345)
                self.assertEqual(result.confidence, 75)
            if count == 2:
                self.assertEqual(result.subtype, 'Octal')
                self.assertEqual(result.result_value, 1253)
                self.assertEqual(result.confidence, 25)
        self.assertEqual(count, 2)

    def test_parseWithFloatYieldsProperResult(self):
        count = 0
        for result in self.np.parse('35.75'):
            count += 1
            self.assertEqual(result.subtype, 'Decimal')
            self.assertEqual(result.result_value, 35.75)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithHexYieldsProperResult(self):
        count = 0
        for result in self.np.parse('0xDEADBEEF'):
            count += 1
            self.assertEqual(result.subtype, 'Hexadecimal')
            self.assertEqual(result.result_value, 3735928559)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithRomanNumeralYieldsProperResult(self):
        count = 0
        for result in self.np.parse('MMDCXLVI'):
            count += 1
            self.assertEqual(result.subtype, 'Roman Numeral')
            self.assertEqual(result.result_value, 2646)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithWordsYieldsProperResult(self):
        count = 0
        for result in self.np.parse('Five Thousand'):
            count += 1
            self.assertEqual(result.subtype, 'Word Number')
            self.assertEqual(result.result_value, 5000)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)
예제 #6
0
 def setUp(self):
     self.np = NumberParser(TestConfig)
예제 #7
0
class NumberParserTests(unittest.TestCase):
    """Unit Testing of the NumberParser"""

    np = None

    def setUp(self):
        self.np = NumberParser(TestConfig)

    def tearDown(self):
        self.np = None

    def test_is_float(self):
        self.assertEqual((True, 123.123), self.np.is_float("123.123"))
        self.assertEqual((False, 0), self.np.is_float("abc"))

    def test_is_integer(self):
        self.assertEqual((True, 123), self.np.is_integer("123"))
        self.assertEqual((False, 0), self.np.is_integer("123.123"))
        self.assertEqual((False, 0), self.np.is_integer("abc"))

    def test_is_hex(self):
        self.assertEqual((True, 3735928559), self.np.is_hex("0xDEADBEEF"))
        self.assertEqual((True, 3735928559), self.np.is_hex("#0xDEADBEEF"))
        self.assertEqual((False, 0), self.np.is_hex("123.123"))

    def test_is_binary(self):
        self.assertEqual(
            (True, b'hello'),
            self.np.is_binary("0110100001100101011011000110110001101111"))
        self.assertEqual((False, 0), self.np.is_binary("1234"))
        self.assertEqual((False, 0), self.np.is_binary("1001"))
        self.assertEqual((False, 0), self.np.is_binary("10011"))
        self.assertEqual((False, 0), self.np.is_binary("100"))

    def test_is_octal(self):
        self.assertEqual((True, 2739128), self.np.is_octal("12345670"))
        self.assertEqual((False, 0), self.np.is_octal("1234567890"))

    def test_is_roman_numeral(self):
        self.assertEqual((True, 2646), self.np.is_roman_numeral("MMDCXLVI"))
        self.assertEqual((True, 4), self.np.is_roman_numeral("IV"))
        self.assertEqual((False, 0), self.np.is_roman_numeral("1234"))
        self.assertEqual((False, 0),
                         self.np.is_roman_numeral("I Am Sparticus!"))

    def test_is_fraction(self):
        self.assertEqual((True, "1 1/2"), self.np.is_fraction("1 1/2"))
        self.assertEqual((True, "34/68"), self.np.is_fraction("34/68"))
        self.assertEqual((False, 0), self.np.is_fraction("abc123"))
        self.assertEqual((False, 0), self.np.is_fraction("1 1/"))
        self.assertEqual((False, 0), self.np.is_fraction("1 1"))
        self.assertEqual((False, 0), self.np.is_fraction("1/2/4"))

    def test_isWordNumber(self):
        self.assertEqual((True, 1), self.np.is_words("One"))
        self.assertEqual((True, 200), self.np.is_words("Two Hundred"))
        self.assertEqual(
            (True, 4533412),
            self.np.is_words("Four Million Five Hundred and Thirty " +
                             "Three Thousand Four Hundred and Twelve"))
        self.assertEqual((False, 0), self.np.is_words("foobar"))

    def test_parseWithEmptyDataReturnsNone(self):
        count = 0
        for _ in self.np.parse(''):
            count += 1
        self.assertEqual(count, 0)

    def test_parseWithStrippedDataReturnsNone(self):
        count = 0
        for _ in self.np.parse('-,'):
            count += 1
        self.assertEqual(count, 0)

    def test_parseWithFractionYieldsProperResult(self):
        count = 0
        for result in self.np.parse('1/2'):
            count += 1
            self.assertEqual(result.subtype, 'Fraction')
            self.assertEqual(result.result_value, '1/2')
            self.assertEqual(result.confidence, 94)
        self.assertEqual(count, 1)

    @classmethod
    # pylint: disable=unused-argument
    def mock_returnsFalse(cls, param1):
        return False

    @mock.patch('cahoots.parsers.equation.EquationParser.solve_equation',
                mock_returnsFalse)
    def test_parseWithNonSolveableFractionYieldsProperResult(self):
        count = 0
        for result in self.np.parse('1/2'):
            count += 1
            self.assertEqual(result.subtype, 'Fraction')
            self.assertEqual(result.result_value, '1/2')
            self.assertEqual(result.confidence, 54)
        self.assertEqual(count, 1)

    def test_parseWithBinaryYieldsProperResult(self):
        count = 0
        for result in self.np.parse(
                '0110100001100101011011000110110001101111'):
            count += 1
            self.assertEqual(result.subtype, 'Binary')
            self.assertEqual(result.result_value, b'hello')
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithIntegerNumberYieldsProperResult(self):
        count = 0
        for result in self.np.parse('123456789'):
            count += 1
            self.assertEqual(result.subtype, 'Integer')
            self.assertEqual(result.result_value, 123456789)
            self.assertEqual(result.confidence, 75)
        self.assertEqual(count, 1)

    def test_parseWithOctalNumberYieldsProperResult(self):
        count = 0
        for result in self.np.parse('2345'):
            count += 1
            if count == 1:
                self.assertEqual(result.subtype, 'Integer')
                self.assertEqual(result.result_value, 2345)
                self.assertEqual(result.confidence, 75)
            if count == 2:
                self.assertEqual(result.subtype, 'Octal')
                self.assertEqual(result.result_value, 1253)
                self.assertEqual(result.confidence, 25)
        self.assertEqual(count, 2)

    def test_parseWithFloatYieldsProperResult(self):
        count = 0
        for result in self.np.parse('35.75'):
            count += 1
            self.assertEqual(result.subtype, 'Decimal')
            self.assertEqual(result.result_value, 35.75)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithHexYieldsProperResult(self):
        count = 0
        for result in self.np.parse('0xDEADBEEF'):
            count += 1
            self.assertEqual(result.subtype, 'Hexadecimal')
            self.assertEqual(result.result_value, 3735928559)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithRomanNumeralYieldsProperResult(self):
        count = 0
        for result in self.np.parse('MMDCXLVI'):
            count += 1
            self.assertEqual(result.subtype, 'Roman Numeral')
            self.assertEqual(result.result_value, 2646)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)

    def test_parseWithWordsYieldsProperResult(self):
        count = 0
        for result in self.np.parse('Five Thousand'):
            count += 1
            self.assertEqual(result.subtype, 'Word Number')
            self.assertEqual(result.result_value, 5000)
            self.assertEqual(result.confidence, 100)
        self.assertEqual(count, 1)