def test_from_url(self): self.assertEqual(YukicoderService.from_url('https://yukicoder.me/'), YukicoderService()) self.assertEqual( YukicoderService.from_url('https://yukicoder.me/problems/no/9003'), YukicoderService()) self.assertIsNone(YukicoderService.from_url('https://atcoder.jp/'))
def test_get_problems(self): data = YukicoderService().get_problems(page=2, sort='no_asc') self.assertEqual(len(data), 50) self.assertEqual(data[3]['ナンバー'], 54) self.assertEqual(data[3]['問題名'], "Happy Hallowe'en") self.assertEqual(data[3]['レベル'], '4') self.assertEqual(data[3]['作問者/url'], '/users/4')
def test_get_user_favorite_wiki_10(self): data = YukicoderService().get_user_favorite_wiki(id=10) it = list( filter( lambda row: row['Wikiページ'] == 'decomposable_searching_problem', data)) self.assertEqual(len(it), 1)
def test_get_user_favorite_problem_10(self): data = YukicoderService().get_user_favorite_problem(id=10) it = list(filter(lambda row: row['ナンバー'] == 111, data)) self.assertEqual(len(it), 1) it = it[0] self.assertEqual(it['問題名'], 'あばばばば') self.assertEqual(it['レベル'], '1')
class LoginTest(unittest.TestCase): def snippet_call_login_check_failure(self, url): with tests.utils.sandbox(files=[]) as tempdir: path = 'cookie.jar' # use dummy cookie to check in an empty state proc = tests.utils.run(['--cookie', path, 'login', '--check', url]) self.assertEqual(proc.returncode, 1) def snippet_call_login_check_success(self, url): tests.utils.run(['login', '--check', url], check=True) def test_call_login_check_atcoder_failure(self): self.snippet_call_login_check_failure('https://atcoder.jp/') def test_call_login_check_codeforces_failure(self): self.snippet_call_login_check_failure('https://codeforces.com/') def test_call_login_check_hackerrank_failure(self): self.snippet_call_login_check_failure('https://www.hackerrank.com/') def test_call_login_check_topcoder_failure(self): self.snippet_call_login_check_failure( 'https://community.topcoder.com/') def test_call_login_check_toph_failure(self): self.snippet_call_login_check_failure('https://toph.co/') def test_call_login_check_yukicoder_failure(self): self.snippet_call_login_check_failure('https://yukicoder.me/') @unittest.skipIf(not tests.utils.is_logged_in(AtCoderService()), 'login is required') def test_call_login_check_atcoder_success(self): self.snippet_call_login_check_success('https://atcoder.jp/') @unittest.skipIf(not tests.utils.is_logged_in(CodeforcesService()), 'login is required') def test_call_login_check_codeforces_success(self): self.snippet_call_login_check_success('https://codeforces.com/') @unittest.skipIf(not tests.utils.is_logged_in(HackerRankService()), 'login is required') def test_call_login_check_hackerrank_success(self): self.snippet_call_login_check_success('https://www.hackerrank.com/') @unittest.skipIf(not tests.utils.is_logged_in(TopcoderService()), 'login is required') def test_call_login_check_topcoder_success(self): self.snippet_call_login_check_success( 'https://community.topcoder.com/') @unittest.skipIf(not tests.utils.is_logged_in(TophService()), 'login is required') def test_call_login_check_toph_success(self): self.snippet_call_login_check_success('https://toph.co/') @unittest.skipIf(not tests.utils.is_logged_in(YukicoderService()), 'login is required') def test_call_login_check_yukicoder_success(self): self.snippet_call_login_check_success('https://yukicoder.me/')
def test_get_user_favorite_10(self): data = YukicoderService().get_user_favorite(id=10) it = list(filter(lambda row: row['#'] == 10000, data)) self.assertEqual(len(it), 1) it = it[0] self.assertEqual(it['問題'], 'No.9000 Hello World! (テスト用)') self.assertEqual(it['結果'], 'AC') self.assertEqual(it['言語'], 'C++11')
class SubmitYukicoderTest(unittest.TestCase): @unittest.skipIf(not tests.utils.is_logged_in(YukicoderService()), 'login is required') def test_call_submit_9000(self): url = 'https://yukicoder.me/problems/no/9000' code = '\n'.join([ '#!/usr/bin/env python2', 'print "Hello World!"', ]) + '\n' files = [ { 'path': 'a.py', 'data': code }, ] with tests.utils.sandbox(files): tests.utils.run(['s', '-y', '--no-open', url, 'a.py'], check=True) @unittest.skipIf(not tests.utils.is_logged_in(YukicoderService()), 'login is required') def test_call_submit_beta_3_b(self): url = 'https://yukicoder.me/problems/527' code = r'''#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; string s; cin >> s; cout << a + b << ' ' << s << endl; return 0; } ''' files = [ { 'path': 'main.cpp', 'data': code }, ] with tests.utils.sandbox(files): tests.utils.run(['s', '-y', '--no-open', url, 'main.cpp'], check=True)
def test_get_solved_10(self): data = YukicoderService().get_solved(id=10) self.assertGreater(len(data), 200) self.assertIn('No', data[0]) self.assertIn('ProblemId', data[0]) self.assertIn('Title', data[0]) self.assertIn('AuthorId', data[0]) self.assertIn('TesterId', data[0]) self.assertIn('Level', data[0]) self.assertIn('ProblemType', data[0]) self.assertIn('Tags', data[0])
def test_get_user_10(self): data = YukicoderService().get_user(id=10) self.assertIn('Id', data) self.assertIn('Name', data) self.assertIn('Solved', data) self.assertIn('Level', data) self.assertIn('Rank', data) self.assertIn('Score', data) self.assertIn('Points', data) self.assertEqual(data['Id'], 10) self.assertEqual(data['Name'], 'yuki2006')
class DownloadYukicoderTest(unittest.TestCase): def snippet_call_download(self, *args, **kwargs): tests.command_download.snippet_call_download(self, *args, **kwargs) def test_call_download_yukicoder_100(self): self.snippet_call_download( 'http://yukicoder.me/problems/100', { 'sample-3.out': '63a98316f78c5127e702db8fbea612a6', 'sample-2.in': '3b6feb4b7d767c8e7314f59a1749d544', 'sample-2.out': '9f4c0b1fca5cb6f886aa2e54442b1e1b', 'sample-3.in': 'c12ec911666a5d65bf53e234291e402c', 'sample-1.in': 'c8a8eeb947c8a1d6700d6f7fd151cb00', 'sample-1.out': '3bb50ff8eeb7ad116724b56a820139fa', }) @unittest.skipIf(not tests.utils.is_logged_in(YukicoderService()), 'login is required') def test_call_download_yukicoder_no_8_system(self): self.snippet_call_download( 'https://yukicoder.me/problems/no/8', { '01.txt.in': '04e90eb0c4a65eefa084dfea8e89de9f', '01.txt.out': 'fc07e56c1012af450b912af02f1e7c30', '02.txt.in': 'e867414a12769d8adc9086093620b4a3', '02.txt.out': '92289ff0469cfacb19a2809e6b44b93a', '03.txt.in': 'c15d6580553f2be2c4b133441da760f3', '03.txt.out': '5ff2d623f9ec55b7207a0e15f076a511', '04.txt.in': 'e28f58da56e572f4f27f9b837a4fe8c5', '04.txt.out': 'b9d27fd37514d704abe776e239029fae', '05.txt.in': 'd04e3cd98784a870b8dae31ab8e2c935', '05.txt.out': '559ffd2e020994c7117fdc38da1dd97d', '06.txt.in': '897059f9374e64ed03e09a5b5044794c', '06.txt.out': 'a3d50a58dc67267b5e4619ecf73b2dcc', '07.txt.in': '69d224c83e03e0c3f6ff466fa06bc7dc', '07.txt.out': 'a3d50a58dc67267b5e4619ecf73b2dcc', '08.txt.in': 'de61c37c042526933ac9ff5c99dd8681', '08.txt.out': 'a3d50a58dc67267b5e4619ecf73b2dcc', '09.txt.in': 'b627b556c53cb20b9ae8fa4665925aa9', '09.txt.out': 'a3d50a58dc67267b5e4619ecf73b2dcc', '10.txt.in': '735f5246a7bde15f85ae368917eee087', '10.txt.out': 'a3d50a58dc67267b5e4619ecf73b2dcc', '99_system_test1.txt.in': '1e5aa1c7ed5de43807f7ceae3ab60b82', '99_system_test1.txt.out': '03a0df412a4b34652f3ef094e6dd4eda', }, is_system=True)
def test_get_submissions(self): data = YukicoderService().get_submissions(page=3, status='TLE') self.assertEqual(len(data), 50) self.assertEqual(data[4]['結果'], 'TLE')
def test_get_solved_0(self): data = YukicoderService().get_solved(id=0) self.assertIsNone(data)
def test_get_solved_yuki2006(self): data = YukicoderService().get_solved(name='yuki2006') self.assertGreater(len(data), 200)
def test_get_user_0(self): data = YukicoderService().get_user(id=0) self.assertIsNone(data)
def test_get_user_yuki2006(self): data = YukicoderService().get_user(name='yuki2006') self.assertEqual(data['Id'], 10) self.assertEqual(data['Name'], 'yuki2006')
def test_get_submissions(self): data = YukicoderService().get_submissions(page=3, status='TLE') self.assertEqual(len(data), 50) # yukicoder returns sentence such as 'TLE\n(最新)--\nAC' when the submission was rejudged and judge status was changed. self.assertTrue(data[4]['結果'] == 'TLE' or 'TLE\n(最新)' in data[4]['結果'])