package org.sakaiproject.tool.assessment.samlite.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Iterator;
import org.sakaiproject.tool.assessment.qti.util.XmlStringBuffer;
import org.sakaiproject.tool.assessment.samlite.api.Answer;
import org.sakaiproject.tool.assessment.samlite.api.Question;
import org.sakaiproject.tool.assessment.samlite.api.QuestionGroup;
import org.sakaiproject.tool.assessment.samlite.api.SamLiteService;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.w3c.dom.Document;
public class SamLiteServiceTest extends AbstractDependencyInjectionSpringContextTests {
protected String[] getConfigLocations() {
return new String[] { "classpath*:**/testbeans.xml" };
}
private SamLiteService samLiteService;
public void setSamLiteService(SamLiteService samLiteService) {
this.samLiteService = samLiteService;
}
public void testCreateQuiz() throws IOException {
String quizName = "Test Quiz";
String quizDescription = "Test Description";
//String quizData = "Question 1 (10 points)\r\nIs this right?\r\n*a. Yes\r\nb. No\r\nSave answer\r\n";
InputStream is = this.getClass().getResourceAsStream("TestQuiz.txt");
String line = "";
BufferedReader in = new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
while ((line = in.readLine()) != null) {
buffer.append(line);
buffer.append('\r');
buffer.append('\n');
}
QuestionGroup questionGroup = samLiteService.parse(quizName, quizDescription, buffer.toString());
List questions = questionGroup.getQuestions();
//printQuestions(questions);
// There should be 9 questions in the test quiz
assertEquals(questions.size(), 9);
Question q1 = (Question) questions.get(0);
assertEquals(q1.getQuestionType(), Question.MULTIPLE_CHOICE_QUESTION);
Question q2 = (Question) questions.get(1);
assertEquals(q2.getQuestionType(), Question.MULTIPLE_CHOICE_MULTIPLE_ANSWER_QUESTION);
assertEquals(q2.getQuestionPoints(), "15");
Question q3 = (Question) questions.get(2);
assertEquals(q3.getQuestionType(), Question.FILL_IN_THE_BLANK_QUESTION);
Question q4 = (Question) questions.get(3);
assertEquals(q4.getQuestionType(), Question.FILL_IN_THE_BLANK_QUESTION);
assertEquals(q4.getCorrectAnswer(), "Blank");
Question q5 = (Question) questions.get(4);
assertEquals(q5.getQuestionType(), Question.SHORT_ESSAY_QUESTION);
Question q6 = (Question) questions.get(5);
assertEquals(q6.getQuestionType(), Question.MULTIPLE_CHOICE_QUESTION);
assertEquals(q6.getAnswers().size(), 3);
Question q7 = (Question) questions.get(6);
assertEquals(q7.getQuestionType(), Question.TRUE_FALSE_QUESTION);
assertEquals(q7.getCorrectAnswer(), "True");
Question q8 = (Question) questions.get(7);
assertEquals(q8.getQuestionType(), Question.SHORT_ESSAY_QUESTION);
Question q9 = (Question) questions.get(8);
assertEquals(q9.getQuestionType(), Question.MULTIPLE_CHOICE_QUESTION);
assertEquals(q9.getAnswers().size(), 3);
Document doc = samLiteService.createDocument(questionGroup);
//printDocument(doc);
}
private void printDocument(Document doc) {
XmlStringBuffer xmlBuffer = new XmlStringBuffer(doc);
System.out.println(xmlBuffer.stringValue());
}
private void printQuestions(List questions) {
if (null != questions) {
for (Iterator it = questions.iterator();it.hasNext();) {
Question question = (Question)it.next();
System.out.println("Question " + question.getQuestionNumber() + " (" + question.getQuestionPoints() + " points)");
System.out.println();
System.out.println(question.getQuestion());
System.out.println();
if (null != question.getAnswers()) {
for (Iterator ait = question.getAnswers().iterator();ait.hasNext();) {
Answer answer = (Answer)ait.next();
if (answer.isCorrect())
System.out.print("*");
System.out.println(answer.getId() + ". " + answer.getText());
}
}
System.out.println();
if (question.getQuestionType() == Question.FILL_IN_THE_BLANK_QUESTION)
System.out.println("> " + question.getCorrectAnswer());
System.out.println();
System.out.println();
}
}
}
}