コード例 #1
0
ファイル: test_repo_info.py プロジェクト: costas-basdekis/aox
    def test_empty_directory(self):
        with tempfile.TemporaryDirectory() as challenges_root:
            with amending_settings(
                    challenges_root=Path(challenges_root),
                    challenges_boilerplate=DefaultBoilerplate()):
                current_year = datetime.now().year
                repo_info = RepoInfo.from_roots()

                self.assertFalse(repo_info.has_code)
                self.assertTrue(
                    set(repo_info.year_infos).issuperset(
                        {2015, 2016, 2017, 2018, 2019, 2020}))
                self.assertEqual(set(repo_info.year_infos),
                                 set(range(2015, current_year + 1)))
                for year, year_info in repo_info.year_infos.items():
                    self.assertEqual(year_info.year, year)
                    self.assertFalse(year_info.has_code)
                    self.assertFalse(year_info.path.exists())
                    self.assertEqual(set(year_info.day_infos),
                                     set(range(1, 26)))
                    for day, day_info in year_info.day_infos.items():
                        self.assertEqual(day_info.year_info, year_info)
                        self.assertEqual(day_info.year, year)
                        self.assertEqual(day_info.day, day)
                        self.assertFalse(day_info.has_code)
                        self.assertFalse(day_info.path.exists())
                        self.assertEqual(set(day_info.part_infos), {'a', 'b'})
                        for part, part_info in day_info.part_infos.items():
                            self.assertEqual(part_info.day_info, day_info)
                            self.assertEqual(part_info.year, year)
                            self.assertEqual(part_info.day, day)
                            self.assertEqual(part_info.part, part)
                            self.assertFalse(part_info.has_code)
                            self.assertFalse(part_info.path.exists())
コード例 #2
0
 def test_create_part_a_single_digit_day(self):
     files_in_repo_before_create = glob.glob(str(
         current_directory.joinpath('**/*')),
                                             recursive=True)
     with tempfile.TemporaryDirectory() as challenges_root:
         self.assertEqual(
             glob.glob(str(Path(challenges_root).joinpath('**/*')),
                       recursive=True), [])
         with amending_settings(challenges_root=Path(challenges_root)):
             DefaultBoilerplate().create_part(2020, 5, 'a')
         self.assertEqual(
             set(
                 glob.glob(str(Path(challenges_root).joinpath('**/*')),
                           recursive=True)),
             {
                 f"{challenges_root}/year_2020",
                 f"{challenges_root}/year_2020/__init__.py",
                 f"{challenges_root}/year_2020/day_05",
                 f"{challenges_root}/year_2020/day_05/__init__.py",
                 f"{challenges_root}/year_2020/day_05/part_a.py",
                 f"{challenges_root}/year_2020/day_05/input.txt",
             })
     files_in_repo_after_create = glob.glob(str(
         current_directory.joinpath('**/*')),
                                            recursive=True)
     self.assertEqual(files_in_repo_before_create,
                      files_in_repo_after_create)
コード例 #3
0
 def test_get_part_filename_absolute_path_single_digit_day(self):
     with amending_settings(challenges_root=Path('/tmp/test-directory')):
         self.assertEqual(
             DefaultBoilerplate().get_part_filename(2020, 5, 'a'),
             Path('/tmp/test-directory/year_2020/day_05/part_a.py'))
         self.assertEqual(
             DefaultBoilerplate().get_part_filename(2020, 5, 'b'),
             Path('/tmp/test-directory/year_2020/day_05/part_b.py'))
コード例 #4
0
 def check_submit_solution(self, year, day, part, solution, response_path,
                           expected_result):
     if response_path:
         response = bs4.BeautifulSoup(
             response_path.read_text(), 'html.parser')
     else:
         response = None
     with using_controller([], None, interactive=False) \
             as (controller, combined_info, _), \
             amending_settings(challenges_boilerplate=DummyBoilerplate()), \
             patch.object(WebAoc, 'submit_solution', return_value=response):
         self.assertEqual(controller.submit_challenge_solution(
             year, day, part, no_prompt=True, solution=solution),
             expected_result)
コード例 #5
0
 def check_play_challenge(self, year, day, part, force,
                          original_replacement, expected_result):
     with using_controller([], None, interactive=False) \
             as (controller, combined_info, _), \
             amending_settings(challenges_boilerplate=DummyBoilerplate()):
         if original_replacement is not None:
             controller.add_challenge(year, day, part)
             part_info = combined_info.get_part(year, day, part)
             code = part_info.path.read_text()
             code = code.replace('        "FUNCTION-BODY"',
                                 original_replacement)
             part_info.path.write_text(code)
         self.assertEqual(controller.play_challenge(year, day, part, force),
                          expected_result)
