#!/usr/bin/env python3 """Tests for phoneme conversion between languages""" import unittest from gruut_ipa import Phonemes from gruut_ipa.accent import guess_phonemes class AccentTestCase(unittest.TestCase): """Test cases for phoneme conversion between languages""" @classmethod def setUpClass(cls): cls.de_phonemes = Phonemes.from_language("de-de") def test_exact(self): """Test exact match""" guessed = guess_phonemes("k", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertEqual(guessed.phonemes[0].text, "k") def test_letters(self): """Test matching letters""" guessed = guess_phonemes("ɐ̯ː", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertEqual(guessed.phonemes[0].text, "ɐ") def test_close_vowel(self): """Test nearby vowel""" guessed = guess_phonemes("ɑ", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) # Placement is more important that height self.assertEqual(guessed.phonemes[0].text, "ɐ") def test_close_consonant(self): """Test nearby consonant""" guessed = guess_phonemes("ð", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) # Should match a nearby voiced consonant self.assertIn(guessed.phonemes[0].text, {"v", "z"}) def test_dipthong_letters_match(self): """Test dipthong (two vowels) with matching letters""" guessed = guess_phonemes("aʊ", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertEqual(guessed.phonemes[0].text, "aʊ̯") def test_dipthong_split(self): """Test dipthong (two vowels) split into two phonemes""" guessed = guess_phonemes("oʊ", self.de_phonemes) self.assertEqual(len(guessed.phonemes), 2) self.assertEqual(guessed.phonemes[0].text, "oː") self.assertEqual(guessed.phonemes[1].text, "ʊ") def test_g(self): """Test ɡ/g mapping""" from gruut_ipa.accent import GS for g in GS: guessed = guess_phonemes(g, self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertIn(guessed.phonemes[0].text, GS) def test_r(self): """Test r-like mapping""" from gruut_ipa.accent import R_LIKE for r in R_LIKE: guessed = guess_phonemes(r, self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertIn(guessed.phonemes[0].text, R_LIKE) def test_schwa(self): """Test schwa mapping""" from gruut_ipa.accent import R_LIKE, SCHWA_PREFERRED from gruut_ipa.constants import SCHWAS for s in SCHWAS: guessed = guess_phonemes(s, self.de_phonemes) self.assertEqual(len(guessed.phonemes), 1) self.assertIn(guessed.phonemes[0].text, SCHWA_PREFERRED + R_LIKE) # ----------------------------------------------------------------------------- if __name__ == "__main__": unittest.main()