"""test_feature_extractors.py - test pipeline feature extractors""" import unittest import os import pytest import pipeline.feature_extractors as extractors from pipeline.utils import Source, SourceMedia # technically makes this an integration test, but... class TestSource(): """Provide utils.Source for testing""" def one_colour_silent_audio(self): """Provide a source with a silent mono-colour video""" TEST_DIR = os.path.dirname(os.path.realpath(__file__)) SAMPLE_VIDEO = f"{TEST_DIR}/sample_videos/test_video_red_silentaudio.mp4" # silent video definitely has no laughter return Source(source=SAMPLE_VIDEO, path=SAMPLE_VIDEO, provider="test") class TestSourceMedia(): """Provide utils.SourceMedia for testing""" def one_colour_silent_audio(self): """Provide a source with a silent mono-colour video""" return SourceMedia(sources=[TestSource().one_colour_silent_audio()]) class TestLaughterFeatureExtractor(unittest.TestCase): """Test LaughterFeatureExtractor""" def test_init(self): test_extractor = extractors.LaughterFeatureExtractor() self.assertTrue(test_extractor) def test_setup_noinput(self): """test setup - no input files""" test_extractor = extractors.LaughterFeatureExtractor() with self.assertRaises(ValueError): test_extractor.setup() # NB test WITH sources implicitly tested in test_extract class TestRandomFeatureExtractor(unittest.TestCase): """Test RandomFeatureExtractor""" def test_init(self): test_extractor = extractors.RandomFeatureExtractor() self.assertTrue(test_extractor) def test_setup_noinput(self): """test setup - no input files""" test_extractor = extractors.RandomFeatureExtractor() with self.assertRaises(ValueError): test_extractor.setup() # NB test WITH sources implicitly tested in test_extract def test_extract_noinput(self): """Test extract with no input files""" test_extractor = extractors.RandomFeatureExtractor() with self.assertRaises(ValueError): test_extractor.run() def test_extract(self): """Test extract with input files""" video_source = TestSourceMedia().one_colour_silent_audio() test_extractor = extractors.RandomFeatureExtractor(input_files=video_source) test_extractor.setup() test_extractor.run() test_extractor.teardown() self.assertTrue(test_extractor.features) class TestLoudAudioFeatureExtractor(unittest.TestCase): """Test LoudAudioFeatureExtractor""" def test_init(self): video_source = TestSourceMedia().one_colour_silent_audio() test_extractor = extractors.LoudAudioFeatureExtractor(input_files=video_source) self.assertTrue(test_extractor) def test_init_noinput(self): """test init - no input files""" with self.assertRaises(ValueError): test_extractor = extractors.LoudAudioFeatureExtractor() def test_extract(self): """Test extract with input files""" video_source = TestSourceMedia().one_colour_silent_audio() test_extractor = extractors.LoudAudioFeatureExtractor(input_files=video_source) test_extractor.setup() test_extractor.run() test_extractor.teardown() self.assertEqual(test_extractor.features, [])