Пример #1
0
    def test_ConfigLoader_reload_home_directory_change_NEEDS_TO_UPDATE_FULL_CONFIG(
            self):
        new = ConfigLoader()
        new_home = os.path.abspath('delete_me')
        old_home = os.path.join(get_documents_folder(), APP_NAME)

        save_config({'home_directory': new_home})
        new.reload()

        to_check = {
            'countable_nouns': COUNTABLE_NOUNS_CSV,
            'uncountable_nouns': UNCOUNTABLE_NOUNS_CSV,
            'verbs': VERBS_CSV
        }
        for key, filename in to_check.items():
            self.assertEqual(new.state[key], os.path.join(new_home, filename))

            with open(os.path.join(DATA_PATH, filename), 'r') as default:
                default_text = default.read()

            with open(os.path.join(old_home, filename), 'r') as old_file:
                self.assertEqual(old_file.read(), default_text)
            with open(os.path.join(new_home, filename), 'r') as new_file:
                self.assertEqual(new_file.read(), default_text)
        rmtree(new_home)
Пример #2
0
    def test_ConfigLoader_revert_to_default_creates_files_and_directories(
            self):
        home_to_delete = os.path.abspath('delete_me')
        save_config({'home_directory': home_to_delete})
        new = ConfigLoader()

        home = os.path.join(get_documents_folder(), APP_NAME)
        self.assertFalse(os.path.exists(home))

        for filename in [
                VERBS_CSV, COUNTABLE_NOUNS_CSV, UNCOUNTABLE_NOUNS_CSV
        ]:
            self.assertTrue(
                os.path.exists(os.path.join(home_to_delete, filename)))

        new.revert_to_default()

        for filename in [
                VERBS_CSV, COUNTABLE_NOUNS_CSV, UNCOUNTABLE_NOUNS_CSV
        ]:
            self.assertTrue(
                os.path.exists(os.path.join(home_to_delete, filename)))
        self.assert_default_ConfigLoader_state(new)

        rmtree(home_to_delete)
Пример #3
0
    def test_ConfigLoader_set_up_frame_PctSpinBox_no_error_with_int(self):
        # Default: 'error_probability' = 0.02
        ed = ErrorDetails()

        save_config({'error_probability': 10})
        loader = ConfigLoader()
        loader.set_up_frame(ed)
        self.assertEqual(ed.get_values()['error_probability'], 0.10)
Пример #4
0
    def test_ConfigLoader_set_up_frame_raises_ConfigFileError_float(self):
        # Default: 'error_probability' = 0.02
        ed = ErrorDetails()

        save_config({'error_probability': 'hi'})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, ed)

        save_config({'error_probability': None})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, ed)
Пример #5
0
    def test_ConfigLoader_set_up_frame_raises_ConfigFileError_int(self):
        # Default: 'subject_pool' = 5
        pt = ParagraphType()

        save_config({'subject_pool': 'hello'})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, pt)

        save_config({'subject_pool': 10.0})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, pt)
Пример #6
0
    def test_ConfigLoader_set_up_frame_raises_ConfigFileError_bool(self):
        # Default: 'verb_errors' = True
        ed = ErrorDetails()

        save_config({'verb_errors': 'hello'})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, ed)

        save_config({'verb_errors': 10.0})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, ed)
Пример #7
0
    def test_ConfigLoader_set_up_frame_GrammarDetails(self):
        gd = GrammarDetails()
        loader = ConfigLoader()
        loader.set_up_frame(gd)
        answer = {
            'tense': 'simple_present',
            'probability_plural_noun': 0.3,
            'probability_negative_verb': 0.3,
            'probability_pronoun': 0.2
        }

        self.assertEqual(gd.get_values(), answer)
Пример #8
0
    def load_config_from_file(self):
        loader = ConfigLoader()

        filename = askopenfilename(
            initialdir=self.get_state()['home_directory'],
            title='select .cfg file',
            defaultextension='.cfg')
        if not filename:
            return None

        loader.set_state_from_file(filename)
        self._load_new_state(loader)
Пример #9
0
    def test_ConfigLoader_set_up_frame_ParagraphType(self):
        pt = ParagraphType()
        loader = ConfigLoader()
        loader.set_up_frame(pt)
        answer = {
            'paragraph_type': 'chain',
            'subject_pool': 5,
            'num_paragraphs': 4,
            'paragraph_size': 15
        }

        self.assertEqual(pt.get_values(), answer)
