
from PyObjCTools.TestSupport import *
from AppKit import *

try:
    unicode
except NameError:
    unicode = str

class TestNSSpeechSynthesizerHelper (NSObject):
    def speechSynthesizer_didFinishSpeaking_(self, ss, b): pass
    def speechSynthesizer_willSpeakWord_ofString_(self, ss, w, s): pass
    def speechSynthesizer_willSpeakPhoneme_(self, ss, i): pass
    def speechSynthesizer_didEncounterErrorAtIndex_ofString_message_(self, ss, i, s, m): pass

class TestNSSpeechSynthesizer (TestCase):
    def testConstants(self):
        self.assertIsInstance(NSVoiceName, unicode)
        self.assertIsInstance(NSVoiceIdentifier, unicode)
        self.assertIsInstance(NSVoiceAge, unicode)
        self.assertIsInstance(NSVoiceGender, unicode)
        self.assertIsInstance(NSVoiceDemoText, unicode)

        self.assertIsInstance(NSVoiceGenderNeuter, unicode)
        self.assertIsInstance(NSVoiceGenderMale, unicode)
        self.assertIsInstance(NSVoiceGenderFemale, unicode)
        self.assertIsInstance(NSVoiceLanguage, unicode)


    @min_os_level("10.5")
    def testConstants10_5(self):
        self.assertEqual(NSSpeechImmediateBoundary,  0)
        self.assertEqual(NSSpeechWordBoundary, 1)
        self.assertEqual(NSSpeechSentenceBoundary, 2)

        self.assertIsInstance(NSVoiceLocaleIdentifier, unicode)
        self.assertIsInstance(NSVoiceSupportedCharacters, unicode)
        self.assertIsInstance(NSVoiceIndividuallySpokenCharacters, unicode)


        self.assertIsInstance( NSSpeechStatusProperty, unicode)
        self.assertIsInstance( NSSpeechErrorsProperty, unicode)
        self.assertIsInstance( NSSpeechInputModeProperty, unicode)
        self.assertIsInstance( NSSpeechCharacterModeProperty, unicode)
        self.assertIsInstance( NSSpeechNumberModeProperty, unicode)
        self.assertIsInstance( NSSpeechRateProperty, unicode)
        self.assertIsInstance( NSSpeechPitchBaseProperty, unicode)
        self.assertIsInstance( NSSpeechPitchModProperty, unicode)
        self.assertIsInstance( NSSpeechVolumeProperty, unicode)
        self.assertIsInstance( NSSpeechSynthesizerInfoProperty, unicode)
        self.assertIsInstance( NSSpeechRecentSyncProperty, unicode)
        self.assertIsInstance( NSSpeechPhonemeSymbolsProperty, unicode)
        self.assertIsInstance( NSSpeechCurrentVoiceProperty, unicode)
        self.assertIsInstance( NSSpeechCommandDelimiterProperty, unicode)
        self.assertIsInstance( NSSpeechResetProperty, unicode)
        self.assertIsInstance( NSSpeechOutputToFileURLProperty, unicode)

        self.assertIsInstance( NSSpeechModeText, unicode)
        self.assertIsInstance( NSSpeechModePhoneme, unicode)

        self.assertIsInstance( NSSpeechModeNormal, unicode)
        self.assertIsInstance( NSSpeechModeLiteral, unicode)

        self.assertIsInstance( NSSpeechStatusOutputBusy, unicode)
        self.assertIsInstance( NSSpeechStatusOutputPaused, unicode)
        self.assertIsInstance( NSSpeechStatusNumberOfCharactersLeft, unicode)
        self.assertIsInstance( NSSpeechStatusPhonemeCode, unicode)

        self.assertIsInstance( NSSpeechErrorCount, unicode)
        self.assertIsInstance( NSSpeechErrorOldestCode, unicode)
        self.assertIsInstance( NSSpeechErrorOldestCharacterOffset, unicode)
        self.assertIsInstance( NSSpeechErrorNewestCode, unicode)
        self.assertIsInstance( NSSpeechErrorNewestCharacterOffset, unicode)

        self.assertIsInstance( NSSpeechSynthesizerInfoIdentifier, unicode)
        self.assertIsInstance( NSSpeechSynthesizerInfoVersion, unicode)

        self.assertIsInstance( NSSpeechPhonemeInfoOpcode, unicode)
        self.assertIsInstance( NSSpeechPhonemeInfoSymbol, unicode)
        self.assertIsInstance( NSSpeechPhonemeInfoExample, unicode)
        self.assertIsInstance( NSSpeechPhonemeInfoHiliteStart, unicode)
        self.assertIsInstance( NSSpeechPhonemeInfoHiliteEnd, unicode)

        self.assertIsInstance( NSSpeechCommandPrefix, unicode)
        self.assertIsInstance( NSSpeechCommandSuffix, unicode)

        self.assertIsInstance( NSSpeechDictionaryLocaleIdentifier, unicode)
        self.assertIsInstance( NSSpeechDictionaryModificationDate, unicode)
        self.assertIsInstance( NSSpeechDictionaryPronunciations, unicode)
        self.assertIsInstance( NSSpeechDictionaryAbbreviations, unicode)
        self.assertIsInstance( NSSpeechDictionaryEntrySpelling, unicode)
        self.assertIsInstance( NSSpeechDictionaryEntryPhonemes, unicode)

    def testMethods(self):
        self.assertResultIsBOOL(NSSpeechSynthesizer.startSpeakingString_)
        self.assertResultIsBOOL(NSSpeechSynthesizer.startSpeakingString_toURL_)
        self.assertResultIsBOOL(NSSpeechSynthesizer.isSpeaking)
        self.assertResultIsBOOL(NSSpeechSynthesizer.setVoice_)
        self.assertResultIsBOOL(NSSpeechSynthesizer.usesFeedbackWindow)
        self.assertArgIsBOOL(NSSpeechSynthesizer.setUsesFeedbackWindow_, 0)
        self.assertResultIsBOOL(NSSpeechSynthesizer.setObject_forProperty_error_)
        self.assertArgIsOut(NSSpeechSynthesizer.setObject_forProperty_error_, 2)
        self.assertArgIsOut(NSSpeechSynthesizer.objectForProperty_error_, 1)
        self.assertResultIsBOOL(NSSpeechSynthesizer.isAnyApplicationSpeaking)

    def testProtocol(self):
        self.assertArgIsBOOL(TestNSSpeechSynthesizerHelper.speechSynthesizer_didFinishSpeaking_, 1)
        self.assertArgHasType(TestNSSpeechSynthesizerHelper.speechSynthesizer_willSpeakWord_ofString_, 1, NSRange.__typestr__)
        self.assertArgHasType(TestNSSpeechSynthesizerHelper.speechSynthesizer_willSpeakPhoneme_, 1, objc._C_SHT)

    @min_os_level('10.5')
    def testProtocol10_5(self):
        self.assertArgHasType(TestNSSpeechSynthesizerHelper.speechSynthesizer_didEncounterErrorAtIndex_ofString_message_, 1, objc._C_NSUInteger)


if __name__ == "__main__":
    main()
