module AtCoderFriends::Scraping::CustomTest
run tests on custom_test page
Public Instance Methods
check_custom_test()
click to toggle source
# File lib/at_coder_friends/scraping/custom_test.rb, line 37 def check_custom_test 100.times do page = agent.get(contest_url('custom_test/json?reload=true')) data = JSON.parse(page.body) return nil unless data.is_a?(Hash) && data['Result'] return data if data.dig('Result', 'Status') == 3 return data unless data['Interval'] sleep 1.0 * data['Interval'] / 1000 end nil end
code_test(infile)
click to toggle source
# File lib/at_coder_friends/scraping/custom_test.rb, line 9 def code_test(infile) path, _dir, _prg, _base, ext, _q = ctx.path_info.components langs = lang_id(ext) src = File.read(path, encoding: Encoding::UTF_8) data = File.read(infile) post_custom_test(langs, src, data) check_custom_test end
post_custom_test(langs, src, data)
click to toggle source
# File lib/at_coder_friends/scraping/custom_test.rb, line 19 def post_custom_test(langs, src, data) page = fetch_with_auth(contest_url('custom_test')) lang = find_lang(page, langs) script = page.search('script').text csrf_token = script.scan(/var csrfToken = "(.*)"/)[0][0] page = agent.post( contest_url('custom_test/submit/json'), 'data.LanguageId' => lang, 'sourceCode' => src, 'input' => data, 'csrf_token' => csrf_token ) msg = page.body raise AppError, msg unless msg.empty? end