Пример #10
0
    def test_WARNING_ConfigLoader_set_up_frame_int_and_pct_edge_case_with_bool_WARNING(
            self):
        # 'subject_pool' minimum = 2
        # 'error_probability' minimum = 0.0
        pt = ParagraphType()
        ed = ErrorDetails()

        save_config({'subject_pool': True, 'error_probability': True})
        loader = ConfigLoader()
        loader.set_up_frame(pt)
        loader.set_up_frame(ed)
        self.assertEqual(pt.get_values()['subject_pool'], 2)
        self.assertEqual(ed.get_values()['error_probability'], 0.0)
Пример #11
0
    def test_ConfigLoader_set_up_frame_ErrorDetails(self):
        ed = ErrorDetails()
        loader = ConfigLoader()
        loader.set_up_frame(ed)
        answer = {
            'error_probability': 0.2,
            'noun_errors': True,
            'pronoun_errors': False,
            'verb_errors': True,
            'is_do_errors': False,
            'preposition_transpose_errors': False,
            'punctuation_errors': True
        }

        self.assertEqual(ed.get_values(), answer)
Пример #12
0
    def test_ConfigLoader_set_up_frame_FileManagement(self):
        fm = FileManagement()
        loader = ConfigLoader()
        loader.set_up_frame(fm)
        home = os.path.join(get_documents_folder(), APP_NAME)
        answer = {
            'home_directory': home,
            'save_directory': os.path.join(home, DEFAULT_SAVE_DIR),
            'countable_nouns': os.path.join(home, COUNTABLE_NOUNS_CSV),
            'uncountable_nouns': os.path.join(home, UNCOUNTABLE_NOUNS_CSV),
            'proper_nouns': os.path.join(home, PROPER_NOUNS_CSV),
            'verbs': os.path.join(home, VERBS_CSV)
        }

        self.assertEqual(fm.get_values(), answer)
Пример #13
0
    def test_ConfigLoader_set_up_frame_raises_ConfigFileError_string(self):
        # Default: 'paragraph_type' = 'chain'
        pt = ParagraphType()

        save_config({'paragraph_type': 1})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, pt)

        save_config({'paragraph_type': True})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, pt)

        save_config({'paragraph_type': None})
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_up_frame, pt)
Пример #14
0
    def test_ConfigLoader_init_existing_config_file_existing_files(self):
        home = os.path.abspath('to_delete')
        save = os.path.abspath('bogus_save')
        existing_verbs = os.path.join(home, 'my_verb.csv')
        if not os.path.exists(home):
            os.mkdir(home)
        if not os.path.exists(save):
            os.mkdir(save)

        with open(existing_verbs, 'w') as f:
            f.write('exists')

        save_config({
            'home_directory': home,
            'save_directory': save,
            'verbs': existing_verbs
        })

        new = ConfigLoader()
        self.assert_ConfigLoader_state(new, home, save, VERBS_CSV)

        with open(existing_verbs, 'r') as f:
            self.assertEqual(f.read(), 'exists')
        self.assertEqual(new.state['verbs'], existing_verbs)

        rmtree(home)
        rmtree(save)
Пример #15
0
 def test_ConfigLoader_init_whole_state(self):
     answer = ConfigLoader().state
     home = os.path.join(get_documents_folder(), APP_NAME)
     expected = {
         'home_directory': home,
         'save_directory': os.path.join(home, DEFAULT_SAVE_DIR),
         'countable_nouns': os.path.join(home, COUNTABLE_NOUNS_CSV),
         'uncountable_nouns': os.path.join(home, UNCOUNTABLE_NOUNS_CSV),
         'proper_nouns': os.path.join(home, PROPER_NOUNS_CSV),
         'verbs': os.path.join(home, VERBS_CSV),
         'error_probability': 0.2,
         'noun_errors': True,
         'pronoun_errors': False,
         'verb_errors': True,
         'punctuation_errors': True,
         'is_do_errors': False,
         'preposition_transpose_errors': False,
         'tense': 'simple_present',
         'probability_plural_noun': 0.3,
         'probability_negative_verb': 0.3,
         'probability_pronoun': 0.2,
         'paragraph_type': 'chain',
         'subject_pool': 5,
         'num_paragraphs': 4,
         'paragraph_size': 15,
         'font_size': 13,
         'file_prefix': ''
     }
     self.assertEqual(answer, expected)