コード例 #6
0
    def checking_add_challenge(self, year, day, part, expected_result):
        with using_controller([], None) as (controller, combined_info, _), \
                amending_settings(challenges_boilerplate=DummyBoilerplate()):
            expected_contents = {}
            yield controller, combined_info, expected_contents
            self.assertEqual(controller.add_challenge(year, day, part),
                             expected_result)

            for path, expected_content in expected_contents.items():
                if path.exists():
                    content = path.read_text()
                else:
                    content = None
                self.assertEqual(content, expected_content)
コード例 #7
0
 def test_paths_in_created_part_b_single_digit_day(self):
     with tempfile.TemporaryDirectory() as challenges_root:
         with amending_settings(challenges_root=Path(challenges_root)):
             boilerplate = DefaultBoilerplate()
             boilerplate.create_part(2020, 5, 'b')
             paths = set(
                 map(str, (
                     boilerplate.get_part_filename(2020, 5, 'a'),
                     boilerplate.get_part_filename(2020, 5, 'b'),
                     boilerplate.get_day_directory(2020, 5),
                     boilerplate.get_day_input_filename(2020, 5),
                     boilerplate.get_year_directory(2020),
                 )))
         self.assertTrue(
             set(
                 glob.glob(str(Path(challenges_root).joinpath('**/*')),
                           recursive=True), ).issuperset(paths))
コード例 #8
0
    def check_readme(self, parts_to_create_on_disk, collected_data,
                     initial_content, expected_content, expected_result):
        if initial_content is None:
            readme_file = nullcontext()
            new_settings = {"readme_path": None}
        else:
            readme_file = tempfile.NamedTemporaryFile(mode="w")
            new_settings = {"readme_path": Path(readme_file.name)}
        with using_controller(parts_to_create_on_disk, collected_data) \
                as (controller, _, _), readme_file, \
                amending_settings(**new_settings):
            if initial_content is not None:
                readme_file.write(initial_content)
                readme_file.flush()
            self.assertEqual(controller.update_readme(), expected_result)
            readme_path = settings_proxy().readme_path
            if readme_path and readme_path.exists():
                content = readme_path.read_text()
            else:
                content = None

            self.assertEqual(content, expected_content)
