def test_normalised_form (self): feature1 = BaseFeature(self.bfm, 'anterior') character1 = DiacriticCharacter(self.bfm, 'a') character1.set_feature_value(feature1, HAS_FEATURE) self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}'.format(BNFM, HAS_FEATURE))) # Adding a feature changes the normalised form. feature2 = BaseFeature(self.bfm, 'dental') character1.set_feature_value(feature2, INAPPLICABLE_FEATURE) self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}{2}'.format(BNFM, HAS_FEATURE, INAPPLICABLE_FEATURE))) # The order of the normalised form feature values is # alphabetical by feature name. feature3 = BaseFeature(self.bfm, 'consonantal') character1.set_feature_value(feature3, NOT_HAS_FEATURE) self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}{2}{3}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE))) # Renaming a feature may change the normalised form. feature1.name = 'vocalic' self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}{2}{3}'.format(BNFM, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE, HAS_FEATURE))) # Changing a feature value changes the normalised form. character1.set_feature_value(feature1, NOT_HAS_FEATURE) self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}{2}{1}'.format(BNFM, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE))) # Removing a feature value changes the normalised form. feature2.delete() self.assertEqual(character1.normalised_form, NormalisedForm( '{0}{1}{1}'.format(BNFM, NOT_HAS_FEATURE)))
def test_base_features (self): self.assertEqual(len(self.bfm.base_features), 0) feature1 = BaseFeature(self.bfm, 'voiced') self.assertEqual(len(self.bfm.base_features), 1) self.assertTrue(feature1 in self.bfm.base_features) feature2 = BaseFeature(self.bfm, 'consonantal') self.assertEqual(len(self.bfm.base_features), 2) self.assertTrue(feature1 in self.bfm.base_features) self.assertTrue(feature2 in self.bfm.base_features) feature2.delete() self.assertEqual(len(self.bfm.base_features), 1) self.assertTrue(feature1 in self.bfm.base_features) feature1.delete() self.assertEqual(len(self.bfm.base_features), 0) feature3 = SuprasegmentalFeature(self.bfm, 'syllabic') self.assertEqual(len(self.bfm.base_features), 0)
def test_delete (self): Feature._cache = {} self.assertEqual(len(Feature._cache), 0) feature = BaseFeature(self.bfm, 'voiced') character = BaseCharacter(self.bfm, 'a') character.set_feature_value(feature, HAS_FEATURE) self.assertEqual(len(Feature._cache), 1) self.assertEqual(character.get_feature_value(feature), HAS_FEATURE) feature.delete() self.assertEqual(len(Feature._cache), 0) self.assertRaises(MismatchedModelsError, character.get_feature_value, feature) feature = BaseFeature(self.bfm, 'voiced') character = SpacingCharacter(self.bfm, 'b') self.assertEqual(len(Feature._cache), 1) feature.delete() self.assertEqual(len(Feature._cache), 0)
def test_normalised_form(self): feature1 = BaseFeature(self.bfm, 'anterior') character1 = DiacriticCharacter(self.bfm, 'a') character1.set_feature_value(feature1, HAS_FEATURE) self.assertEqual(character1.normalised_form, NormalisedForm('{0}{1}'.format(BNFM, HAS_FEATURE))) # Adding a feature changes the normalised form. feature2 = BaseFeature(self.bfm, 'dental') character1.set_feature_value(feature2, INAPPLICABLE_FEATURE) self.assertEqual( character1.normalised_form, NormalisedForm('{0}{1}{2}'.format(BNFM, HAS_FEATURE, INAPPLICABLE_FEATURE))) # The order of the normalised form feature values is # alphabetical by feature name. feature3 = BaseFeature(self.bfm, 'consonantal') character1.set_feature_value(feature3, NOT_HAS_FEATURE) self.assertEqual( character1.normalised_form, NormalisedForm('{0}{1}{2}{3}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE))) # Renaming a feature may change the normalised form. feature1.name = 'vocalic' self.assertEqual( character1.normalised_form, NormalisedForm('{0}{1}{2}{3}'.format(BNFM, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE, HAS_FEATURE))) # Changing a feature value changes the normalised form. character1.set_feature_value(feature1, NOT_HAS_FEATURE) self.assertEqual( character1.normalised_form, NormalisedForm('{0}{1}{2}{1}'.format(BNFM, NOT_HAS_FEATURE, INAPPLICABLE_FEATURE))) # Removing a feature value changes the normalised form. feature2.delete() self.assertEqual( character1.normalised_form, NormalisedForm('{0}{1}{1}'.format(BNFM, NOT_HAS_FEATURE)))
def test_normalised_form (self): feature1 = BaseFeature(self.bfm, 'anterior') character = BaseCharacter(self.bfm, 'n') character.set_feature_value(feature1, HAS_FEATURE) self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}'.format(BNFM, HAS_FEATURE))) # Adding a feature changes the normalised form. feature2 = BaseFeature(self.bfm, 'dental') # For a BaseCharacter, all features must have a value. self.assertRaises(InvalidCharacterError, getattr, character, 'normalised_form') character.set_feature_value(feature2, NOT_HAS_FEATURE) self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}{2}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE))) # The order of the normalised form feature values is # alphabetical by feature name. feature3 = BaseFeature(self.bfm, 'consonantal') character.set_feature_value(feature3, HAS_FEATURE) self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}{1}{2}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE))) # Renaming a feature may change the normalised form. feature3.name = 'vocalic' self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}{2}{1}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE))) # Changing a feature value changes the normalised form. character.set_feature_value(feature1, NOT_HAS_FEATURE) self.assertEqual(character.normalised_form, NormalisedForm( '{0}{2}{2}{1}'.format(BNFM, HAS_FEATURE, NOT_HAS_FEATURE))) # Removing a feature value changes the normalised form. feature3.delete() self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}{1}'.format(BNFM, NOT_HAS_FEATURE))) # Adding a feature of a different type does not change the # normalised form. feature4 = SuprasegmentalFeature(self.bfm, 'syllabic') self.assertEqual(character.normalised_form, NormalisedForm( '{0}{1}{1}'.format(BNFM, NOT_HAS_FEATURE)))