Пример #16
0
    def test_reload_files(self):
        ConfigLoader()
        save_config({
            'probability_plural_noun': 0,
            'probability_negative_verb': 0,
            'probability_pronoun': 0
        })
        new_verb = Verb('boogahboogah').third_person()
        new_noun = Noun('wackawacka').definite()
        main = MainFrame()

        with open(os.path.join(APP_FOLDER, COUNTABLE_NOUNS_CSV), 'w') as f:
            f.write('wackawacka')
        with open(os.path.join(APP_FOLDER, UNCOUNTABLE_NOUNS_CSV), 'w') as f:
            f.write('')
        with open(os.path.join(APP_FOLDER, VERBS_CSV), 'w') as f:
            f.write('boogahboogah')

        paragraph = main.paragraph_generator.create_paragraph()
        for sentence in paragraph:
            self.assertNotIn(new_noun, sentence)
            self.assertNotIn(new_verb, sentence)

        main.reload_files()

        paragraph = main.paragraph_generator.create_paragraph()
        for sentence in paragraph:
            self.assertIn(new_noun, sentence)
            self.assertIn(new_verb, sentence)
Пример #17
0
 def test_create_texts_missing_words(self, mock_error):
     ConfigLoader()
     with open(os.path.join(APP_FOLDER, VERBS_CSV), 'w') as f:
         f.write('')
     MainFrame().create_texts()
     mock_error.assert_called_with(
         'Uh-oh!', 'ValueError: There are no verbs in the verb list.')
Пример #18
0
 def test_ConfigLoader_set_state_from_file_missing_file_ConfigFileError(
         self):
     filename = os.path.join(TESTS_FILES, 'not_there.cfg')
     if os.path.exists(filename):
         os.remove(filename)
     loader = ConfigLoader()
     self.assertRaises(ConfigFileError, loader.set_state_from_file,
                       filename)
Пример #19
0
    def test_set_config(self):
        main = MainFrame()

        with open(os.path.join(DATA_PATH, CONFIG_FILE), 'w') as f:
            f.write('')
        self.assertRaises(KeyError, ConfigLoader)

        main.set_config()
        self.assertEqual(main.get_state(), ConfigLoader().state)
Пример #20
0
    def test_load_config(self):
        main = MainFrame()

        save_config({'probability_plural_noun': 0})
        loader = ConfigLoader()

        self.assertNotEqual(loader.state, main.get_state())
        main.load_config()
        self.assertEqual(loader.state, main.get_state())
Пример #21
0
    def test_load_config_from_file_loads_from_file(self, mock_filename):
        filename = os.path.join(TESTS_FILES, 'tst.cfg')

        mock_filename.return_value = filename

        save_config_to_filename({'probability_plural_noun': 0.0}, filename)

        main = MainFrame()
        default_state = main.get_state()

        main.load_config_from_file()

        self.assertNotEqual(main.get_state(), default_state)

        loader = ConfigLoader()
        loader.set_state_from_file(filename)
        self.assertEqual(loader.state, main.get_state())

        os.remove(filename)
Пример #22
0
 def test_ConfigLoader_init_existing_config_fails_when_directory_parent_not_there_message(
         self):
     home = 'not_there/really_not_there'
     save_config({'home_directory': home})
     with self.assertRaises(ConfigFileError) as context:
         ConfigLoader()
     error = context.exception
     msg = 'Config Loader failed to create the following directory:\n'
     msg += os.path.abspath(home)
     self.assertIn(msg, error.args[0])
Пример #23
0
    def test_ConfigLoader_set_state_from_file_bad_file_ConfigFileError(self):
        filename = os.path.join(TESTS_FILES, 'tst.cfg')
        bad_text = 'no comment and no equal'
        with open(filename, 'w') as f:
            f.write(bad_text)
        loader = ConfigLoader()
        self.assertRaises(ConfigFileError, loader.set_state_from_file,
                          filename)

        # cleanup
        os.remove(filename)
