Index: TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java =================================================================== diff -u -r8e1ed196bfc1c28860729d8b0a23878bb3ecf1e7 -r84a30dc664676f42b1dbe5ed1699597a194ed7b7 --- TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java (.../MockLearner.java) (revision 8e1ed196bfc1c28860729d8b0a23878bb3ecf1e7) +++ TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java (.../MockLearner.java) (revision 84a30dc664676f42b1dbe5ed1699597a194ed7b7) @@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.Random; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -95,7 +96,7 @@ private static final String SCRATCHIE_FINISH_SUBSTRING = "/lams/tool/lascrt11/learning/finish.do"; private static final String SCRATCHIE_RESULTS_SUBSTRING = "/lams/tool/lascrt11/learning/showResults.do"; - private static final Pattern SCRATCHIE_SCRATCH_PATTERN = Pattern.compile("scratchItem\\(\\d+, (\\d+)\\)"); + private static final Pattern SCRATCHIE_SCRATCH_PATTERN = Pattern.compile("scratchItem\\((\\d+), (\\d+)\\)"); private static final Pattern SESSION_MAP_ID_PATTERN = Pattern.compile("sessionMapID=(.+)\\&"); @@ -335,9 +336,15 @@ private WebResponse handleScratchie(WebResponse resp) throws SAXException, IOException { String asText = resp.getText(); Matcher m = MockLearner.SCRATCHIE_SCRATCH_PATTERN.matcher(asText); - List answerUids = new ArrayList(); + Map> uids = new TreeMap>(); while (m.find()) { - answerUids.add(Long.valueOf(m.group(1))); + Long questionID = Long.valueOf(m.group(1)); + List answerUids = uids.get(questionID); + if (answerUids == null) { + answerUids = new ArrayList(); + uids.put(questionID, answerUids); + } + answerUids.add(Long.valueOf(m.group(2))); } String scratchURL = "/lams/tool/lascrt11/learning/isAnswerCorrect.do?answerUid="; @@ -356,16 +363,23 @@ } Random generator = new Random(); - while (!answerUids.isEmpty()) { + while (!uids.isEmpty()) { + Long questionID = uids.keySet().iterator().next(); + List answerUids = uids.get(questionID); + int index = generator.nextInt(answerUids.size()); Long answerUid = answerUids.get(index); answerUids.remove(index); WebResponse scratchResponse = (WebResponse) new Call(wc, test, "Scratch response", scratchURL + answerUid) .execute(); boolean answerCorrect = scratchResponse.getText().indexOf("true") != -1; - MockLearner.log.debug("Scratched answer UID " + answerUid + " and it was " + MockLearner.log.debug("Scratched answer UID " + answerUid + " for question " + questionID + " and it was " + (answerCorrect ? "correct" : "incorrect")); + if (answerCorrect) { + uids.remove(questionID); + } + if (recordScratchedURL != null) { MockLearner.log.debug("Recording scratched answer UID " + answerUid); new Call(wc, test, "Record answer scratched", recordScratchedURL + answerUid).execute(); @@ -383,10 +397,6 @@ log.warn("Waiting to scratch was interuppted"); } } - - if (answerCorrect) { - break; - } } String resultsURL = findURLInLocationHref(resp, MockLearner.SCRATCHIE_RESULTS_SUBSTRING);