.o.'s blog

By .o., history, 4 years ago, In English

While preparing problems with subtasks using Polygon, it's super annoying that we cannot set test groups using test scripts.

As a workaround, I wrote a simple script.

Test group of each test = the last token of the test generation command


function setPolygonTestGroupAutomatically() { const mapping = {}; $("#testsTable tbody tr code") .each((_, v) => { const vid = v.parentNode.parentNode.id; if(!vid.startsWith('test_')) return; const idx = parseInt(vid.substring('test_'.length)); const tokens = v.innerText.split(" "); // Test generation command const testGroup = tokens[tokens.length - 1]; // Last token of the test generation command if (!mapping[testGroup]) { mapping[testGroup] = []; } mapping[testGroup].push(idx); }); const keyToIndices = Object.entries(mapping); function go (idx) { if (idx == keyToIndices.length) { console.log("Changed everything!"); return; } const [groupName, indices] = keyToIndices[idx]; $.post("/data/tests", { action: "setMultipleTestGroup", session: $('#session').text(), testset: Object.fromEntries(new URLSearchParams($("#add-test").attr('href')))['testset'], requestString: indices.map(idx => `testIndex=${idx}`).join('&'), groupName, ccid: $('meta[name="ccid"]').attr('content') }).error((err) => console.error(err)) .then((data) => { console.log(`Done`, groupName, indices, data); setTimeout(go, 1000, idx+1); }); } go(0); } setPolygonTestGroupAutomatically();

Paste the script above to the developer console on the tests page.

UPD: Added 1-second delay between each API call. It seems if we call the API multiple times simultaneously, Polygon will automatically change the dollars of the test script into non-consecutive numbers, making the whole working copy inaccessible.

  • Vote: I like it
  • +94
  • Vote: I do not like it

| Write comment?
»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by .o. (previous revision, new revision, compare).

»
10 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Title should be "Script to automatically update..." , not "automatic script ..."