From 5ce3380374200acab21a196282fcb7f1fbb0ba47 Mon Sep 17 00:00:00 2001 From: Phil Date: Tue, 1 Feb 2022 09:55:04 -0800 Subject: [PATCH] e2eTests --- .github/workflows/e2eTest.yml | 26 + environment.yml | 4 +- my_file.txt | 1 + rec_to_binaries/test/e2etests/__init__.py | 1 + rec_to_binaries/test/e2etests/conftest.py | 22 + .../test/e2etests/test_adjust_timestamps.py | 29 + .../test/e2etests/test_binary_utils.py | 99 ++ rec_to_binaries/test/e2etests/test_core.py | 24 + .../test/e2etests/test_create_system_time.py | 9 + ...naryReader_check_if_valid_file_is_read.txt | 4 + ...BinaryReader_test_first_line_exception.txt | 1 + ...der_test_more_than_1000_line_exception.txt | 1426 +++++++++++++++++ .../TrodesLFPBinaryLoader_test_file_read.txt | 14 + ...inaryLoader_check_if_data_file_is_read.txt | 8 + ...TrodesSpikeBinaryLoader_test_file_read.txt | 19 + ...esTimestampBinaryLoader_test_file_read.txt | 10 + .../test/e2etests/test_data/__init__.py | 1 + ...ag_check_if_data_is_written_no_systime.txt | 3 + ...rodesExtractDataFile_not_start_setting.txt | 1 + ...taFile_check_file_is_written_correctly.txt | 3 + .../test/e2etests/test_data/temp_file.txt | 0 .../test/e2etests/test_read_binaries.py | 53 + rec_to_binaries/test/e2etests/test_setup.py | 27 + .../test/e2etests/test_trodes_data.py | 57 + 24 files changed, 1841 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/e2eTest.yml create mode 100644 my_file.txt create mode 100644 rec_to_binaries/test/e2etests/__init__.py create mode 100644 rec_to_binaries/test/e2etests/conftest.py create mode 100644 rec_to_binaries/test/e2etests/test_adjust_timestamps.py create mode 100644 rec_to_binaries/test/e2etests/test_binary_utils.py create mode 100644 rec_to_binaries/test/e2etests/test_core.py create mode 100644 rec_to_binaries/test/e2etests/test_create_system_time.py create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_check_if_valid_file_is_read.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_first_line_exception.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_more_than_1000_line_exception.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesLFPBinaryLoader_test_file_read.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesSpikeBinaryLoader_test_file_read.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/TrodesTimestampBinaryLoader_test_file_read.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/__init__.py create mode 100644 rec_to_binaries/test/e2etests/test_data/fix_timestamp_lag_check_if_data_is_written_no_systime.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/readTrodesExtractDataFile_not_start_setting.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/readTrodesExtractedDataFile_check_file_is_written_correctly.txt create mode 100644 rec_to_binaries/test/e2etests/test_data/temp_file.txt create mode 100644 rec_to_binaries/test/e2etests/test_read_binaries.py create mode 100644 rec_to_binaries/test/e2etests/test_setup.py create mode 100644 rec_to_binaries/test/e2etests/test_trodes_data.py diff --git a/.github/workflows/e2eTest.yml b/.github/workflows/e2eTest.yml new file mode 100644 index 0000000..fb5f73f --- /dev/null +++ b/.github/workflows/e2eTest.yml @@ -0,0 +1,26 @@ +name: Project Tests + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} + strategy: + matrix: + python-version: ["3.6"] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - uses: conda-incubator/setup-miniconda@v2 + with: + miniconda-version: "latest" + activate-environment: rec_to_binaries + environment-file: environment.yml + - run: mkdir -p ~/SpikeGadgets + - run: python -m pytest rec_to_binaries/test/e2etests/ \ No newline at end of file diff --git a/environment.yml b/environment.yml index ff724a9..6a4ec06 100644 --- a/environment.yml +++ b/environment.yml @@ -1,11 +1,12 @@ name: rec_to_binaries channels: - conda-forge +- franklab dependencies: - jupyter - jupyterlab - matplotlib -- pandas +- "pandas = 0.24.0" - numpy - scipy - "python >= 3.6" @@ -14,6 +15,7 @@ dependencies: - pytest - pytest-cov - coveralls +- rec_to_binaries - pip - pip: - mountainlab-pytools diff --git a/my_file.txt b/my_file.txt new file mode 100644 index 0000000..f2ba8f8 --- /dev/null +++ b/my_file.txt @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/__init__.py b/rec_to_binaries/test/e2etests/__init__.py new file mode 100644 index 0000000..143f486 --- /dev/null +++ b/rec_to_binaries/test/e2etests/__init__.py @@ -0,0 +1 @@ +# __init__.py diff --git a/rec_to_binaries/test/e2etests/conftest.py b/rec_to_binaries/test/e2etests/conftest.py new file mode 100644 index 0000000..b406a39 --- /dev/null +++ b/rec_to_binaries/test/e2etests/conftest.py @@ -0,0 +1,22 @@ +import pytest +import os + +CURRENT_DIRECTORY = os.getcwd() + +def _clear_file_content(file_path): + if file_path is None or file_path.strip() == '': + raise FileNotFoundError + with open(file_path, 'r+') as file: + file.truncate(0) + +@pytest.fixture +def e2etests_directory_path(): + return f'{CURRENT_DIRECTORY}/rec_to_binaries/test/e2etests/' + +@pytest.fixture +def current_directory(): + return CURRENT_DIRECTORY + +@pytest.fixture +def clear_file_content(): + return _clear_file_content diff --git a/rec_to_binaries/test/e2etests/test_adjust_timestamps.py b/rec_to_binaries/test/e2etests/test_adjust_timestamps.py new file mode 100644 index 0000000..edf2ff5 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_adjust_timestamps.py @@ -0,0 +1,29 @@ +import pytest +import numpy as np +from rec_to_binaries.adjust_timestamps import ( + fix_timestamp_lag, +) + +@pytest.mark.skip(reason='not implemented') +def test_fix_timestamp_lag_check_if_data_is_written_no_systime(e2etests_directory_path, clear_file_content): +# # arrange +# file_path = f'{e2etests_directory_path}/test_data/fix_timestamp_lag_check_if_data_is_written_no_systime.txt' +# clear_file_content(file_path) +# fake_data = np.array([ +# ('just', 1), +# ('another', 2), +# ('part', 3)], dtype=[('one', 'b1'), ('two', '')) +# file.write(bytes(b'\n')) +# file.write(b'data: ') +# file.write(fake_data) +# file.write(bytes(b'\n')) +# file.write(bytes(b'')) + +# fix_timestamp_lag(file_path) +# # act + +# # assert + pass diff --git a/rec_to_binaries/test/e2etests/test_binary_utils.py b/rec_to_binaries/test/e2etests/test_binary_utils.py new file mode 100644 index 0000000..96f861f --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_binary_utils.py @@ -0,0 +1,99 @@ +import pytest +from rec_to_binaries.binary_utils import ( + TrodesBinaryFormatError, + TrodesBinaryReader, + TrodesLFPBinaryLoader, + TrodesTimestampBinaryLoader, + TrodesSpikeBinaryLoader, + TrodesPosBinaryLoader, + TrodesDIOBinaryLoader, +) + +def test_TrodesBinaryReader_first_line_not_Start_settings_error(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesBinaryReader_test_first_line_exception.txt' + + with pytest.raises(TrodesBinaryFormatError) as ex: + trodes_binary_reader = TrodesBinaryReader(file_path) + + +def test_TrodesBinaryReader_more_than_1000_length_error(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesBinaryReader_test_more_than_1000_line_exception.txt' + + with pytest.raises(TrodesBinaryFormatError): + trodes_binary_reader = TrodesBinaryReader(file_path) + +def test_TrodesBinaryReader_check_if_valid_file_is_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesBinaryReader_check_if_valid_file_is_read.txt' + trodes_binary_reader = TrodesBinaryReader(file_path) + + assert trodes_binary_reader.data_start_byte == 43 + assert trodes_binary_reader.header_params == {'a': '1', 'data': '2'} + +def test_TrodesLFPBinaryLoader_check_if_file_can_be_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesLFPBinaryLoader_test_file_read.txt' + trodes_LFP_binary_loader = TrodesLFPBinaryLoader(file_path) + + assert trodes_LFP_binary_loader.header_params['Original_file'] == 'test_Original_file' + assert trodes_LFP_binary_loader.header_params['Trode_ID'] == 'test_Trode_ID' + assert trodes_LFP_binary_loader.header_params['Trode_channel'] == 'test_Trode_channel' + assert trodes_LFP_binary_loader.header_params['Clock rate'] == 'test_Clock rate' + assert trodes_LFP_binary_loader.header_params['Voltage_scaling'] == 'test_Voltage_scaling' + assert trodes_LFP_binary_loader.header_params['Decimation'] == 'test_Decimation' + assert trodes_LFP_binary_loader.header_params['First_timestamp'] == 'test_First_timestamp' + assert trodes_LFP_binary_loader.header_params['Reference'] == 'test_Reference' + assert trodes_LFP_binary_loader.header_params['Low_pass_filter'] == 'test_Low_pass_filter' + assert trodes_LFP_binary_loader.header_params['Fields'] == 'test_Fields' + +def test_TrodesTimestampBinaryLoader_check_if_file_can_be_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesTimestampBinaryLoader_test_file_read.txt' + trodes_timestamp_binary_loader = TrodesTimestampBinaryLoader(file_path) + + assert trodes_timestamp_binary_loader.header_params['Byte_order'] == 'test_Byte_order' + assert trodes_timestamp_binary_loader.header_params['Original_file'] == 'test_Original_file' + assert trodes_timestamp_binary_loader.header_params['Clock rate'] == 'test_Clock rate' + assert trodes_timestamp_binary_loader.header_params['Decimation'] == 'test_Decimation' + assert trodes_timestamp_binary_loader.header_params['Time_offset'] == 'test_Time_offset' + assert trodes_timestamp_binary_loader.header_params['Fields'] == 'test_Fields' + +def test_TrodesSpikeBinaryLoader_check_if_data_file_is_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesSpikeBinaryLoader_test_file_read.txt' + trodes_spike_binary_loader = TrodesSpikeBinaryLoader(file_path) + + + assert trodes_spike_binary_loader.header_params['Original_file'] == 'test_Original_file' + assert trodes_spike_binary_loader.header_params['nTrode_ID'] == '1' + assert trodes_spike_binary_loader.num_channels == 10 + assert trodes_spike_binary_loader.header_params['Clock rate'] == '3' + assert trodes_spike_binary_loader.header_params['Voltage_scaling'] == 'v' + assert trodes_spike_binary_loader.header_params['Time_offset'] == '4' + assert trodes_spike_binary_loader.header_params['Threshold'] == '5' + assert trodes_spike_binary_loader.header_params['Spike_invert'] == 't' + assert trodes_spike_binary_loader.header_params['Reference'] == '6' + assert trodes_spike_binary_loader.header_params['ReferenceNTrode'] == '7' + assert trodes_spike_binary_loader.header_params['ReferenceChannel'] == '8' + assert trodes_spike_binary_loader.header_params['Filter'] == 't' + assert trodes_spike_binary_loader.header_params['lowPassFilter'] == 'y' + assert trodes_spike_binary_loader.header_params['highPassFilter'] == 'n' + assert trodes_spike_binary_loader.header_params['Fields'] == 'test_field' + assert trodes_spike_binary_loader.spike_rec_size == 804 + +@pytest.mark.skip(reason="I have to figure out why pos_list stays empty") +def test_TrodesPosBinaryLoader_check_if_data_file_is_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt' + trodes_pos_binary_loader = TrodesPosBinaryLoader(file_path) + + breakpoint() + + assert trodes_pos_binary_loader.header_params['threshold'] == 'test_threshold' + assert trodes_pos_binary_loader.header_params['dark'] == 'test_dark' + assert trodes_pos_binary_loader.header_params['clockrate'] == 'test_clockrate' + assert trodes_pos_binary_loader.header_params['field_str'] == 'test_Fields' + assert trodes_pos_binary_loader.rec_size == 12 + assert trodes_pos_binary_loader.unpack_format == 'IHHHH' + +@pytest.mark.skip(reason="I have to figure out why pos_list stays empty") +def test_TrodesDIOBinaryLoader_check_if_data_file_is_read(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt' + trodes_pos_binary_loader = TrodesDIOBinaryLoader(file_path) + + assert True diff --git a/rec_to_binaries/test/e2etests/test_core.py b/rec_to_binaries/test/e2etests/test_core.py new file mode 100644 index 0000000..ef485e1 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_core.py @@ -0,0 +1,24 @@ +import pytest +from rec_to_binaries.core import ( + extract_trodes_rec_file, + convert_binaries_to_hdf5, +) + +@pytest.mark.skip(reason='Got to figure out the many cases') +def extract_trodes_rec_file(): + pass + +@pytest.mark.skip(reason='Got to figure out - type object \'object\' has no attribute \'dtype') +def test_convert_binaries_to_hdf5_rec_file_write_to_file(e2etests_directory_path): + data_dir = e2etests_directory_path + animal = 'test_animal' + convert_binaries_to_hdf5(data_dir, + animal, + out_dir=None, + dates=None, + parallel_instances=1, + convert_dio=False, + convert_lfp=False, + convert_pos=False, + convert_spike=False + ) diff --git a/rec_to_binaries/test/e2etests/test_create_system_time.py b/rec_to_binaries/test/e2etests/test_create_system_time.py new file mode 100644 index 0000000..b0d90e5 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_create_system_time.py @@ -0,0 +1,9 @@ +import pytest + +@pytest.mark.skip(reason='not implemented') +def test_infer_systime(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_create_systime(): + pass diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_check_if_valid_file_is_read.txt b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_check_if_valid_file_is_read.txt new file mode 100644 index 0000000..1202489 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_check_if_valid_file_is_read.txt @@ -0,0 +1,4 @@ + +a:1 +data:2 + diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_first_line_exception.txt b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_first_line_exception.txt new file mode 100644 index 0000000..cbca789 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_first_line_exception.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_more_than_1000_line_exception.txt b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_more_than_1000_line_exception.txt new file mode 100644 index 0000000..50fa9c5 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesBinaryReader_test_more_than_1000_line_exception.txt @@ -0,0 +1,1426 @@ + +a: 2 Bad +a: 2000 Watts +a: 2300 Jackson Street +a: A Brand New Day +a: A Place with No Name +a: Ain\'t No Sunshine +a: Al Capone +a: All Eyez on Me +a: All I Do +a: All in Your Name +a: All the Things You Are +a: Another Part of Me +a: Baby Be Mine +a: Bad +a: Be a Lion +a: Beat It +a: Beautiful Girl +a: Behind the Mask +a: Ben +a: Best of Joy +a: Billie Jean +a: Black or White +a: Blood on the Dance Floor +a: Blue Gangsta +a: Break of Dawn +a: Breaking News +a: Burn This Disco Out +a: Butterflies +a: Call on Me +a: Can\'t Get Outta the Rain +a: Can\'t Let Her Get Away +a: Carousel +a: Centipede +a: Cheater +a: Chicago +a: Childhood +a: Cinderella Stay Awhile +a: Come Together +a: Cry +a: D.S. +a: Dangerous +a: Dapper-Dan +a: Dear Michael +a: Dirty Diana +a: Do the Bartman +a: Do You Know Where Your Children Are +a: Doggin\' Around +a: Don\'t Be Messin\' \'Round +a: Don\'t Let a Woman (Make a Fool Out of You) +a: Don\'t Let It Get You Down +a: Don\'t Matter to Me +a: Don\'t Stand Another Chance +a: Don\'t Stop \'Til You Get Enough +a: Don\'t Walk Away +a: Earth Song +a: Ease on Down the Road +a: Eaten Alive +a: Euphoria +a: Everybody\'s Somebody\'s Fool +a: Fall Again +a: Farewell My Summer Love +a: Fly Away +a: For All Time +a: Free +a: Get It +a: Get on the Floor +a: Ghosts +a: Girl Don\'t Take Your Love from Me +a: Girl You\'re So Together +a: Girlfriend +a: Girls, Girls, Girls, Pt. 2 +a: Give In to Me +a: Goin\' Back to Alabama +a: Gone Too Soon +a: Got the Hots +a: Got to Be There +a: Greatest Show on Earth +a: Happy +a: Heal the World +a: Heartbreaker +a: Heaven Can Wait +a: Here I Am (Come and Take Me) +a: Here to Love You +a: HIStory +a: Hold My Hand +a: Hollywood Tonight +a: Human Nature +a: I Can\'t Help It +a: (I Can\'t Make It) Another Day +a: I Just Can\'t Stop Loving You +a: (I Like) The Way You Love Me +a: I Need You +a: I Wanna Be Where You Are +a: If\'n I Was God +a: I\'ll Come Home to You +a: I\'m in Love Again +a: I\'m So Blue +a: In Our Small Way +a: In the Back +a: In the Closet +a: Invincible +a: Is It Scary +a: It\'s Not Worth It +a: It\'s the Falling in Love +a: Jam +a: Je Ne Veux Pas La Fin De Nous +a: Johnny Raven +a: Just a Little Bit of You +a: Just Friends +a: Just Good Friends +a: Keep the Faith +a: Keep Your Head Up +a: Leave Me Alone +a: Liberian Girl +a: Little Christmas Tree +a: Little Susie +a: Lonely Teardrops +a: Love Is Here and Now You\'re Gone +a: Love Never Felt So Good +a: Love\'s Gone Bad +a: Loving You +a: Low +a: Man in the Mirror +a: Maria (You Were the Only One) +a: Melodie +a: Mind Is the Magic +a: Minute by Minute +a: Money +a: Monkey Business +a: Monster +a: Morning Glow +a: Morphine +a: Much Too Soon +a: Muscles +a: Music and Me +a: My Girl +a: Night Time Lover +a: Off the Wall +a: On the Line +a: One Day in Your Life +a: One More Chance +a: P.Y.T. (Pretty Young Thing) +a: Papa Was a Rollin\' Stone +a: People Make the World Go \'Round +a: Planet Earth +a: Price of Fame +a: Privacy +a: Remember the Time +a: Ride with Me +a: Rock with You +a: Rockin\' Robin +a: Save Me +a: Say Say Say +a: Scared of the Moon +a: Scream +a: She Drives Me Wild +a: She\'s Out of My Life +a: Shoo-Be-Doo-Be-Doo-Da-Day +a: Shout +a: Slave to the Rhythm +a: Smile +a: Smooth Criminal +a: Somebody\'s Watching Me +a: Someone in the Dark +a: Someone Put Your Hand Out +a: Somethin\' Special +a: Song Groove (AKA Abortion Papers) +a: So Why +a: Speechless +a: Speed Demon +a: State of Independence +a: Stranger in Moscow +a: Streetwalker +a: Sunset Driver +a: Superfly Sister +a: Tabloid Junkie +a: Take Me Back +a: Tell Me I\'m Not Dreamin\' (Too Good to Be True) +a: That\'s What Love Is Made Of +a: The Dude +a: The Girl Is Mine +a: The Lady in My Life +a: The Lost Children +a: The Man +a: The Way You Make Me Feel +a: There Must Be More to Life Than This +a: They Don\'t Care About Us +a: This Had to Be +a: This Is It +a: This Time Around +a: Threatened +a: Thriller +a: To Make My Father Proud +a: To Satisfy You +a: Todo Mi Amor Eres Tu +a: Todo Para Ti +a: Too Young +a: Touch the One You Love +a: Turn on the Action +a: Twenty-Five Miles +a: Unbreakable +a: Up Again +a: Wanna Be Startin\' Somethin\' +a: We Are Here to Change the World +a: We Are the World +a: We\'re Almost There +a: We\'ve Got a Good Thing Going +a: We\'ve Got Forever +a: We\'ve Had Enough +a: What Goes Around Comes Around +a: What More Can I Give +a: Whatever Happens +a: Whatzupwitu +a: When I Come of Age +a: Who Is It +a: Who\'s Lookin\' for a Lover +a: Who\'s Right, Who\'s Wrong +a: Why +a: Why You Wanna Trip on Me +a: Will You Be There +a: Wings of My Love +a: With a Child\'s Heart +a: Workin\' Day and Night +a: Xscape +a: Yeah +a: You Are My Life +a: You Are Not Alone +a: You Are There +a: You Can Cry on My Shoulder +a: You Can\'t Win +a: You Rock My World +a: You\'ve Got a Friend +a: You\'ve Really Got a Hold on Me +a: 2-4-6-8 +a: 16 Candles +a: 2300 Jackson Street +a: A Change Is Gonna Come +a: A Fool for You +a: ABC +a: Ain\'t Nothing Like the Real Thing +a: Ain\'t That Peculiar +a: All I Do Is Think of You +a: All Night Dancin\' +a: Alright With Me +a: Art of Madness +a: Ask the Lonely +a: Originating album +a: Baby, You Don\'t Have to Go +a: Be Not Always +a: Big Boy +a: Blame It on the Boogie +a: Bless His Soul +a: Blues Away +a: Body +a: Body Language (Do the Love Dance) +a: The Boogie Man +a: Born to Love You +a: Boys and Girls, We Are The Jackson Five +a: Breezy +a: Bridge over Troubled Water +a: Call of the Wild +a: Can I See You in the Morning +a: Can You Feel It +a: Can You Remember +a: Can\'t Get Ready for Losing You +a: Chained +a: Children of the Light +a: Christmas Won\'t Be the Same This Year +a: (Come \'Round Here) I\'m the One You Need +a: Coming Home +a: Corner of the Sky +a: Dancing Machine +a: Darling Dear +a: Destiny +a: Different Kind of Lady +a: Do What You Wanna +a: Doctor My Eyes +a: Don\'t Know Why I Love You +a: Don\'t Let Your Baby Catch You +a: Don\'t Say Goodbye Again +a: Don\'t Want to See Tomorrow +a: Dreamer +a: E-Ne-Me-Ne-Mi-Ne-Moe (The Choice is Yours to Pull) +a: Enjoy Yourself +a: Even Though You\'re Gone +a: Everybody +a: Everybody Is a Star +a: Get It Together +a: Give It Up +a: Give Love on Christmas Day +a: Goin\' Back to Indiana +a: Goin\' Places +a: Good Times +a: +a: Hallelujah Day +a: Have Yourself a Merry Little Christmas +a: Heartbreak Hotel +a: Heaven Knows I Love You, Girl +a: Honey Chile +a: Honey Love +a: How Funky Is Your Chicken +a: Hum Along and Dance +a: I Ain\'t Gonna Eat My Heart Out Anymore +a: I Am Love +a: I Can Only Give You Love +a: I Can\'t Quit Your Love +a: I Found a Love +a: I Found That Girl +a: I Hear a Symphony +a: (I Know) I\'m Losing You +a: I Like You the Way You Are (Don\'t Change Your Love On Me) +a: I Saw Mommy Kissing Santa Claus +a: I Wanna Be Where You Are +a: I Want to Take You Higher +a: I Want You Back +a: I Was Made to Love Her +a: I Will Find a Way +a: If I Don\'t Love You This Way +a: If I Have to Move a Mountain +a: If You\'d Only Believe +a: I\'ll Be There +a: I\'ll Bet You +a: I\'m Glad It Rained +a: I\'m So Happy +a: It All Begins and Ends With Love +a: It\'s Great to Be Here +a: It\'s Too Late to Change the Time +a: It\'s Your Thing +a: Jam Session +a: Jam Session +a: Jamie +a: Jingle Bells +a: Joyful Jukebox Music +a: Jump for Joy +a: Just a Little Misunderstanding +a: Just Because I Love You +a: Keep Her +a: Keep on Dancing +a: Santa Claus Is Coming to Town +a: Saturday Night at the Movies +a: Shake Your Body (Down to the Ground) +a: She +a: She\'s a Rhythm Child +a: She\'s Good +a: Show You the Way to Go +a: Skywriter +a: Some Girls Want Me for Their Lover +a: Someday at Christmas +a: Soul Jerk +a: Stand! +a: Standing in the Shadows of Love +a: State of Shock +a: Stormy Monday +a: Strength of One Man +a: Style of Life +a: Sugar Daddy +a: Superstition +a: Teenage Symphony +a: That\'s What You Get (for Being Polite) +a: The Christmas Song +a: The Day Basketball Was Saved +a: The Eternal Light +a: The Hurt +a: The Life of the Party +a: The Little Drummer Boy +a: The Love I Saw in You Was Just a Mirage +a: The Love You Save +a: The Mirrors of My Mind +a: The Tracks of My Tears +a: The Wall +a: The Young Folks +a: Things I Do for You +a: Think Happy +a: Time Explosion +a: Time Out for the Burglar +a: Time Waits for No One +a: To Know +a: Torture +a: Touch +a: True Love Can Be Beautiful +a: Wait +a: Walk Right Now +a: We Can Change the World +a: We Can Have Fun +a: We Don\'t Have To Be Over 21 (to Fall in Love) +a: We Wish You a Merry Christmas +a: We\'re Gonna Change Our Style +a: We\'re Gonna Have a Good Time +a: We\'re Here to Entertain You +a: (We\'ve Got) Blue Skies +a: What You Don\'t Know +a: Whatever You Got, I Want +a: When I Look at You +a: Who\'s Lovin\' You +a: Window Shopping +a: Wondering Who +a: World of Sunshine +a: A Place in the Sun +a: After the Storm (The Sun Will Shine) +a: Ain\'t No Mountain High Enough +a: Ain\'t Too Proud to Beg +a: Ave Maria +a: Baby I Need Your Loving +a: Back in My Arms Again +a: Be My Girl +a: Blowin\' in the Wind +a: Can I Get a Witness +a: Children\'s Christmas Song +a: Christmas Everyday +a: Come and Get It +a: Do You Love Me +a: Fingertips +a: For Once in My Life +a: God Rest Ye Merry Gentlemen +a: Guess Who\'s Making Whoopee With Your Girlfriend +a: Heaven Help Us All +a: He\'s My Sunny Boy +a: How Sweet It Is (To Be Loved by You) +a: I Can\'t Help Myself (Sugar Pie Honey Bunch) +a: I Got a Feeling +a: I Got the Feelin\' +a: I Heard It Through the Grapevine +a: I Want You To Come Home For Christmas +a: (If I Can\'t) Nobody Can +a: If You Really Love Me +a: If You Want Heaven +a: I\'ll Turn To Stone +a: It\'s Christmas Time +a: It\'s the Same Old Song +a: I\'ve Gotta Be Me +a: Jackson Man +a: Joy to the World +a: Keep off the Grass +a: Kentucky Road +a: Lavender Blue +a: (Loneliness Made Me Realize) It\'s You That I Need +a: Love Call +a: Love Feels Like Fire +a: Love Go Away +a: Loving You Is Sweeter Than Ever +a: Miss Lucky Day +a: My Favorite Things +a: Neither One of Us (Wants to Be the First to Say Goodbye) +a: No News Is Good News +a: Nona +a: Ooh Baby Baby +a: Power +a: Purple Snowflakes +a: Quicksand +a: Sad Souvenirs +a: Shake Me, Wake Me (When It\'s Over) +a: She Say \'Want\' +a: Signed, Sealed, Delivered I\'m Yours +a: Silent Night +a: Silver Bells +a: Since I Lost My Baby +a: Since You\'ve Been Gone +a: Slipped Away +a: Still In Love With You +a: Take My Heart +a: That Girl +a: That\'s How Love Is +a: That\'s What Christmas Means to Me +a: To Sir, with Love +a: Twinkle, Twinkle Little Me +a: Uptight (Everything\'s Alright) +a: What Does It Take (To Win Your Love) +a: Where Did Our Love Go +a: Where Do I Stand +a: White Christmas +a: Would Ya? Would Ya? +a: Yester-Me, Yester-You, Yesterday +a: You Can\'t Hurry Love +a: You\'re My Everything +a: You\'re the Only One +a: 2 Bad +a: 2000 Watts +a: 2300 Jackson Street +a: A Brand New Day +a: A Place with No Name +a: Ain\'t No Sunshine +a: Al Capone +a: All Eyez on Me +a: All I Do +a: All in Your Name +a: All the Things You Are +a: Another Part of Me +a: Baby Be Mine +a: Bad +a: Be a Lion +a: Beat It +a: Beautiful Girl +a: Behind the Mask +a: Ben +a: Best of Joy +a: Billie Jean +a: Black or White +a: Blood on the Dance Floor +a: Blue Gangsta +a: Break of Dawn +a: Breaking News +a: Burn This Disco Out +a: Butterflies +a: Call on Me +a: Can\'t Get Outta the Rain +a: Can\'t Let Her Get Away +a: Carousel +a: Centipede +a: Cheater +a: Chicago +a: Childhood +a: Cinderella Stay Awhile +a: Come Together +a: Cry +a: D.S. +a: Dangerous +a: Dapper-Dan +a: Dear Michael +a: Dirty Diana +a: Do the Bartman +a: Do You Know Where Your Children Are +a: Doggin\' Around +a: Don\'t Be Messin\' \'Round +a: Don\'t Let a Woman (Make a Fool Out of You) +a: Don\'t Let It Get You Down +a: Don\'t Matter to Me +a: Don\'t Stand Another Chance +a: Don\'t Stop \'Til You Get Enough +a: Don\'t Walk Away +a: Earth Song +a: Ease on Down the Road +a: Eaten Alive +a: Euphoria +a: Everybody\'s Somebody\'s Fool +a: Fall Again +a: Farewell My Summer Love +a: Fly Away +a: For All Time +a: Free +a: Get It +a: Get on the Floor +a: Ghosts +a: Girl Don\'t Take Your Love from Me +a: Girl You\'re So Together +a: Girlfriend +a: Girls, Girls, Girls, Pt. 2 +a: Give In to Me +a: Goin\' Back to Alabama +a: Gone Too Soon +a: Got the Hots +a: Got to Be There +a: Greatest Show on Earth +a: Happy +a: Heal the World +a: Heartbreaker +a: Heaven Can Wait +a: Here I Am (Come and Take Me) +a: Here to Love You +a: HIStory +a: Hold My Hand +a: Hollywood Tonight +a: Human Nature +a: I Can\'t Help It +a: (I Can\'t Make It) Another Day +a: I Just Can\'t Stop Loving You +a: (I Like) The Way You Love Me +a: I Need You +a: I Wanna Be Where You Are +a: If\'n I Was God +a: I\'ll Come Home to You +a: I\'m in Love Again +a: I\'m So Blue +a: In Our Small Way +a: In the Back +a: In the Closet +a: Invincible +a: Is It Scary +a: It\'s Not Worth It +a: It\'s the Falling in Love +a: Jam +a: Je Ne Veux Pas La Fin De Nous +a: Johnny Raven +a: Just a Little Bit of You +a: Just Friends +a: Just Good Friends +a: Keep the Faith +a: Keep Your Head Up +a: Leave Me Alone +a: Liberian Girl +a: Little Christmas Tree +a: Little Susie +a: Lonely Teardrops +a: Love Is Here and Now You\'re Gone +a: Love Never Felt So Good +a: Love\'s Gone Bad +a: Loving You +a: Low +a: Man in the Mirror +a: Maria (You Were the Only One) +a: Melodie +a: Mind Is the Magic +a: Minute by Minute +a: Money +a: Monkey Business +a: Monster +a: Morning Glow +a: Morphine +a: Much Too Soon +a: Muscles +a: Music and Me +a: My Girl +a: Night Time Lover +a: Off the Wall +a: On the Line +a: One Day in Your Life +a: One More Chance +a: P.Y.T. (Pretty Young Thing) +a: Papa Was a Rollin\' Stone +a: People Make the World Go \'Round +a: Planet Earth +a: Price of Fame +a: Privacy +a: Remember the Time +a: Ride with Me +a: Rock with You +a: Rockin\' Robin +a: Save Me +a: Say Say Say +a: Scared of the Moon +a: Scream +a: She Drives Me Wild +a: She\'s Out of My Life +a: Shoo-Be-Doo-Be-Doo-Da-Day +a: Shout +a: Slave to the Rhythm +a: Smile +a: Smooth Criminal +a: Somebody\'s Watching Me +a: Someone in the Dark +a: Someone Put Your Hand Out +a: Somethin\' Special +a: Song Groove (AKA Abortion Papers) +a: So Why +a: Speechless +a: Speed Demon +a: State of Independence +a: Stranger in Moscow +a: Streetwalker +a: Sunset Driver +a: Superfly Sister +a: Tabloid Junkie +a: Take Me Back +a: Tell Me I\'m Not Dreamin\' (Too Good to Be True) +a: That\'s What Love Is Made Of +a: The Dude +a: The Girl Is Mine +a: The Lady in My Life +a: The Lost Children +a: The Man +a: The Way You Make Me Feel +a: There Must Be More to Life Than This +a: They Don\'t Care About Us +a: This Had to Be +a: This Is It +a: This Time Around +a: Threatened +a: Thriller +a: To Make My Father Proud +a: To Satisfy You +a: Todo Mi Amor Eres Tu +a: Todo Para Ti +a: Too Young +a: Touch the One You Love +a: Turn on the Action +a: Twenty-Five Miles +a: Unbreakable +a: Up Again +a: Wanna Be Startin\' Somethin\' +a: We Are Here to Change the World +a: We Are the World +a: We\'re Almost There +a: We\'ve Got a Good Thing Going +a: We\'ve Got Forever +a: We\'ve Had Enough +a: What Goes Around Comes Around +a: What More Can I Give +a: Whatever Happens +a: Whatzupwitu +a: When I Come of Age +a: Who Is It +a: Who\'s Lookin\' for a Lover +a: Who\'s Right, Who\'s Wrong +a: Why +a: Why You Wanna Trip on Me +a: Will You Be There +a: Wings of My Love +a: With a Child\'s Heart +a: Workin\' Day and Night +a: Xscape +a: Yeah +a: You Are My Life +a: You Are Not Alone +a: You Are There +a: You Can Cry on My Shoulder +a: You Can\'t Win +a: You Rock My World +a: You\'ve Got a Friend +a: You\'ve Really Got a Hold on Me +a: 2-4-6-8 +a: 16 Candles +a: 2300 Jackson Street +a: A Change Is Gonna Come +a: A Fool for You +a: ABC +a: Ain\'t Nothing Like the Real Thing +a: Ain\'t That Peculiar +a: All I Do Is Think of You +a: All Night Dancin\' +a: Alright With Me +a: Art of Madness +a: Ask the Lonely +a: Originating album +a: Baby, You Don\'t Have to Go +a: Be Not Always +a: Big Boy +a: Blame It on the Boogie +a: Bless His Soul +a: Blues Away +a: Body +a: Body Language (Do the Love Dance) +a: The Boogie Man +a: Born to Love You +a: Boys and Girls, We Are The Jackson Five +a: Breezy +a: Bridge over Troubled Water +a: Call of the Wild +a: Can I See You in the Morning +a: Can You Feel It +a: Can You Remember +a: Can\'t Get Ready for Losing You +a: Chained +a: Children of the Light +a: Christmas Won\'t Be the Same This Year +a: (Come \'Round Here) I\'m the One You Need +a: Coming Home +a: Corner of the Sky +a: Dancing Machine +a: Darling Dear +a: Destiny +a: Different Kind of Lady +a: Do What You Wanna +a: Doctor My Eyes +a: Don\'t Know Why I Love You +a: Don\'t Let Your Baby Catch You +a: Don\'t Say Goodbye Again +a: Don\'t Want to See Tomorrow +a: Dreamer +a: E-Ne-Me-Ne-Mi-Ne-Moe (The Choice is Yours to Pull) +a: Enjoy Yourself +a: Even Though You\'re Gone +a: Everybody +a: Everybody Is a Star +a: Get It Together +a: Give It Up +a: Give Love on Christmas Day +a: Goin\' Back to Indiana +a: Goin\' Places +a: Good Times +a: +a: Hallelujah Day +a: Have Yourself a Merry Little Christmas +a: Heartbreak Hotel +a: Heaven Knows I Love You, Girl +a: Honey Chile +a: Honey Love +a: How Funky Is Your Chicken +a: Hum Along and Dance +a: I Ain\'t Gonna Eat My Heart Out Anymore +a: I Am Love +a: I Can Only Give You Love +a: I Can\'t Quit Your Love +a: I Found a Love +a: I Found That Girl +a: I Hear a Symphony +a: (I Know) I\'m Losing You +a: I Like You the Way You Are (Don\'t Change Your Love On Me) +a: I Saw Mommy Kissing Santa Claus +a: I Wanna Be Where You Are +a: I Want to Take You Higher +a: I Want You Back +a: I Was Made to Love Her +a: I Will Find a Way +a: If I Don\'t Love You This Way +a: If I Have to Move a Mountain +a: If You\'d Only Believe +a: I\'ll Be There +a: I\'ll Bet You +a: I\'m Glad It Rained +a: I\'m So Happy +a: It All Begins and Ends With Love +a: It\'s Great to Be Here +a: It\'s Too Late to Change the Time +a: It\'s Your Thing +a: Jam Session +a: Jam Session +a: Jamie +a: Jingle Bells +a: Joyful Jukebox Music +a: Jump for Joy +a: Just a Little Misunderstanding +a: Just Because I Love You +a: Keep Her +a: Keep on Dancing +a: Santa Claus Is Coming to Town +a: Saturday Night at the Movies +a: Shake Your Body (Down to the Ground) +a: She +a: She\'s a Rhythm Child +a: She\'s Good +a: Show You the Way to Go +a: Skywriter +a: Some Girls Want Me for Their Lover +a: Someday at Christmas +a: Soul Jerk +a: Stand! +a: Standing in the Shadows of Love +a: State of Shock +a: Stormy Monday +a: Strength of One Man +a: Style of Life +a: Sugar Daddy +a: Superstition +a: Teenage Symphony +a: That\'s What You Get (for Being Polite) +a: The Christmas Song +a: The Day Basketball Was Saved +a: The Eternal Light +a: The Hurt +a: The Life of the Party +a: The Little Drummer Boy +a: The Love I Saw in You Was Just a Mirage +a: The Love You Save +a: The Mirrors of My Mind +a: The Tracks of My Tears +a: The Wall +a: The Young Folks +a: Things I Do for You +a: Think Happy +a: Time Explosion +a: Time Out for the Burglar +a: Time Waits for No One +a: To Know +a: Torture +a: Touch +a: True Love Can Be Beautiful +a: Wait +a: Walk Right Now +a: We Can Change the World +a: We Can Have Fun +a: We Don\'t Have To Be Over 21 (to Fall in Love) +a: We Wish You a Merry Christmas +a: We\'re Gonna Change Our Style +a: We\'re Gonna Have a Good Time +a: We\'re Here to Entertain You +a: (We\'ve Got) Blue Skies +a: What You Don\'t Know +a: Whatever You Got, I Want +a: When I Look at You +a: Who\'s Lovin\' You +a: Window Shopping +a: Wondering Who +a: World of Sunshine +a: A Place in the Sun +a: After the Storm (The Sun Will Shine) +a: Ain\'t No Mountain High Enough +a: Ain\'t Too Proud to Beg +a: Ave Maria +a: Baby I Need Your Loving +a: Back in My Arms Again +a: Be My Girl +a: Blowin\' in the Wind +a: Can I Get a Witness +a: Children\'s Christmas Song +a: Christmas Everyday +a: Come and Get It +a: Do You Love Me +a: Fingertips +a: For Once in My Life +a: God Rest Ye Merry Gentlemen +a: Guess Who\'s Making Whoopee With Your Girlfriend +a: Heaven Help Us All +a: He\'s My Sunny Boy +a: How Sweet It Is (To Be Loved by You) +a: I Can\'t Help Myself (Sugar Pie Honey Bunch) +a: I Got a Feeling +a: I Got the Feelin\' +a: I Heard It Through the Grapevine +a: I Want You To Come Home For Christmas +a: (If I Can\'t) Nobody Can +a: If You Really Love Me +a: If You Want Heaven +a: I\'ll Turn To Stone +a: It\'s Christmas Time +a: It\'s the Same Old Song +a: I\'ve Gotta Be Me +a: Jackson Man +a: Joy to the World +a: Keep off the Grass +a: Kentucky Road +a: Lavender Blue +a: (Loneliness Made Me Realize) It\'s You That I Need +a: Love Call +a: Love Feels Like Fire +a: Love Go Away +a: Loving You Is Sweeter Than Ever +a: Miss Lucky Day +a: My Favorite Things +a: Neither One of Us (Wants to Be the First to Say Goodbye) +a: No News Is Good News +a: Nona +a: Ooh Baby Baby +a: Power +a: Purple Snowflakes +a: Quicksand +a: Sad Souvenirs +a: Shake Me, Wake Me (When It\'s Over) +a: She Say \'Want\' +a: Signed, Sealed, Delivered I\'m Yours +a: Silent Night +a: Silver Bells +a: Since I Lost My Baby +a: Since You\'ve Been Gone +a: Slipped Away +a: Still In Love With You +a: Take My Heart +a: That Girl +a: That\'s How Love Is +a: That\'s What Christmas Means to Me +a: To Sir, with Love +a: Twinkle, Twinkle Little Me +a: Uptight (Everything\'s Alright) +a: What Does It Take (To Win Your Love) +a: Where Did Our Love Go +a: Where Do I Stand +a: White Christmas +a: Would Ya? Would Ya? +a: Yester-Me, Yester-You, Yesterday +a: You Can\'t Hurry Love +a: You\'re My Everything +a: You\'re the Only One +a: 2 Bad +a: 2000 Watts +a: 2300 Jackson Street +a: A Brand New Day +a: A Place with No Name +a: Ain\'t No Sunshine +a: Al Capone +a: All Eyez on Me +a: All I Do +a: All in Your Name +a: All the Things You Are +a: Another Part of Me +a: Baby Be Mine +a: Bad +a: Be a Lion +a: Beat It +a: Beautiful Girl +a: Behind the Mask +a: Ben +a: Best of Joy +a: Billie Jean +a: Black or White +a: Blood on the Dance Floor +a: Blue Gangsta +a: Break of Dawn +a: Breaking News +a: Burn This Disco Out +a: Butterflies +a: Call on Me +a: Can\'t Get Outta the Rain +a: Can\'t Let Her Get Away +a: Carousel +a: Centipede +a: Cheater +a: Chicago +a: Childhood +a: Cinderella Stay Awhile +a: Come Together +a: Cry +a: D.S. +a: Dangerous +a: Dapper-Dan +a: Dear Michael +a: Dirty Diana +a: Do the Bartman +a: Do You Know Where Your Children Are +a: Doggin\' Around +a: Don\'t Be Messin\' \'Round +a: Don\'t Let a Woman (Make a Fool Out of You) +a: Don\'t Let It Get You Down +a: Don\'t Matter to Me +a: Don\'t Stand Another Chance +a: Don\'t Stop \'Til You Get Enough +a: Don\'t Walk Away +a: Earth Song +a: Ease on Down the Road +a: Eaten Alive +a: Euphoria +a: Everybody\'s Somebody\'s Fool +a: Fall Again +a: Farewell My Summer Love +a: Fly Away +a: For All Time +a: Free +a: Get It +a: Get on the Floor +a: Ghosts +a: Girl Don\'t Take Your Love from Me +a: Girl You\'re So Together +a: Girlfriend +a: Girls, Girls, Girls, Pt. 2 +a: Give In to Me +a: Goin\' Back to Alabama +a: Gone Too Soon +a: Got the Hots +a: Got to Be There +a: Greatest Show on Earth +a: Happy +a: Heal the World +a: Heartbreaker +a: Heaven Can Wait +a: Here I Am (Come and Take Me) +a: Here to Love You +a: HIStory +a: Hold My Hand +a: Hollywood Tonight +a: Human Nature +a: I Can\'t Help It +a: (I Can\'t Make It) Another Day +a: I Just Can\'t Stop Loving You +a: (I Like) The Way You Love Me +a: I Need You +a: I Wanna Be Where You Are +a: If\'n I Was God +a: I\'ll Come Home to You +a: I\'m in Love Again +a: I\'m So Blue +a: In Our Small Way +a: In the Back +a: In the Closet +a: Invincible +a: Is It Scary +a: It\'s Not Worth It +a: It\'s the Falling in Love +a: Jam +a: Je Ne Veux Pas La Fin De Nous +a: Johnny Raven +a: Just a Little Bit of You +a: Just Friends +a: Just Good Friends +a: Keep the Faith +a: Keep Your Head Up +a: Leave Me Alone +a: Liberian Girl +a: Little Christmas Tree +a: Little Susie +a: Lonely Teardrops +a: Love Is Here and Now You\'re Gone +a: Love Never Felt So Good +a: Love\'s Gone Bad +a: Loving You +a: Low +a: Man in the Mirror +a: Maria (You Were the Only One) +a: Melodie +a: Mind Is the Magic +a: Minute by Minute +a: Money +a: Monkey Business +a: Monster +a: Morning Glow +a: Morphine +a: Much Too Soon +a: Muscles +a: Music and Me +a: My Girl +a: Night Time Lover +a: Off the Wall +a: On the Line +a: One Day in Your Life +a: One More Chance +a: P.Y.T. (Pretty Young Thing) +a: Papa Was a Rollin\' Stone +a: People Make the World Go \'Round +a: Planet Earth +a: Price of Fame +a: Privacy +a: Remember the Time +a: Ride with Me +a: Rock with You +a: Rockin\' Robin +a: Save Me +a: Say Say Say +a: Scared of the Moon +a: Scream +a: She Drives Me Wild +a: She\'s Out of My Life +a: Shoo-Be-Doo-Be-Doo-Da-Day +a: Shout +a: Slave to the Rhythm +a: Smile +a: Smooth Criminal +a: Somebody\'s Watching Me +a: Someone in the Dark +a: Someone Put Your Hand Out +a: Somethin\' Special +a: Song Groove (AKA Abortion Papers) +a: So Why +a: Speechless +a: Speed Demon +a: State of Independence +a: Stranger in Moscow +a: Streetwalker +a: Sunset Driver +a: Superfly Sister +a: Tabloid Junkie +a: Take Me Back +a: Tell Me I\'m Not Dreamin\' (Too Good to Be True) +a: That\'s What Love Is Made Of +a: The Dude +a: The Girl Is Mine +a: The Lady in My Life +a: The Lost Children +a: The Man +a: The Way You Make Me Feel +a: There Must Be More to Life Than This +a: They Don\'t Care About Us +a: This Had to Be +a: This Is It +a: This Time Around +a: Threatened +a: Thriller +a: To Make My Father Proud +a: To Satisfy You +a: Todo Mi Amor Eres Tu +a: Todo Para Ti +a: Too Young +a: Touch the One You Love +a: Turn on the Action +a: Twenty-Five Miles +a: Unbreakable +a: Up Again +a: Wanna Be Startin\' Somethin\' +a: We Are Here to Change the World +a: We Are the World +a: We\'re Almost There +a: We\'ve Got a Good Thing Going +a: We\'ve Got Forever +a: We\'ve Had Enough +a: What Goes Around Comes Around +a: What More Can I Give +a: Whatever Happens +a: Whatzupwitu +a: When I Come of Age +a: Who Is It +a: Who\'s Lookin\' for a Lover +a: Who\'s Right, Who\'s Wrong +a: Why +a: Why You Wanna Trip on Me +a: Will You Be There +a: Wings of My Love +a: With a Child\'s Heart +a: Workin\' Day and Night +a: Xscape +a: Yeah +a: You Are My Life +a: You Are Not Alone +a: You Are There +a: You Can Cry on My Shoulder +a: You Can\'t Win +a: You Rock My World +a: You\'ve Got a Friend +a: You\'ve Really Got a Hold on Me +a: 2-4-6-8 +a: 16 Candles +a: 2300 Jackson Street +a: A Change Is Gonna Come +a: A Fool for You +a: ABC +a: Ain\'t Nothing Like the Real Thing +a: Ain\'t That Peculiar +a: All I Do Is Think of You +a: All Night Dancin\' +a: Alright With Me +a: Art of Madness +a: Ask the Lonely +a: Originating album +a: Baby, You Don\'t Have to Go +a: Be Not Always +a: Big Boy +a: Blame It on the Boogie +a: Bless His Soul +a: Blues Away +a: Body +a: Body Language (Do the Love Dance) +a: The Boogie Man +a: Born to Love You +a: Boys and Girls, We Are The Jackson Five +a: Breezy +a: Bridge over Troubled Water +a: Call of the Wild +a: Can I See You in the Morning +a: Can You Feel It +a: Can You Remember +a: Can\'t Get Ready for Losing You +a: Chained +a: Children of the Light +a: Christmas Won\'t Be the Same This Year +a: (Come \'Round Here) I\'m the One You Need +a: Coming Home +a: Corner of the Sky +a: Dancing Machine +a: Darling Dear +a: Destiny +a: Different Kind of Lady +a: Do What You Wanna +a: Doctor My Eyes +a: Don\'t Know Why I Love You +a: Don\'t Let Your Baby Catch You +a: Don\'t Say Goodbye Again +a: Don\'t Want to See Tomorrow +a: Dreamer +a: E-Ne-Me-Ne-Mi-Ne-Moe (The Choice is Yours to Pull) +a: Enjoy Yourself +a: Even Though You\'re Gone +a: Everybody +a: Everybody Is a Star +a: Get It Together +a: Give It Up +a: Give Love on Christmas Day +a: Goin\' Back to Indiana +a: Goin\' Places +a: Good Times +a: Hallelujah Day +a: Have Yourself a Merry Little Christmas +a: Heartbreak Hotel +a: Heaven Knows I Love You, Girl +a: Honey Chile +a: Honey Love +a: How Funky Is Your Chicken +a: Hum Along and Dance +a: I Ain\'t Gonna Eat My Heart Out Anymore +a: I Am Love +a: I Can Only Give You Love +a: I Can\'t Quit Your Love +a: I Found a Love +a: I Found That Girl +a: I Hear a Symphony +a: (I Know) I\'m Losing You +a: I Like You the Way You Are (Don\'t Change Your Love On Me) +a: I Saw Mommy Kissing Santa Claus +a: I Wanna Be Where You Are +a: I Want to Take You Higher +a: I Want You Back +a: I Was Made to Love Her +a: I Will Find a Way +a: If I Don\'t Love You This Way +a: If I Have to Move a Mountain +a: If You\'d Only Believe +a: I\'ll Be There +a: I\'ll Bet You +a: I\'m Glad It Rained +a: I\'m So Happy +a: It All Begins and Ends With Love +a: It\'s Great to Be Here +a: It\'s Too Late to Change the Time +a: It\'s Your Thing +a: Jam Session +a: Jam Session +a: Jamie +a: Jingle Bells +a: Joyful Jukebox Music +a: Jump for Joy +a: Just a Little Misunderstanding +a: Just Because I Love You +a: Keep Her +a: Keep on Dancing +a: Santa Claus Is Coming to Town +a: Saturday Night at the Movies +a: Shake Your Body (Down to the Ground) +a: She +a: She\'s a Rhythm Child +a: She\'s Good +a: Show You the Way to Go +a: Skywriter +a: Some Girls Want Me for Their Lover +a: Someday at Christmas +a: Soul Jerk +a: Stand! +a: Standing in the Shadows of Love +a: State of Shock +a: Stormy Monday +a: Strength of One Man +a: Style of Life +a: Sugar Daddy +a: Superstition +a: Teenage Symphony +a: That\'s What You Get (for Being Polite) +a: The Christmas Song +a: The Day Basketball Was Saved +a: The Eternal Light +a: The Hurt +a: The Life of the Party +a: The Little Drummer Boy +a: The Love I Saw in You Was Just a Mirage +a: The Love You Save +a: The Mirrors of My Mind +a: The Tracks of My Tears +a: The Wall +a: The Young Folks +a: Things I Do for You +a: Think Happy +a: Time Explosion +a: Time Out for the Burglar +a: Time Waits for No One +a: To Know +a: Torture +a: Touch +a: True Love Can Be Beautiful +a: Wait +a: Walk Right Now +a: We Can Change the World +a: We Can Have Fun +a: We Don\'t Have To Be Over 21 (to Fall in Love) +a: We Wish You a Merry Christmas +a: We\'re Gonna Change Our Style +a: We\'re Gonna Have a Good Time +a: We\'re Here to Entertain You +a: (We\'ve Got) Blue Skies +a: What You Don\'t Know +a: Whatever You Got, I Want +a: When I Look at You +a: Who\'s Lovin\' You +a: Window Shopping +a: Wondering Who +a: World of Sunshine +a: A Place in the Sun +a: After the Storm (The Sun Will Shine) +a: Ain\'t No Mountain High Enough +a: Ain\'t Too Proud to Beg +a: Ave Maria +a: Baby I Need Your Loving +a: Back in My Arms Again +a: Be My Girl +a: Blowin\' in the Wind +a: Can I Get a Witness +a: Children\'s Christmas Song +a: Christmas Everyday +a: Come and Get It +a: Do You Love Me +a: Fingertips +a: For Once in My Life +a: God Rest Ye Merry Gentlemen +a: Guess Who\'s Making Whoopee With Your Girlfriend +a: Heaven Help Us All +a: He\'s My Sunny Boy +a: How Sweet It Is (To Be Loved by You) +a: I Can\'t Help Myself (Sugar Pie Honey Bunch) +a: I Got a Feeling +a: I Got the Feelin\' +a: I Heard It Through the Grapevine +a: I Want You To Come Home For Christmas +a: (If I Can\'t) Nobody Can +a: If You Really Love Me +a: If You Want Heaven +a: I\'ll Turn To Stone +a: It\'s Christmas Time +a: It\'s the Same Old Song +a: I\'ve Gotta Be Me +a: Jackson Man +a: Joy to the World +a: Keep off the Grass +a: Kentucky Road +a: Lavender Blue +a: (Loneliness Made Me Realize) It\'s You That I Need +a: Love Call +a: Love Feels Like Fire +a: Love Go Away +a: Loving You Is Sweeter Than Ever +a: Miss Lucky Day +a: My Favorite Things +a: Neither One of Us (Wants to Be the First to Say Goodbye) +a: No News Is Good News +a: Nona +a: Ooh Baby Baby +a: Power +a: Purple Snowflakes +a: Quicksand +a: Sad Souvenirs +a: Shake Me, Wake Me (When It\'s Over) +a: She Say \'Want\' +a: Signed, Sealed, Delivered I\'m Yours +a: Silent Night +a: Silver Bells +a: Since I Lost My Baby +a: Since You\'ve Been Gone +a: Slipped Away +a: Still In Love With You +a: Take My Heart +a: That Girl +a: That\'s How Love Is +a: That\'s What Christmas Means to Me +a: To Sir, with Love +a: Twinkle, Twinkle Little Me +a: Uptight (Everything\'s Alright) +a: What Does It Take (To Win Your Love) +a: Where Did Our Love Go +a: Where Do I Stand +a: White Christmas +a: Would Ya? Would Ya? +a: Yester-Me, Yester-You, Yesterday +a: You Can\'t Hurry Love +a: You\'re My Everything +a: You\'re the Only One + \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesLFPBinaryLoader_test_file_read.txt b/rec_to_binaries/test/e2etests/test_data/TrodesLFPBinaryLoader_test_file_read.txt new file mode 100644 index 0000000..aa4e836 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesLFPBinaryLoader_test_file_read.txt @@ -0,0 +1,14 @@ + +a:1 +data:2 +Original_file:test_Original_file +Trode_ID:test_Trode_ID +Trode_channel:test_Trode_channel +Clock rate:test_Clock rate +Voltage_scaling:test_Voltage_scaling +Decimation:test_Decimation +First_timestamp:test_First_timestamp +Reference:test_Reference +Low_pass_filter:test_Low_pass_filter +Fields:test_Fields + diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt b/rec_to_binaries/test/e2etests/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt new file mode 100644 index 0000000..b7bfd8d --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesPosBinaryLoader_check_if_data_file_is_read.txt @@ -0,0 +1,8 @@ + +a:1 +data:2 +threshold:test_threshold +dark:test_dark +clockrate:test_clockrate +field_str:test_Fields + diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesSpikeBinaryLoader_test_file_read.txt b/rec_to_binaries/test/e2etests/test_data/TrodesSpikeBinaryLoader_test_file_read.txt new file mode 100644 index 0000000..222ef82 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesSpikeBinaryLoader_test_file_read.txt @@ -0,0 +1,19 @@ + +a:1 +data:2 +Original_file:test_Original_file +nTrode_ID:1 +num_channels:10 +Clock rate:3 +Voltage_scaling:v +Time_offset:4 +Threshold:5 +Spike_invert:t +Reference:6 +ReferenceNTrode:7 +ReferenceChannel:8 +Filter:t +lowPassFilter:y +highPassFilter:n +Fields:test_field + diff --git a/rec_to_binaries/test/e2etests/test_data/TrodesTimestampBinaryLoader_test_file_read.txt b/rec_to_binaries/test/e2etests/test_data/TrodesTimestampBinaryLoader_test_file_read.txt new file mode 100644 index 0000000..816b431 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/TrodesTimestampBinaryLoader_test_file_read.txt @@ -0,0 +1,10 @@ + +a:1 +data:2 +Byte_order:test_Byte_order +Original_file:test_Original_file +Clock rate:test_Clock rate +Decimation:test_Decimation +Time_offset:test_Time_offset +Fields:test_Fields + diff --git a/rec_to_binaries/test/e2etests/test_data/__init__.py b/rec_to_binaries/test/e2etests/test_data/__init__.py new file mode 100644 index 0000000..143f486 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/__init__.py @@ -0,0 +1 @@ +# __init__.py diff --git a/rec_to_binaries/test/e2etests/test_data/fix_timestamp_lag_check_if_data_is_written_no_systime.txt b/rec_to_binaries/test/e2etests/test_data/fix_timestamp_lag_check_if_data_is_written_no_systime.txt new file mode 100644 index 0000000..fdf51a3 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/fix_timestamp_lag_check_if_data_is_written_no_systime.txt @@ -0,0 +1,3 @@ + +data:  + \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/test_data/readTrodesExtractDataFile_not_start_setting.txt b/rec_to_binaries/test/e2etests/test_data/readTrodesExtractDataFile_not_start_setting.txt new file mode 100644 index 0000000..1f67d3a --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/readTrodesExtractDataFile_not_start_setting.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/test_data/readTrodesExtractedDataFile_check_file_is_written_correctly.txt b/rec_to_binaries/test/e2etests/test_data/readTrodesExtractedDataFile_check_file_is_written_correctly.txt new file mode 100644 index 0000000..340a2ec --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_data/readTrodesExtractedDataFile_check_file_is_written_correctly.txt @@ -0,0 +1,3 @@ + +a: [1,2,3] + \ No newline at end of file diff --git a/rec_to_binaries/test/e2etests/test_data/temp_file.txt b/rec_to_binaries/test/e2etests/test_data/temp_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/rec_to_binaries/test/e2etests/test_read_binaries.py b/rec_to_binaries/test/e2etests/test_read_binaries.py new file mode 100644 index 0000000..47b8e40 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_read_binaries.py @@ -0,0 +1,53 @@ +import os +import numpy as np +import pytest +from rec_to_binaries.read_binaries import ( + write_trodes_extracted_datafile, + readTrodesExtractedDataFile +) + +CURRENT_DIRECTORY = os.getcwd() +TEST_PATH = f'{CURRENT_DIRECTORY}/rec_to_binaries/test/e2etests/' + +def test_write_trodes_extracted_datafile(e2etests_directory_path, clear_file_content): + # arrange + file_path = f'{e2etests_directory_path}/test_data/temp_file.txt' + data_file = {'a': np.array((1,2,3)), 'data': np.array((4,5,6))} + clear_file_content(file_path) + + # act + write_trodes_extracted_datafile(file_path, data_file) + + # assert + file_lines = [] + with open(file_path, 'r+') as file: + file_lines = list(file.readlines()) + + assert file_lines[0] == '\n' + assert file_lines[1] == 'a: [1 2 3]\n' + assert file_lines[2] == '\n' + assert file_lines[3] == '\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00' + +def test_readTrodesExtractedDataFile_check_first_line_for_Start_settings(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/readTrodesExtractDataFile_not_start_setting.txt' + + with pytest.raises(Exception): + readTrodesExtractedDataFile(file_path) + +def test_readTrodesExtractedDataFile_check_file_is_written_correctly(e2etests_directory_path): + file_path = f'{e2etests_directory_path}/test_data/readTrodesExtractedDataFile_check_file_is_written_correctly.txt' + fields_text = readTrodesExtractedDataFile(file_path) + + assert fields_text['a'] == '[1,2,3]' + assert fields_text['data'].tobytes() == b'' + +def test_clean_read_binaries_test__suite(e2etests_directory_path, clear_file_content): + try: + file_path = f'{e2etests_directory_path}/test_data/temp_file.txt' + clear_file_content(file_path) + assert True + # The exception type is irrelevant. It just needs to be caught + # pylint: disable=broad-except + except Exception: + print('Pytest could not clean up resources') + assert False diff --git a/rec_to_binaries/test/e2etests/test_setup.py b/rec_to_binaries/test/e2etests/test_setup.py new file mode 100644 index 0000000..a8c5dfa --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_setup.py @@ -0,0 +1,27 @@ +import os +import pkg_resources + + +def test_check_spikegadget_is_installed(): + home_directory = os.path.expanduser('~') + spike_gadget_path = f'{home_directory}/SpikeGadgets' + spike_gadget_exists = os.path.isdir(spike_gadget_path) + assert spike_gadget_exists + +def test_check_if_rec_to_binaries_is_installed(): + package = None + try: + package = pkg_resources.get_distribution('rec_to_binaries') + except pkg_resources.DistributionNotFound: + pass + assert package is not None + +def test_major_mountainlab_pytools_version_number_is_useable(): + package = None + try: + package = pkg_resources.get_distribution('mountainlab-pytools') + except pkg_resources.DistributionNotFound: + pass + assert package is not None + assert package.version.split('.')[0] == '0', 'Major semver update, smoke test code' + assert package.version.split('.')[1] >= '7', 'Minor semver downgrade, check installation' diff --git a/rec_to_binaries/test/e2etests/test_trodes_data.py b/rec_to_binaries/test/e2etests/test_trodes_data.py new file mode 100644 index 0000000..5abc1e2 --- /dev/null +++ b/rec_to_binaries/test/e2etests/test_trodes_data.py @@ -0,0 +1,57 @@ +import pytest + +@pytest.mark.skip(reason='not implemented') +def test_TrodesRawFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesSpikeExtractedFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesLFPExtractedFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesMdaExtractedFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesDIOExtractedFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesPosExtractedFileNameParser(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesAnimalInfo(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesPreprocessingLFPEpoch(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesPreprocessingSpikeEpoch(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesPreprocessingDIOEpoch(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_TrodesPreprocessingToAnalysis(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_ExtractRawTrodesData(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_get_trodes_version(): + pass + +@pytest.mark.skip(reason='not implemented') +def test_get_trodes_version_from_path(): + pass