samples/effectivelist/test/org/apidesign/effectivelist/ListTest.scala
author Jaroslav Tulach <jtulach@netbeans.org>
Fri, 31 Aug 2012 20:16:57 +0200
changeset 402 e25dbfce40e9
child 403 ebe08056c60c
permissions -rw-r--r--
Example demostrating how to use trait to provide effective implementation of linked list while keeping encapsulation
     1 package org.apidesign.effectivelist
     2 
     3 import org.junit._
     4 import Assert._
     5 
     6 class ListTest {
     7   case class Person(name : String, age : Int) extends Listable[Person]
     8   
     9   var list : List[Person] = _
    10   var p1, p2, p3, p4 : Person = _
    11   
    12   @Before def initializeListAndValues: Unit = {
    13     list = new List[Person]
    14     p1 = new Person("Jarda", 39)
    15     p2 = new Person("Sona", 37)
    16     p3 = new Person("Anna", 7)
    17     p4 = new Person("Ondra", 6)
    18   }
    19 
    20   @Test def tryFewAdditions = {
    21     assertTrue(list.add(p1))
    22     assertTrue(list.add(p2))
    23     assertTrue(list.add(p3))
    24     assertTrue(list.add(p4))
    25     
    26     assertEquals("Jarda was inserted first", "Jarda", list.get(0).name)
    27     assertEquals("Sona was inserted 2nd", 37, list.get(1).age)
    28     assertEquals("Anna was inserted 3rd", "Anna", list.get(2).name)
    29     assertEquals("Anna was inserted 4th", 6, list.get(3).age)
    30   }
    31 
    32   @Test def addFewAndThenTryToRemoveHead() = {
    33     assertTrue(list.add(p1))
    34     assertTrue(list.add(p2))
    35     assertTrue(list.add(p3))
    36     
    37     assertEquals("Size it three", 3, list.size())
    38     assertEquals("Jarda was inserted first", "Jarda", list.get(0).name)
    39 
    40     assertFalse("Can't remove not added element", list.remove(p4))
    41     assertTrue("OK to remove head", list.remove(p1))
    42     
    43     assertEquals("Sona is now first", "Sona", list.get(0).name)
    44     assertEquals("Anna is now 2nd", "Anna", list.get(1).name)
    45     
    46     try {
    47       list.get(2)
    48       fail("Previous call should throw exception")
    49     } catch {
    50       case e : IndexOutOfBoundsException => ; // OK
    51     }
    52   }
    53   
    54   @Test def addFewAndThenTryToRemoveSecond() = {
    55     assertEquals(0, list.size())
    56     assertTrue(list.add(p1))
    57     assertEquals(1, list.size())
    58     assertTrue(list.add(p2))
    59     assertEquals(2, list.size())
    60     assertTrue(list.add(p3))
    61     assertEquals(3, list.size())
    62     
    63     assertEquals("Size it three", 3, list.size())
    64     assertEquals("Jarda was inserted first", "Jarda", list.get(0).name)
    65 
    66     assertFalse("Can't remove not added element", list.remove(p4))
    67     assertTrue("OK to remove head", list.remove(p2))
    68     
    69     assertEquals("Jarda is still first", "Jarda", list.get(0).name)
    70     assertEquals("Anna is now 2nd", "Anna", list.get(1).name)
    71     
    72     try {
    73       list.get(2);
    74       fail("Previous call should throw exception")
    75     } catch {
    76       case e : IndexOutOfBoundsException => ; // OK
    77     }
    78     assertEquals(2, list.size());
    79     
    80     list.remove(p1)
    81     list.remove(p3)
    82     
    83     assertEquals("Not it is empty", 0, list.size())
    84   }
    85 }