Пример #24
0
    def test_ConfigLoader_set_state_from_file_no_errors(self):
        filename = os.path.join(TESTS_FILES, 'test.cfg')
        save_config_to_filename({'error_probability': 1.0},
                                filename)  # default 0.20
        loader = ConfigLoader()
        loader.set_state_from_file(filename)

        default_loader = ConfigLoader()

        loader_state = loader.state
        default_state = default_loader.state

        self.assertNotEqual(loader_state, default_state)
        self.assertEqual(loader_state['error_probability'], 1.0)
        loader_state['error_probability'] = 0.20

        self.assertEqual(loader_state, default_state)

        # cleanup
        os.remove(filename)
Пример #25
0
    def test_ConfigLoader_set_up_frame_bool_no_error_with_int(self):
        # Default: 'verb_errors' = True
        ed = ErrorDetails()

        save_config({'verb_errors': 0})
        loader = ConfigLoader()
        loader.set_up_frame(ed)
        self.assertEqual(ed.get_values()['verb_errors'], False)

        save_config({'verb_errors': 2})
        loader = ConfigLoader()
        loader.set_up_frame(ed)
        self.assertEqual(ed.get_values()['verb_errors'], True)
Пример #26
0
def alphabetize(file_name, replace=True):
    if not os.path.exists(file_name):
        loader = ConfigLoader()
        file_name = os.path.join(loader.state['home_directory'], file_name)
    lst = load_file(file_name)
    if replace:
        new_name = file_name
    else:
        new_name = file_name.replace('.csv', '_sorted.csv')

    write_file(new_name, lst)
Пример #27
0
    def test_ConfigLoader_reload_home_directory_change(self):
        new = ConfigLoader()
        new_home = os.path.abspath('delete_me')
        old_home = os.path.join(get_documents_folder(), APP_NAME)
        full_config = new.state
        full_config.update({'home_directory': new_home})
        self.assertNotEqual(full_config, new.state)

        save_config(full_config)
        new.reload()

        self.assertEqual(full_config, new.state)
        for filename in [
                COUNTABLE_NOUNS_CSV, UNCOUNTABLE_NOUNS_CSV, VERBS_CSV
        ]:
            with open(os.path.join(DATA_PATH, filename), 'r') as default:
                with open(os.path.join(old_home, filename), 'r') as target:
                    self.assertEqual(default.read(), target.read())
        # new_home should be empty. If this raises an error, there's something very wrong.
        os.rmdir(new_home)
Пример #28
0
    def test_ConfigLoader_init_existing_config_file_non_existent_directories_only_if_parent_path_exists(
            self):
        home = os.path.abspath('to_delete')
        save = os.path.join(home, 'bogus_save')

        save_config({'home_directory': home, 'save_directory': save})

        new = ConfigLoader()
        self.assert_ConfigLoader_state(new, home, save)

        # cleanup
        rmtree(home)
Пример #29
0
    def test_create_text_error_pool_not_large_enough(self, mock_error):
        ConfigLoader()  # set up directories
        save_config({'paragraph_type': 'pool', 'probability_pronoun': 0})
        for file_name in (UNCOUNTABLE_NOUNS_CSV, COUNTABLE_NOUNS_CSV):
            with open(os.path.join(APP_FOLDER, file_name), 'w') as f:
                f.write('dog')
        main = MainFrame()

        main.create_texts()
        mock_error.assert_called_with(
            'Uh-oh!',
            'ValueError: pool size is too large for available nouns loaded from file'
        )
Пример #30
0
    def test_ConfigLoader_revert_to_default_resets_csvs_but_leaves_other_files(
            self):
        new = ConfigLoader()
        home = os.path.join(get_documents_folder(), APP_NAME)
        save = os.path.join(home, DEFAULT_SAVE_DIR)
        home_files = [VERBS_CSV, COUNTABLE_NOUNS_CSV, 'foo.txt', 'bar.txt']
        save_files = ['foo.txt', 'bar.txt']
        write_files = [os.path.join(home, filename) for filename in home_files]
        write_files += [
            os.path.join(save, filename) for filename in save_files
        ]
        files_not_reset = write_files[2:]
        for filename in write_files:
            with open(filename, 'w') as f:
                f.write('foobar')

        new.revert_to_default()

        self.assert_default_ConfigLoader_state(new)
        for filename in files_not_reset:
            with open(filename, 'r') as f:
                self.assertEqual(f.read(), 'foobar')