Skip to content

Commit f627a16

Browse files
author
mdodsworth
committed
adding specs test for button observer
1 parent 0d33a25 commit f627a16

File tree

4 files changed

+51
-0
lines changed

4 files changed

+51
-0
lines changed

observer-testing.scala

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ui
2+
3+
import observer._
4+
5+
class ObservableButton(name :String) extends Button(name) with Subject {
6+
override def click() = {
7+
super.click()
8+
println("this is a test")
9+
notifyObservers
10+
}
11+
}
12+
13+
class ButtonCounter {
14+
var count = 0
15+
def receiveUpdate(subject :Any) = count += 1
16+
}

observer.scala

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package observer
2+
3+
trait Subject {
4+
type Observer = { def receiveUpdate(subject :Any) }
5+
6+
private var observers = List[Observer]()
7+
def addObserver(observer :Observer) = observers ::= observer
8+
def notifyObservers = observers foreach(_.receiveUpdate(this))
9+
}
10+

specs-test.scala

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package ui
2+
3+
import org.specs._
4+
import observer._
5+
6+
object ButtonObserverSpec extends Specification {
7+
"A button observer" should {
8+
"observer button clicks" in {
9+
val observableButton = new ObserverableButton("Testing")
10+
val buttonObserver = new ButtonCounter
11+
observableButton addObserver buttonObserver
12+
13+
for (i <- 1 to 3) observableButton.click()
14+
buttonObserver.count mustEqual 3
15+
}
16+
}
17+
}

widget.scala

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ui
2+
3+
abstract class Widget
4+
5+
class Button(val name:String) extends Widget {
6+
def click() = println("the user clicked something")
7+
}
8+

0 commit comments

Comments
 (0)