diff options
Diffstat (limited to 'gnu/packages/patches')
| -rw-r--r-- | gnu/packages/patches/python-online-judge-api-client-tests.patch | 494 |
1 files changed, 288 insertions, 206 deletions
diff --git a/gnu/packages/patches/python-online-judge-api-client-tests.patch b/gnu/packages/patches/python-online-judge-api-client-tests.patch index f999828ab3..424789d2ce 100644 --- a/gnu/packages/patches/python-online-judge-api-client-tests.patch +++ b/gnu/packages/patches/python-online-judge-api-client-tests.patch @@ -2,428 +2,510 @@ Skip tests which requires network connections. --- a/tests/dispatch.py +++ b/tests/dispatch.py -@@ -4,6 +4,7 @@ from onlinejudge import dispatch, service +@@ -1,9 +1,12 @@ + import unittest ++from tests.utils import NETWORK_ACCESSIBLE + from onlinejudge import dispatch, service + ++print("XXX: Network accessible is" , NETWORK_ACCESSIBLE) class DispatchAtCoderTest(unittest.TestCase): -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_problem_from_url(self): problem = dispatch.problem_from_url('https://atcoder.jp/contests/arc001/tasks/arc001_1') self.assertIsInstance(problem, service.atcoder.AtCoderProblem) - +diff --git a/tests/login_service.py b/tests/login_service.py +index 263673a..186443d 100644 +--- a/tests/login_service.py ++++ b/tests/login_service.py +@@ -6,6 +6,7 @@ import unittest + from typing import * + + from onlinejudge_api.main import main ++from tests.utils import NETWORK_ACCESSIBLE + + ATCODER_USERNAME = 'ATCODER_USERNAME' + ATCODER_PASSWORD = 'ATCODER_PASSWORD' +@@ -45,6 +46,7 @@ class LoginServiceAtCoderTest(unittest.TestCase): + actual = main(['--cookie', str(cookie_path), 'login-service', url], debug=True) + self.assertEqual(expected, actual) + ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + def test_login_failure(self) -> None: + url = 'https://atcoder.jp/' + expected = {"status": "error", "messages": ["onlinejudge.type.LoginError: failed to login"], "result": None} +@@ -70,6 +72,7 @@ class LoginServiceCodeforcesTest(unittest.TestCase): + actual = main(['--cookie', str(cookie_path), 'login-service', url], debug=True) + self.assertEqual(expected, actual) + ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + def test_login_failure(self) -> None: + url = 'https://codeforces.com/' + expected = {'status': 'error', 'messages': ['onlinejudge.type.LoginError: Invalid handle or password.'], 'result': None} +diff --git a/tests/service_anarchygolf.py b/tests/service_anarchygolf.py +index 9c30096..d0e7922 100644 --- a/tests/service_anarchygolf.py +++ b/tests/service_anarchygolf.py -@@ -10,6 +10,7 @@ class AnarchyGolfServiceTest(unittest.TestCase): +@@ -2,6 +2,7 @@ import unittest + + from onlinejudge.service.anarchygolf import AnarchyGolfProblem, AnarchyGolfService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + + class AnarchyGolfServiceTest(unittest.TestCase): +@@ -10,6 +11,7 @@ class AnarchyGolfServiceTest(unittest.TestCase): self.assertIsInstance(AnarchyGolfService.from_url('http://golf.shinh.org/p.rb?Indent+Space+Alignment'), AnarchyGolfService) -+@unittest.skip("Disabled by Guix") ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") class AnarchyGolfProblemTest(unittest.TestCase): def test_download_sample_cases(self): self.assertEqual(AnarchyGolfProblem.from_url('http://golf.shinh.org/p.rb?last+non+zero').download_sample_cases(), [ - +diff --git a/tests/service_aoj.py b/tests/service_aoj.py +index 0ee4eb6..e17dbb7 100644 --- a/tests/service_aoj.py +++ b/tests/service_aoj.py -@@ -20,6 +20,7 @@ class AOJProblemTest(unittest.TestCase): +@@ -2,6 +2,7 @@ import unittest + + from onlinejudge.service.aoj import AOJArenaProblem, AOJProblem, AOJService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + + class AOJSerivceTest(unittest.TestCase): +@@ -20,6 +21,7 @@ class AOJProblemTest(unittest.TestCase): self.assertEqual(AOJProblem.from_url('https://onlinejudge.u-aizu.ac.jp/challenges/sources/JAG/Spring/2394?year=2011').problem_id, '2394') self.assertIsNone(AOJProblem.from_url('https://onlinejudge.u-aizu.ac.jp/services/room.html#RitsCamp19Day2/problems/A')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases(self): self.assertEqual(AOJProblem.from_url('http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DSL_1_A').download_sample_cases(), [ TestCase(name='sample-1', input_name='1', input_data=b'5 12\n0 1 4\n0 2 3\n1 1 2\n1 3 4\n1 1 4\n1 3 2\n0 1 3\n1 2 4\n1 3 0\n0 0 4\n1 0 2\n1 3 0\n', output_name='1', output_data=b'0\n0\n1\n1\n1\n0\n1\n1\n'), -@@ -39,6 +40,7 @@ class AOJProblemTest(unittest.TestCase): +@@ -39,6 +41,7 @@ class AOJProblemTest(unittest.TestCase): TestCase(name='sample-1', input_name='1', input_data=b'4\n0 0\n10 0\n10 10\n0 10\n3\n0 0\n1 0\n0 1\n0\n', output_name='1', output_data=b'Case 1: 14.142135624\nCase 2: 1.41421356\n'), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases_not_registered(self): # see: https://github.com/kmyk/online-judge-tools/issues/207 self.assertEqual(AOJProblem.from_url('https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Regional/1399').download_sample_cases(), [ -@@ -57,11 +59,13 @@ class AOJArenaProblemTest(unittest.TestCase): +@@ -57,11 +60,13 @@ class AOJArenaProblemTest(unittest.TestCase): self.assertEqual(AOJArenaProblem.from_url('https://onlinejudge.u-aizu.ac.jp/services/room.html#ACPC2018Day2/problems/d').alphabet, 'D') self.assertIsNone(AOJArenaProblem.from_url('http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DSL_1_A')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases(self): self.assertEqual(AOJArenaProblem.from_url('https://onlinejudge.u-aizu.ac.jp/services/room.html#yupro/problems/A').download_sample_cases(), [ TestCase(name='sample-1', input_name='1', input_data=b'koukyoukoukokukikou\nabrakadabra\nacmicpc\njapaque\nhelloworld\n#\n', output_name='1', output_data=b'0\n2\n4\n5\n7\n'), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases_not_registered(self): # see: https://github.com/kmyk/online-judge-tools/issues/207 self.assertEqual(AOJArenaProblem.from_url('https://onlinejudge.u-aizu.ac.jp/services/room.html#RitsCamp18Day3/problems/B').download_sample_cases(), [ - +diff --git a/tests/service_atcoder.py b/tests/service_atcoder.py +index e7a1b1d..81b6650 100644 --- a/tests/service_atcoder.py +++ b/tests/service_atcoder.py -@@ -15,6 +15,7 @@ class AtCoderSerivceTest(unittest.TestCase): +@@ -6,9 +6,10 @@ import requests + + from onlinejudge.service.atcoder import AtCoderContest, AtCoderProblem, AtCoderProblemDetailedData, AtCoderService, AtCoderSubmission + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + +-class AtCoderSerivceTest(unittest.TestCase): ++class AtCoderServiceTest(unittest.TestCase): + def test_from_url(self): + self.assertIsInstance(AtCoderService.from_url('https://atcoder.jp/'), AtCoderService) + self.assertIsInstance(AtCoderService.from_url('https://beta.atcoder.jp/'), AtCoderService) +@@ -16,6 +17,7 @@ class AtCoderSerivceTest(unittest.TestCase): self.assertIsInstance(AtCoderService.from_url('https://atcoder.jp/contests/agc001/submissions/806160'), AtCoderService) self.assertIsNone(AtCoderService.from_url('https://codeforces.com/')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_iterate_contests(self): contests = list(AtCoderService().iterate_contests()) contest_ids = [contest.contest_id for contest in contests] -@@ -37,6 +38,7 @@ class AtCoderContestTest(unittest.TestCase): +@@ -38,6 +40,7 @@ class AtCoderContestTest(unittest.TestCase): self.assertEqual(AtCoderContest.from_url('https://atcoder.jp/contests/agc030').contest_id, 'agc030') self.assertIsNone(AtCoderContest.from_url('https://atcoder.jp/contests/')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_load_details(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/keyence2019') - self.assertEqual(contest.download_data(lang='en').name, 'KEYENCE Programming Contest 2019') -@@ -62,10 +64,12 @@ class AtCoderContestTest(unittest.TestCase): + time.sleep(0.5) +@@ -67,11 +70,13 @@ class AtCoderContestTest(unittest.TestCase): self.assertEqual(data.rated_range, '-') self.assertEqual(data.penalty.total_seconds(), 5 * 60) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_penalty_a_singular_form(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/chokudai_S002') + time.sleep(0.5) self.assertEqual(contest.download_data().penalty.total_seconds(), 60) # Penalty is written as "1 minute", not "1 minutes" -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/agc028') - problems = contest.list_problems() -@@ -79,6 +83,7 @@ class AtCoderContestTest(unittest.TestCase): - self.assertEqual(problems[6].download_data().alphabet, 'F2') + time.sleep(0.5) +@@ -94,6 +99,7 @@ class AtCoderContestTest(unittest.TestCase): + time.sleep(0.5) self.assertEqual(problems[6].problem_id, 'agc028_f2') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems_with_float_values(self): """ .. seealso: -@@ -92,6 +97,7 @@ class AtCoderContestTest(unittest.TestCase): - self.assertEqual(problems[1].download_data().time_limit_msec, 5252) +@@ -112,6 +118,7 @@ class AtCoderContestTest(unittest.TestCase): + time.sleep(0.5) self.assertEqual(problems[1].download_data().memory_limit_byte, 512 * 1000 * 1000) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems_time_limit_is_less_than_msec(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/joi2019ho') - problems = contest.list_problems() -@@ -101,12 +107,14 @@ class AtCoderContestTest(unittest.TestCase): - self.assertEqual(problems[3].download_data().time_limit_msec, 1000) + time.sleep(0.5) +@@ -127,6 +134,7 @@ class AtCoderContestTest(unittest.TestCase): + time.sleep(0.5) self.assertEqual(problems[4].download_data().time_limit_msec, 2000) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems_memory_limit_is_zero(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/future-contest-2019-final-open') - problems = contest.list_problems() - self.assertEqual(problems[0].download_data().memory_limit_byte, 1024 * 1000 * 1000) # 1024 MB - self.assertEqual(problems[1].download_data().memory_limit_byte, 0) # 0 KB - -+ @unittest.skip("Disabled by Guix") - def test_iterate_submissions(self): - contest = AtCoderContest.from_url('https://atcoder.jp/contests/code-festival-2014-exhibition-open') - submissions = list(contest.iterate_submissions()) -@@ -114,6 +122,7 @@ class AtCoderContestTest(unittest.TestCase): + time.sleep(0.5) +@@ -144,6 +152,7 @@ class AtCoderContestTest(unittest.TestCase): self.assertEqual(submissions[0].get_url(), 'https://atcoder.jp/contests/code-festival-2014-exhibition-open/submissions/272697') self.assertEqual(submissions[1].get_url(), 'https://atcoder.jp/contests/code-festival-2014-exhibition-open/submissions/272700') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_contest_without_penalty(self): contest = AtCoderContest.from_url('https://atcoder.jp/contests/otemae2019') - self.assertEqual(contest.download_data(lang='ja').name, '大手前プロコン 2019') -@@ -154,6 +163,7 @@ class AtCoderProblemTest(unittest.TestCase): + time.sleep(0.5) +@@ -188,6 +197,7 @@ class AtCoderProblemTest(unittest.TestCase): self.assertEqual(AtCoderProblem.from_url('https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d'), AtCoderProblem.from_url('https://atcoder.jp/contests/kupc2014/tasks/kupc2014_d')) self.assertNotEqual(AtCoderProblem.from_url('https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d'), AtCoderProblem.from_url('https://atcoder.jp/contests/agc030/tasks/agc030_c')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_load_details(self): problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc118/tasks/abc118_a') - data = problem.download_data() -@@ -163,14 +173,17 @@ class AtCoderProblemTest(unittest.TestCase): + time.sleep(0.5) +@@ -198,18 +208,21 @@ class AtCoderProblemTest(unittest.TestCase): self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000) self.assertEqual(data.score, 100) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_alphabet(self): + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/agc028/tasks/agc028_f').download_data().alphabet, 'F') + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/agc028/tasks/agc028_f2').download_data().alphabet, 'F2') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_score(self): + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/future-contest-2018-final/tasks/future_contest_2018_final_a').download_data().score, 50000000) + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/abc001/tasks/abc001_4').download_data().score, None) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_score_latex(self): """ .. seealso:: -@@ -179,13 +192,16 @@ class AtCoderProblemTest(unittest.TestCase): - +@@ -219,12 +232,14 @@ class AtCoderProblemTest(unittest.TestCase): + time.sleep(0.5) self.assertIsNone(AtCoderProblem.from_url('https://atcoder.jp/contests/wupc2019/tasks/wupc2019_a').download_data().score) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_time_limit_is_less_than_msec(self): + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/joi2019ho/tasks/joi2019ho_c').download_data().time_limit_msec, 500) + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/future-contest-2019-qual/tasks/future_contest_2019_qual_b').download_data().time_limit_msec, 0) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_get_memory_limit_is_zero(self): + time.sleep(0.5) self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/future-contest-2019-qual/tasks/future_contest_2019_qual_b').download_data().memory_limit_byte, 0) - -+ @unittest.skip("Disabled by Guix") - def test_iterate_submissions(self): - problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc119/tasks/abc119_c') - submissions = problem.iterate_submissions() -@@ -204,6 +220,7 @@ class AtCoderSubmissionTest(unittest.TestCase): +@@ -247,6 +262,7 @@ class AtCoderSubmissionTest(unittest.TestCase): + self.assertEqual(AtCoderSubmission.from_url('https://qupc2014.contest.atcoder.jp/submissions/1444440').submission_id, 1444440) ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") class AtCoderProblemDataTest(unittest.TestCase): -+ @unittest.skip("Disabled by Guix") def test_from_html_very_old(self): url = 'https://atcoder.jp/contests/utpc2011/tasks/utpc2011_1' - resp = requests.get(url) -@@ -225,6 +242,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, None) - self.assertEqual(data.time_limit_msec, 1 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_from_html_old(self): - url = 'https://atcoder.jp/contests/abc003/tasks/abc003_4' - resp = requests.get(url) -@@ -247,6 +265,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, None) - self.assertEqual(data.time_limit_msec, 2 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_from_html_standard(self): - url = 'https://atcoder.jp/contests/abc114/tasks/abc114_d' - resp = requests.get(url) -@@ -268,6 +287,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, 400) - self.assertEqual(data.time_limit_msec, 2 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_from_html_with_empty_output(self): - url = 'https://atcoder.jp/contests/agc036/tasks/agc036_b' - resp = requests.get(url) -@@ -290,6 +310,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, 700) - self.assertEqual(data.time_limit_msec, 2 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_from_html_without_sample_cases(self): - url = 'https://atcoder.jp/contests/tenka1-2013-quala/tasks/tenka1_2013_qualA_a' - resp = requests.get(url) -@@ -307,6 +328,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, None) - self.assertEqual(data.time_limit_msec, 2 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_from_html_issue_414(self): - url = 'https://atcoder.jp/contests/fuka5/tasks/fuka_graphcut' - resp = requests.get(url) -@@ -399,6 +421,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - self.assertEqual(data.score, None) - self.assertEqual(data.time_limit_msec, 5 * 1000) - -+ @unittest.skip("Disabled by Guix") - def test_download_sample_cases_pre_without_prettyprint_insection(self): - # see: https://github.com/kmyk/online-judge-tools/issues/625 - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/tdpc/tasks/tdpc_fibonacci').download_sample_cases(), [ -@@ -406,6 +429,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - TestCase(name='sample-2', input_name='Sample Input 2', input_data=b'3 10\n', output_name='Sample Output 2', output_data=b'105\n'), +@@ -479,6 +495,7 @@ class AtCoderProblemDataTest(unittest.TestCase): ]) -+ @unittest.skip("Disabled by Guix") - def test_download_sample_cases_s8pc_broken_html(self): - # see: https://github.com/kmyk/online-judge-tools/issues/615 - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/s8pc-4/tasks/s8pc_4_d').download_sample_cases(), [ -@@ -427,6 +451,7 @@ class AtCoderProblemDataTest(unittest.TestCase): - ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") class AtCoderProblemGetInputFormatTest(unittest.TestCase): -+ @unittest.skip("Disabled by Guix") def test_normal(self): """ - .. code-block:: html -@@ -456,6 +481,7 @@ class AtCoderProblemGetInputFormatTest(unittest.TestCase): - - self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/arc083/tasks/arc083_a').download_data().input_format, '<var>A</var> <var>B</var> <var>C</var> <var>D</var> <var>E</var> <var>F</var>\r\n') - -+ @unittest.skip("Disabled by Guix") - def test_old_problem(self): - """ - :note: https://github.com/kmyk/online-judge-tools/issues/380 -@@ -475,6 +501,7 @@ class AtCoderProblemGetInputFormatTest(unittest.TestCase): - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/arc002/tasks/arc002_3').download_data().input_format, '\r\n<var>N</var>\r\n<var>c_{1}c_{2}...c_{N}</var>\r\n') - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/arc034/tasks/arc034_4').download_data().input_format, '\r\n<var>A</var> <var>B</var> <var>C</var>\r\n<var>a_1</var> <var>a_2</var> .. <var>a_A</var>\r\n<var>b_1</var> <var>b_2</var> .. <var>b_B</var>\r\n') - -+ @unittest.skip("Disabled by Guix") - def test_dwacon_problem(self): - """ - :note: https://github.com/kmyk/online-judge-tools/issues/142 -@@ -493,9 +520,11 @@ class AtCoderProblemGetInputFormatTest(unittest.TestCase): - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/dwacon2018-final/tasks/dwacon2018_final_a').download_data().input_format, '\r\n<var>H</var> <var>M</var> <var>S</var>\r\n<var>C_1</var> <var>C_2</var>\r\n') - self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/dwacon2018-final/tasks/dwacon2018_final_b').download_data().input_format, '\r\n<var>N</var> <var>K</var>\r\n<var>v_1</var> <var>...</var> <var>v_N</var>\r\n') +diff --git a/tests/service_codechef.py b/tests/service_codechef.py +index c65f08d..0a538e4 100644 +--- a/tests/service_codechef.py ++++ b/tests/service_codechef.py +@@ -2,9 +2,10 @@ import unittest -+ @unittest.skip("Disabled by Guix") - def test_problem_without_input(self): - self.assertIsNone(AtCoderProblem.from_url('https://atcoder.jp/contests/tenka1-2013-quala/tasks/tenka1_2013_qualA_a').download_data().input_format) + from onlinejudge.service.codechef import CodeChefProblem, CodeChefService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE -+ @unittest.skip("Disabled by Guix") - def test_problem_without_input_format(self): - self.assertIsNone(AtCoderProblem.from_url('https://atcoder.jp/contests/joi2006ho/tasks/joi2006ho_a').download_data().input_format) ---- a/tests/service_codechef.py -+++ b/tests/service_codechef.py -@@ -15,6 +15,7 @@ class CodeChefProblemTest(unittest.TestCase): +-class CodeChefSerivceTest(unittest.TestCase): ++class CodeChefServiceTest(unittest.TestCase): + def test_from_url(self): + self.assertIsInstance(CodeChefService.from_url('https://www.codechef.com/'), CodeChefService) + self.assertIsNone(CodeChefService.from_url('https://www.facebook.com/')) +@@ -15,6 +16,7 @@ class CodeChefProblemTest(unittest.TestCase): self.assertEqual(CodeChefProblem.from_url('https://www.codechef.com/COOK113A/problems/DAND').contest_id, 'COOK113A') self.assertEqual(CodeChefProblem.from_url('https://www.codechef.com/COOK113A/problems/DAND').problem_id, 'DAND') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples_chfgcd(self): url = 'https://www.codechef.com/COOK131B/problems/CHFGCD' expected = [ - +@@ -23,6 +25,7 @@ class CodeChefProblemTest(unittest.TestCase): + self.assertEqual(CodeChefProblem.from_url(url).download_sample_cases(), expected) + + # TODO: support problems with an old format ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + @unittest.expectedFailure + def test_download_samples_dand(self): + url = 'https://www.codechef.com/COOK113A/problems/DAND' +@@ -32,6 +35,7 @@ class CodeChefProblemTest(unittest.TestCase): + self.assertEqual(CodeChefProblem.from_url(url).download_sample_cases(), expected) + + # TODO: support problems with an old format ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + @unittest.expectedFailure + def test_download_samples_cntset(self): + url = 'https://www.codechef.com/PLIN2020/problems/CNTSET' +@@ -41,6 +45,7 @@ class CodeChefProblemTest(unittest.TestCase): + self.assertEqual(CodeChefProblem.from_url(url).download_sample_cases(), expected) + + # TODO: support problems with an old format ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + @unittest.expectedFailure + def test_download_samples_acesqn(self): + url = 'https://www.codechef.com/CNES2017/problems/ACESQN' +diff --git a/tests/service_codeforces.py b/tests/service_codeforces.py +index 39eb452..0dbc6ad 100644 --- a/tests/service_codeforces.py +++ b/tests/service_codeforces.py -@@ -25,6 +25,7 @@ class CodeforcesContestTest(unittest.TestCase): +@@ -2,6 +2,7 @@ + import unittest + + from onlinejudge.service.codeforces import CodeforcesContest, CodeforcesProblem, CodeforcesService ++from tests.utils import NETWORK_ACCESSIBLE + + + class CodeforcesSerivceTest(unittest.TestCase): +@@ -25,6 +26,7 @@ class CodeforcesContestTest(unittest.TestCase): self.assertEqual(CodeforcesContest.from_url('http://m3.codeforces.com/contest/1333').get_url(), CodeforcesContest.from_url('https://codeforces.com/contest/1333').get_url()) self.assertIsNone(CodeforcesContest.from_url('http://m4.codeforces.com/contest/1333')) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems_data(self): contest = CodeforcesContest.from_url('https://codeforces.com/contest/1157') problems = contest.list_problem_data() -@@ -38,6 +39,7 @@ class CodeforcesContestTest(unittest.TestCase): +@@ -38,6 +40,7 @@ class CodeforcesContestTest(unittest.TestCase): self.assertEqual(problems[6].tags, ['constructive algorithms', 'dp', 'greedy', 'two pointers']) self.assertEqual(problems[7].tags, ['brute force', 'constructive algorithms']) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_list_problems(self): contest = CodeforcesContest.from_url('https://codeforces.com/contest/1157') problems = contest.list_problems() -@@ -46,6 +48,7 @@ class CodeforcesContestTest(unittest.TestCase): +@@ -46,6 +49,7 @@ class CodeforcesContestTest(unittest.TestCase): self.assertEqual(problems[6].get_url(), 'https://codeforces.com/contest/1157/problem/F') self.assertEqual(problems[7].download_data().tags, ['brute force', 'constructive algorithms']) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_data(self): contest = CodeforcesContest.from_url('http://codeforces.com/contest/1200') data = contest.download_data() -@@ -85,6 +88,7 @@ class CodeforcesProblemTest(unittest.TestCase): - self.assertEqual(CodeforcesProblem.from_url('https://codeforces.com/contest/1133/problem/F1').index, 'F1') - self.assertEqual(CodeforcesProblem.from_url('https://codeforces.com/contest/1133/problem/F2').index, 'F2') +@@ -57,6 +61,7 @@ class CodeforcesContestTest(unittest.TestCase): + self.assertEqual(data.type, 'CF') -+ @unittest.skip("Disabled by Guix") - def test_download_problem(self): - problem = CodeforcesProblem.from_url('http://codeforces.com/contest/1205/problem/D') - data = problem.download_data() - + ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + class CodeforcesProblemTest(unittest.TestCase): + def test_from_url(self): + self.assertEqual(CodeforcesProblem.from_url('http://codeforces.com/problemset/problem/700/B').contest_id, 700) +diff --git a/tests/service_google.py b/tests/service_google.py +index d26220d..2cc8544 100644 --- a/tests/service_google.py +++ b/tests/service_google.py -@@ -42,6 +42,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): +@@ -3,6 +3,7 @@ import unittest + + from onlinejudge.service.google import GoogleCodeJamProblem, GoogleCodeJamService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + + class GoogleCodeJamSerivceTest(unittest.TestCase): +@@ -42,6 +43,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): self.assertEqual(problem.contest_id, '8404486') self.assertEqual(problem.problem_id, 'p0') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples_codejam(self): problem = GoogleCodeJamProblem.from_url('https://codingcompetitions.withgoogle.com/codejam/round/000000000019fd27/000000000020993c') sample_input = textwrap.dedent("""\ -@@ -76,6 +77,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): +@@ -76,6 +78,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): ), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples_kickstart(self): problem = GoogleCodeJamProblem.from_url('https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56') sample_input = textwrap.dedent("""\ -@@ -102,6 +104,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): +@@ -102,6 +105,7 @@ class GoogleCodeJamProblemTest(unittest.TestCase): ), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_multiple_samples(self): problem = GoogleCodeJamProblem.from_url('https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3ff3') sample_input1 = textwrap.dedent("""\ - +diff --git a/tests/service_library_checker.py b/tests/service_library_checker.py +index d731df2..e1c9a6d 100644 --- a/tests/service_library_checker.py +++ b/tests/service_library_checker.py -@@ -29,13 +29,13 @@ class LibraryCheckerProblemTest(unittest.TestCase): - def test_from_url(self): +@@ -6,6 +6,7 @@ import unittest + import onlinejudge.utils + from onlinejudge.service.library_checker import LibraryCheckerProblem, LibraryCheckerService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + + @contextlib.contextmanager +@@ -30,12 +31,14 @@ class LibraryCheckerProblemTest(unittest.TestCase): self.assertEqual(LibraryCheckerProblem.from_url('https://judge.yosupo.jp/problem/point_add_range_sum').problem_id, 'point_add_range_sum') -- @unittest.skipIf(os.name == 'nt', "Library Checker is not supported on Windows") -+ @unittest.skip("Disabled by Guix") + @unittest.skipIf(os.name == 'nt', "Library Checker is not supported on Windows") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples(self): self.assertEqual(LibraryCheckerProblem.from_url('https://judge.yosupo.jp/problem/unionfind').download_sample_cases(), [ TestCase(name='example_00', input_name='example_00.in', input_data=b'4 7\n1 0 1\n0 0 1\n0 2 3\n1 0 1\n1 1 2\n0 0 2\n1 1 3\n', output_name='example_00.out', output_data=b'0\n1\n0\n1\n'), ]) -- @unittest.skipIf(os.name == 'nt', "Library Checker is not supported on Windows") -+ @unittest.skip("Disabled by Guix") + @unittest.skipIf(os.name == 'nt', "Library Checker is not supported on Windows") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_pull_repository(self): # reset LibraryCheckerService.is_repository_updated = False - +diff --git a/tests/service_spoj.py b/tests/service_spoj.py +index 804b1c2..b39947f 100644 --- a/tests/service_spoj.py +++ b/tests/service_spoj.py -@@ -14,11 +14,13 @@ class SPOJProblemTest(unittest.TestCase): +@@ -2,6 +2,7 @@ import unittest + + from onlinejudge.service.spoj import SPOJProblem, SPOJService + from onlinejudge.type import TestCase ++from tests.utils import NETWORK_ACCESSIBLE + + + class SPOJSerivceTest(unittest.TestCase): +@@ -14,11 +15,13 @@ class SPOJProblemTest(unittest.TestCase): def test_from_url(self): self.assertEqual(SPOJProblem.from_url('https://www.spoj.com/problems/ACARGO/').problem_id, 'ACARGO') -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples(self): self.assertEqual(SPOJProblem.from_url('https://www.spoj.com/problems/ACARGO/').download_sample_cases(), [ TestCase(name='sample-1', input_name='Sample Input:', input_data=b'3 5\n0\n1\n3\n2 3\n0\n1\n5 20\n2\n7\n12\n9\n13\n0 0\n', output_name='Sample Output:', output_data=b'1\n0\n10\n'), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_samples_todo(self): # No samples found. self.assertFalse(SPOJProblem.from_url('https://www.spoj.com/problems/MKLABELS/').download_sample_cases()) - +diff --git a/tests/service_yukicoder.py b/tests/service_yukicoder.py +index 658fea2..b971743 100644 --- a/tests/service_yukicoder.py +++ b/tests/service_yukicoder.py -@@ -20,6 +20,7 @@ class YukicoderProblemTest(unittest.TestCase): +@@ -4,6 +4,7 @@ import unittest + from onlinejudge.service.yukicoder import YukicoderContest, YukicoderProblem, YukicoderService + from onlinejudge.type import * + from tests.implementation_utils import get_handmade_sample_cases ++from tests.utils import NETWORK_ACCESSIBLE + + + class YukicoderServiceTest(unittest.TestCase): +@@ -20,6 +21,7 @@ class YukicoderProblemTest(unittest.TestCase): self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/no/123/').problem_no, 123) self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/123').problem_id, 123) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases(self): self.assertEqual(YukicoderProblem.from_url('http://yukicoder.me/problems/no/9000').download_sample_cases(), [ TestCase(name='sample-1', input_name='サンプル1 入力', input_data=b'yukicoder\n', output_name='サンプル1 出力', output_data=b'Hello World!\n'), -@@ -45,6 +46,7 @@ class YukicoderProblemTest(unittest.TestCase): +@@ -45,6 +47,7 @@ class YukicoderProblemTest(unittest.TestCase): TestCase(name='sample-4', input_name='サンプル4 入力', input_data=b'\n', output_name='サンプル4 出力', output_data=b'1\n'), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases_issue_355(self): # see https://github.com/kmyk/online-judge-tools/issues/355 self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/649').download_sample_cases(), [ -@@ -54,6 +56,7 @@ class YukicoderProblemTest(unittest.TestCase): +@@ -54,6 +57,7 @@ class YukicoderProblemTest(unittest.TestCase): TestCase(name='sample-4', input_name='サンプル4 入力', input_data=b'1 1\n2\n', output_name='サンプル4 出力', output_data=b'-1\n'), ]) -+ @unittest.skip("Disabled by Guix") ++ @unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") def test_download_sample_cases_issue_192(self): # see https://github.com/kmyk/online-judge-tools/issues/192 self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/750').download_sample_cases(), [ -@@ -133,6 +136,7 @@ class YukicoderContestTest(unittest.TestCase): - self.assertEqual(YukicoderContest.from_url('https://yukicoder.me/contests/276').contest_id, 276) - self.assertEqual(YukicoderContest.from_url('http://yukicoder.me/contests/276/all').contest_id, 276) +@@ -128,6 +132,7 @@ class YukicoderProblemTest(unittest.TestCase): + ]) -+ @unittest.skip("Disabled by Guix") - def test_list_problems(self): - self.assertEqual(YukicoderContest.from_url('https://yukicoder.me/contests/276').list_problems(), [ - YukicoderProblem(problem_id=4401), -@@ -145,6 +149,7 @@ class YukicoderContestTest(unittest.TestCase): ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") + class YukicoderContestTest(unittest.TestCase): + def test_from_url(self): + self.assertEqual(YukicoderContest.from_url('https://yukicoder.me/contests/276').contest_id, 276) +@@ -144,6 +149,7 @@ class YukicoderContestTest(unittest.TestCase): + ]) + ++@unittest.skipIf(not NETWORK_ACCESSIBLE, "Network access required but not available") class YukicoderProblemGetInputFormatTest(unittest.TestCase): -+ @unittest.skip("Disabled by Guix") def test_normal(self): self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/1').get_input_format(), '\\(N\\)\n\\(C\\)\n\\(V\\)\n\\(S_1\\ S_2\\ S_3\\ \\dots\\ S_V\\)\n\\(T_1\\ T_2\\ T_3\\ \\dots\\ T_V\\)\n\\(Y_1\\ Y_2\\ Y_3\\ \\dots\\ Y_V\\)\n\\(M_1\\ M_2\\ M_3\\ \\dots\\ M_V\\)\n') - self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/2').get_input_format(), 'N\n') -@@ -154,6 +159,7 @@ class YukicoderProblemGetInputFormatTest(unittest.TestCase): - self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/512').get_input_format(), '$X$ $Y$\n$N$\n$A_1$ $\\cdots$ $A_N$\n') - self.assertEqual(YukicoderProblem.from_url('https://yukicoder.me/problems/no/777').get_input_format(), '$N$\n$A_1$ $B_1$ $C_1$\n$A_2$ $B_2$ $C_2$\n…\n$A_N$ $B_N$ $C_N$\n') +diff --git a/tests/utils.py b/tests/utils.py +index 6a34fa3..e858f70 100644 +--- a/tests/utils.py ++++ b/tests/utils.py +@@ -1,3 +1,8 @@ ++import os ++import socket ++ ++import requests ++ + import onlinejudge.dispatch as dispatch + from onlinejudge_api.main import main -+ @unittest.skip("Disabled by Guix") - def test_problem_without_input(self): - self.assertIsNone(YukicoderProblem.from_url('https://yukicoder.me/problems/no/3003').get_input_format()) -
\ No newline at end of file +@@ -12,3 +17,15 @@ def is_logged_in(url: str, *, memo={}) -> bool: + result = main(['login-service', '--check', url], debug=True) + memo[url] = bool((result.get('result') or {}).get('loggedIn')) + return memo[url] ++ ++ ++def can_reach_internet(): ++ """Check if we can actually reach the internet""" ++ try: ++ socket.create_connection(("google.com", 443), timeout=5) ++ return True ++ except Exception: ++ return False ++ ++ ++NETWORK_ACCESSIBLE = os.getenv("RUN_NETWORK_TESTS", "1") == "1" and can_reach_internet() +-- +2.51.0 + |
