''' Created on Oct 20, 2016 @author: tmahrt Runs integration tests The examples were all written as scripts. They weren't meant to be imported or run from other code. So here, the integration test is just importing the scripts, which causes them to execute. If the code completes with no errors, then the code is at least able to complete. Testing whether or not the code actually did what it is supposed to is another issue and will require some refactoring. prosody morph requires praat to do the final manipulation. For the integration tests run without access to praat, that last step will be skipped (and unverified) however the test will still pass. ''' import unittest import os from os.path import join import sys from praatio.utilities import utils from promo import duration_morph from promo.morph_utils import utils as morph_utils cwd = os.path.dirname(os.path.realpath(__file__)) _root = os.path.split(cwd)[0] sys.path.append(_root) class IntegrationTests(unittest.TestCase): """Integration tests""" def test_modify_pitch_accent(self): """Running 'modify_pitch_accent_example.py'""" print("\nmodify_pitch_accent_example.py" + "\n" + "-" * 10) try: import modify_pitch_accent_example except utils.FileNotFound: pass def test_duration_manipulation(self): """Running 'duration_manipulation_example.py'""" print("\nduration_manipulation_example.py" + "\n" + "-" * 10) try: import duration_manipulation_example except utils.FileNotFound: pass def test_pitch_morph(self): """Running 'pitch_morph_example.py'""" print("\npitch_morph_example.py" + "\n" + "-" * 10) try: import pitch_morph_example except utils.FileNotFound: pass def test_pitch_morph_to_contour(self): """Running 'pitch_morph_to_pitch_contour.py'""" print("\npitch_morph_to_pitch_contour.py" + "\n" + "-" * 10) try: import pitch_morph_to_pitch_contour except utils.FileNotFound: pass def test_getMorphParameters(self): filterFunc = None includeUnlabeledRegions = False duration_morph.getMorphParameters(self.fromTGFN, self.toTGFN, self.tierName, filterFunc, includeUnlabeledRegions) def test_getManipulatedParameters(self): twentyPercentMore = lambda x: (x * 1.20) filterFunc = None includeUnlabeledRegions = True duration_morph.getManipulatedParamaters(self.fromTGFN, self.tierName, twentyPercentMore, filterFunc, includeUnlabeledRegions) def test_changeDuration(self): filterFunc = None includeUnlabeledRegions = False durationParams = duration_morph.getMorphParameters(self.fromTGFN, self.toTGFN, self.tierName, filterFunc, includeUnlabeledRegions) stepList = morph_utils.generateStepList(3) outputName = "mary1_dur_morph" # praatEXE = r"C:\Praat.exe" # Windows praatEXE = "/Applications/Praat.app/Contents/MacOS/Praat" # Mac try: duration_morph.changeDuration(self.fromWavFN, durationParams, stepList, outputName, outputMinPitch=self.minPitch, outputMaxPitch=self.maxPitch, praatEXE=praatEXE) except utils.FileNotFound: pass def test_textgridMorphDuration(self): duration_morph.textgridMorphDuration(self.fromTGFN, self.toTGFN) def test_textgridManipulateDuration(self): filterFunc = None includeUnlabeledRegions = False durationParams = duration_morph.getMorphParameters(self.fromTGFN, self.toTGFN, self.tierName, filterFunc, includeUnlabeledRegions) duration_morph.outputMorphTextgrids(self.fromTGFN, durationParams, [1, ], join(self.root, "outputName.TextGrid")) def setUp(self): unittest.TestCase.setUp(self) root = os.path.join(_root, "files") self.oldRoot = os.getcwd() os.chdir(_root) self.startingList = os.listdir(root) self.startingDir = os.getcwd() self.root = root self.fromWavFN = join(self.root, "mary1.wav") self.fromTGFN = join(self.root, "mary1.TextGrid") self.toTGFN = join(self.root, "mary2.TextGrid") self.tierName = "words" self.minPitch = 50 self.maxPitch = 350 def tearDown(self): '''Remove any files generated during the test''' #unittest.TestCase.tearDown(self) root = os.path.join(".", "files") endingList = os.listdir(root) endingDir = os.getcwd() rmList = [fn for fn in endingList if fn not in self.startingList] if self.oldRoot == root: for fn in rmList: fnFullPath = os.path.join(root, fn) if os.path.isdir(fnFullPath): os.rmdir(fnFullPath) else: os.remove(fnFullPath) os.chdir(self.oldRoot) if __name__ == '__main__': unittest.main()