/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.informer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import org.drools.informer.MultipleChoiceQuestion.PossibleAnswer; import org.junit.Test; /** * @author Damon Horrell */ public class PossibleAnswersTest { @Test public void testSetPossibleAnswers() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question.setPossibleAnswers(new MultipleChoiceQuestion.PossibleAnswer[] { new MultipleChoiceQuestion.PossibleAnswer(null, "select..."), new PossibleAnswer("a", "apple"), new MultipleChoiceQuestion.PossibleAnswer("b", "banana"), null, new PossibleAnswer("c", "carrot, cucumber, or cauliflower"), new PossibleAnswer("d"), new PossibleAnswer("e=?", "e=mc^2"), new PossibleAnswer("===", "=equals=") }); assertArrayEquals(new PossibleAnswer[] { new PossibleAnswer(null, "select..."), new PossibleAnswer("a", "apple"), new PossibleAnswer("b", "banana"), new PossibleAnswer("c", "carrot, cucumber, or cauliflower"), new PossibleAnswer("d"), new PossibleAnswer("e=?", "e=mc^2"), new PossibleAnswer("===", "=equals=") }, question .getPossibleAnswers()); assertEquals( "null=select...,a=apple,b=banana,c=carrot\\, cucumber\\, or cauliflower,d=,e\\=?=e\\=mc^2,\\=\\=\\==\\=equals\\=", question.getInternalPossibleAnswersAsString()); } @SuppressWarnings("deprecation") @Test public void testSetPossibleAnswersAsString() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question .setPossibleAnswersAsString("null=select...,a=apple,b=banana,c=carrot\\, cucumber\\, or cauliflower,d=,e\\=?=e\\=mc^2,\\=\\=\\==\\=equals\\="); assertArrayEquals(new PossibleAnswer[] { new PossibleAnswer(null, "select..."), new PossibleAnswer("a", "apple"), new PossibleAnswer("b", "banana"), new PossibleAnswer("c", "carrot, cucumber, or cauliflower"), new PossibleAnswer("d"), new PossibleAnswer("e=?", "e=mc^2"), new PossibleAnswer("===", "=equals=") }, question .getPossibleAnswers()); assertEquals( "null=select...,a=apple,b=banana,c=carrot\\, cucumber\\, or cauliflower,d=,e\\=?=e\\=mc^2,\\=\\=\\==\\=equals\\=", question.getInternalPossibleAnswersAsString()); } @Test public void testSetPossibleAnswersWithIdContainingComma() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); try { question.setPossibleAnswers(new PossibleAnswer[] { new PossibleAnswer("a", "apple"), new PossibleAnswer("b", "banana"), null, new PossibleAnswer("c,d", "carrot, cucumber, or donkey") }); fail(); } catch (IllegalArgumentException e) { } } @Test public void testSetPossibleAnswersNull() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question.setPossibleAnswers(null); assertArrayEquals(null, question.getPossibleAnswers()); assertEquals(null, question.getInternalPossibleAnswersAsString()); } @SuppressWarnings("deprecation") @Test public void testSetPossibleAnswersAsStringNull() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question.setPossibleAnswersAsString(null); assertArrayEquals(null, question.getPossibleAnswers()); assertEquals(null, question.getInternalPossibleAnswersAsString()); } @Test public void testSetPossibleAnswersEmpty() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question.setPossibleAnswers(new PossibleAnswer[0]); assertArrayEquals(null, question.getPossibleAnswers()); assertEquals(null, question.getInternalPossibleAnswersAsString()); } @SuppressWarnings("deprecation") @Test public void testSetPossibleAnswersAsStringEmpty() { MultipleChoiceQuestion question = new MultipleChoiceQuestion(); question.setPossibleAnswersAsString(""); assertArrayEquals(null, question.getPossibleAnswers()); assertEquals(null, question.getInternalPossibleAnswersAsString()); } @Test public void testInsertAndRemovePossibleAnswer() { // Remember - building up using insert is inefficient. it // is only for amending a list once created // insert tests MultipleChoiceQuestion question = new MultipleChoiceQuestion(); assertEquals(null, question.getInternalPossibleAnswersAsString()); question.insertPossibleAnswer(new PossibleAnswer("b", "banana"), -10); assertEquals("b=banana", question.getInternalPossibleAnswersAsString()); question.insertPossibleAnswer(new PossibleAnswer("d", "dock"), 10); assertEquals("b=banana,d=dock", question.getInternalPossibleAnswersAsString()); question.insertPossibleAnswer(new PossibleAnswer("e", "egg"), 2); assertEquals("b=banana,d=dock,e=egg", question.getInternalPossibleAnswersAsString()); question.insertPossibleAnswer(new PossibleAnswer("c", "carrot"), 1); assertEquals("b=banana,c=carrot,d=dock,e=egg", question.getInternalPossibleAnswersAsString()); question.insertPossibleAnswer(new PossibleAnswer("a", "apple"), 0); assertEquals("a=apple,b=banana,c=carrot,d=dock,e=egg", question.getInternalPossibleAnswersAsString()); // has tests assertTrue("Did not contain Apple", question.hasPossibleAnswer("a")); assertTrue("Did not contain Banana", question.hasPossibleAnswer("b")); assertTrue("Did not contain egg", question.hasPossibleAnswer("e")); assertFalse("Contains false entry [k]", question.hasPossibleAnswer("k")); // remove tests question.removePossibleAnswer("e"); assertFalse("Contains removed entry [e]", question.hasPossibleAnswer("e")); question.insertPossibleAnswer(new PossibleAnswer("e=?", "e=mc^2"), 4); assertFalse("Contains removed entry [e] after inserting [e=?]", question.hasPossibleAnswer("e")); assertTrue("Did not contain entry [e=?]", question.hasPossibleAnswer("e=?")); question.removePossibleAnswer("a"); assertFalse("Contains removed entry [a]", question.hasPossibleAnswer("a")); question.removePossibleAnswer("c"); assertFalse("Contains removed entry [c]", question.hasPossibleAnswer("c")); question.removePossibleAnswer("e=?"); assertEquals("b=banana,d=dock", question.getInternalPossibleAnswersAsString()); // test removing chosen item question.setAnswerType(Question.QuestionType.TYPE_TEXT); question.setAnswer("b"); question.insertPossibleAnswer(new PossibleAnswer("a", "apple"), 0); assertEquals("a=apple,b=banana,d=dock", question.getInternalPossibleAnswersAsString()); assertTrue("Did not contain Apple", question.hasPossibleAnswer("a")); assertEquals("b", question.getAnswer()); question.removePossibleAnswer("a"); assertEquals("b", question.getAnswer()); question.removePossibleAnswer("b"); assertNull("The answer was not set to null when the associated possible answer was removed", question.getAnswer()); } }