64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | package ethreact | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"testing" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestReactorAdd(t *testing.T) { | ||
|  | 	reactor := New() | ||
|  | 	ch := make(chan Event) | ||
|  | 	reactor.Subscribe("test", ch) | ||
|  | 	if reactor.eventHandlers["test"] == nil { | ||
|  | 		t.Error("Expected new eventHandler to be created") | ||
|  | 	} | ||
|  | 	reactor.Unsubscribe("test", ch) | ||
|  | 	if reactor.eventHandlers["test"] != nil { | ||
|  | 		t.Error("Expected eventHandler to be removed") | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestReactorEvent(t *testing.T) { | ||
|  | 	var name string | ||
|  | 	reactor := New() | ||
|  | 	// Buffer the channel, so it doesn't block for this test | ||
|  | 	cap := 20 | ||
|  | 	ch := make(chan Event, cap) | ||
|  | 	reactor.Subscribe("even", ch) | ||
|  | 	reactor.Subscribe("odd", ch) | ||
|  | 	reactor.Post("even", "disappears") // should not broadcast if engine not started | ||
|  | 	reactor.Start() | ||
|  | 	for i := 0; i < cap; i++ { | ||
|  | 		if i%2 == 0 { | ||
|  | 			name = "even" | ||
|  | 		} else { | ||
|  | 			name = "odd" | ||
|  | 		} | ||
|  | 		reactor.Post(name, i) | ||
|  | 	} | ||
|  | 	reactor.Post("test", cap) // this should not block | ||
|  | 	i := 0 | ||
|  | 	reactor.Flush() | ||
|  | 	close(ch) | ||
|  | 	for event := range ch { | ||
|  | 		fmt.Printf("%d: %v", i, event) | ||
|  | 		if i%2 == 0 { | ||
|  | 			name = "even" | ||
|  | 		} else { | ||
|  | 			name = "odd" | ||
|  | 		} | ||
|  | 		if val, ok := event.Resource.(int); ok { | ||
|  | 			if i != val || event.Name != name { | ||
|  | 				t.Error("Expected event %d to be of type %s and resource %d, got ", i, name, i, val) | ||
|  | 			} | ||
|  | 		} else { | ||
|  | 			t.Error("Unable to cast") | ||
|  | 		} | ||
|  | 		i++ | ||
|  | 	} | ||
|  | 	if i != cap { | ||
|  | 		t.Error("excpected exactly %d events, got ", i) | ||
|  | 	} | ||
|  | 	reactor.Stop() | ||
|  | } |