コード例 #9
0
ファイル: test_repo_info.py プロジェクト: costas-basdekis/aox
    def test_some_parts_exist(self):
        with tempfile.TemporaryDirectory() as challenges_root:
            with amending_settings(
                    challenges_root=Path(challenges_root),
                    challenges_boilerplate=DefaultBoilerplate()):
                settings_proxy().challenges_boilerplate.create_part(
                    2020, 1, 'b')
                settings_proxy().challenges_boilerplate.create_part(
                    2020, 2, 'b')
                settings_proxy().challenges_boilerplate.create_part(
                    2020, 3, 'b')
                settings_proxy().challenges_boilerplate.create_part(
                    2020, 10, 'b')
                settings_proxy().challenges_boilerplate.create_part(
                    2020, 11, 'a')
                settings_proxy().challenges_boilerplate.create_part(
                    2019, 1, 'b')
                settings_proxy().challenges_boilerplate.create_part(
                    2019, 3, 'a')
                settings_proxy().challenges_boilerplate.create_part(
                    2019, 11, 'b')

                folder_contents = glob.glob(f"{challenges_root}/**/*",
                                            recursive=True)

                repo_info = RepoInfo.from_roots()

                self.assertTrue(repo_info.has_code)
                self.assertTrue(
                    set(repo_info.year_infos).issuperset(
                        {2015, 2016, 2017, 2018, 2019, 2020}))

                # Check years with code
                self.assertEqual(
                    {
                        year_info.year
                        for year_info in repo_info.year_infos.values()
                        if str(year_info.path) in folder_contents
                    }, {2019, 2020})
                self.assertEqual(
                    {
                        year_info.year
                        for year_info in repo_info.year_infos.values()
                        if year_info.has_code
                    }, {2019, 2020})
                self.assertEqual(
                    {
                        year_info.year
                        for year_info in repo_info.year_infos.values()
                        if year_info.path.exists()
                    }, {2019, 2020})

                # Check days with code
                self.assertEqual(
                    {(day_info.year, day_info.day)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     if str(day_info.path) in folder_contents}, {
                         (2020, 1),
                         (2020, 2),
                         (2020, 3),
                         (2020, 10),
                         (2020, 11),
                         (2019, 1),
                         (2019, 3),
                         (2019, 11),
                     })
                self.assertEqual(
                    {(day_info.year, day_info.day)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     if day_info.has_code}, {
                         (2020, 1),
                         (2020, 2),
                         (2020, 3),
                         (2020, 10),
                         (2020, 11),
                         (2019, 1),
                         (2019, 3),
                         (2019, 11),
                     })
                self.assertEqual(
                    {(day_info.year, day_info.day)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     if day_info.path.exists()}, {
                         (2020, 1),
                         (2020, 2),
                         (2020, 3),
                         (2020, 10),
                         (2020, 11),
                         (2019, 1),
                         (2019, 3),
                         (2019, 11),
                     })

                # Check parts with code
                self.assertEqual(
                    {(part_info.year, part_info.day, part_info.part)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     for part_info in day_info.part_infos.values()
                     if str(part_info.path) in folder_contents}, {
                         (2020, 1, 'a'),
                         (2020, 1, 'b'),
                         (2020, 2, 'a'),
                         (2020, 2, 'b'),
                         (2020, 3, 'a'),
                         (2020, 3, 'b'),
                         (2020, 10, 'a'),
                         (2020, 10, 'b'),
                         (2020, 11, 'a'),
                         (2019, 1, 'a'),
                         (2019, 1, 'b'),
                         (2019, 3, 'a'),
                         (2019, 11, 'a'),
                         (2019, 11, 'b'),
                     })
                self.assertEqual(
                    {(part_info.year, part_info.day, part_info.part)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     for part_info in day_info.part_infos.values()
                     if part_info.has_code}, {
                         (2020, 1, 'a'),
                         (2020, 1, 'b'),
                         (2020, 2, 'a'),
                         (2020, 2, 'b'),
                         (2020, 3, 'a'),
                         (2020, 3, 'b'),
                         (2020, 10, 'a'),
                         (2020, 10, 'b'),
                         (2020, 11, 'a'),
                         (2019, 1, 'a'),
                         (2019, 1, 'b'),
                         (2019, 3, 'a'),
                         (2019, 11, 'a'),
                         (2019, 11, 'b'),
                     })
                self.assertEqual(
                    {(part_info.year, part_info.day, part_info.part)
                     for year_info in repo_info.year_infos.values()
                     for day_info in year_info.day_infos.values()
                     for part_info in day_info.part_infos.values()
                     if part_info.path.exists()}, {
                         (2020, 1, 'a'),
                         (2020, 1, 'b'),
                         (2020, 2, 'a'),
                         (2020, 2, 'b'),
                         (2020, 3, 'a'),
                         (2020, 3, 'b'),
                         (2020, 10, 'a'),
                         (2020, 10, 'b'),
                         (2020, 11, 'a'),
                         (2019, 1, 'a'),
                         (2019, 1, 'b'),
                         (2019, 3, 'a'),
                         (2019, 11, 'a'),
                         (2019, 11, 'b'),
                     })

                for year, year_info in repo_info.year_infos.items():
                    self.assertEqual(year_info.year, year)
                    self.assertEqual(set(year_info.day_infos),
                                     set(range(1, 26)))
                    for day, day_info in year_info.day_infos.items():
                        self.assertEqual(day_info.year_info, year_info)
                        self.assertEqual(day_info.year, year)
                        self.assertEqual(day_info.day, day)
                        self.assertEqual(set(day_info.part_infos), {'a', 'b'})
                        for part, part_info in day_info.part_infos.items():
                            self.assertEqual(part_info.day_info, day_info)
                            self.assertEqual(part_info.year, year)
                            self.assertEqual(part_info.day, day)
                            self.assertEqual(part_info.part, part)
コード例 #10
0
ファイル: test_debugging.py プロジェクト: costas-basdekis/aox
 def getting_output(self):
     with amending_settings(
             default_debugger_report_format=self.concise_debugger_format):
         with capturing_stdout() as captured:
             yield captured
コード例 #11
0
 def test_get_part_module_name_custom_package_double_digit_day(self):
     with amending_settings(challenges_module_name_root='custom.package'):
         self.assertEqual(
             DefaultBoilerplate().get_part_module_name(2020, 15, 'a'),
             'custom.package.year_2020.day_15.part_a')
コード例 #12
0
 def test_get_part_module_name_top_level_double_digit_day(self):
     with amending_settings(challenges_module_name_root=None):
         self.assertEqual(
             DefaultBoilerplate().get_part_module_name(2020, 15, 'a'),
             'year_2020.day_15.part_a')
コード例 #13
0
 def test_get_year_directory_absolute_path(self):
     with amending_settings(challenges_root=Path('/tmp/test-directory')):
         self.assertEqual(DefaultBoilerplate().get_year_directory(2020),
                          Path('/tmp/test-directory/year_2020'))
コード例 #14
0
 def test_get_day_directory_absolute_path_double_digit_day(self):
     with amending_settings(challenges_root=Path('/tmp/test-directory')):
         self.assertEqual(DefaultBoilerplate().get_day_directory(2020, 15),
                          Path('/tmp/test-directory/year_2020/day_15'))