Skip to content
This repository was archived by the owner on Nov 30, 2018. It is now read-only.

Commit 64393df

Browse files
committed
Merge pull request #1432 from nmccready/issue_1271_circle_events
Circle Specs
2 parents e73fa9f + 105834b commit 64393df

File tree

2 files changed

+75
-10
lines changed

2 files changed

+75
-10
lines changed

spec/coffee/directives/api/circle.spec.coffee

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ describe 'uiGmapCircle', ->
44
modelClicked = false
55

66
afterEach ->
7+
window.google.maps.event.clearListeners()
78
GCircle.resetInstances()
89
modelClicked = false
910

@@ -46,6 +47,7 @@ describe 'uiGmapCircle', ->
4647
visible: true
4748
events:
4849
radius_changed: (gObject) ->
50+
center_changed: (gObject) ->
4951
control: {}
5052

5153
apiMock = window['uiGmapInitiator']
@@ -56,10 +58,8 @@ describe 'uiGmapCircle', ->
5658
@injects.push (uiGmapCircle) =>
5759
@subject = uiGmapCircle
5860

59-
@circle.events =
60-
radius_changed: ->
61-
62-
_spy = spyOn @circle.events, 'radius_changed'
61+
spyOn @circle.events, 'radius_changed'
62+
spyOn @circle.events, 'center_changed'
6363

6464
map.circle = @circle
6565

@@ -78,7 +78,6 @@ describe 'uiGmapCircle', ->
7878
describe 'events', ->
7979
it 'call radius changed once', (done) ->
8080

81-
8281
listener = GCircle.creationSubscribe @, (gObject) =>
8382
_.delay =>
8483
window.google.maps.event.fireListener(gObject,'radius_changed')
@@ -92,6 +91,66 @@ describe 'uiGmapCircle', ->
9291
GCircle.creationUnSubscribe listener
9392
, 500
9493

94+
describe "updates gObject from model", ->
95+
it 'change center', (done) ->
96+
#issue 1271
97+
@digest =>
98+
@timeout =>
99+
@circle.center =
100+
longitude: 50
101+
latitude: -50
102+
# @circle.radius = 1
103+
@digest =>
104+
@timeout =>
105+
gTestObject = @circle.control.getCircle().getCenter()
106+
expect(gTestObject?.lng()).toBe(50)
107+
expect(gTestObject?.lat()).toBe(-50)
108+
done()
109+
, 500
110+
111+
# describe "updates model from gObject", ->
112+
# it 'change center', (done) ->
113+
# listener = GCircle.creationSubscribe @, (gObject) =>
114+
# _.delay =>
115+
# gObject.setCenter
116+
# lng: -> 50
117+
# lat: -> -50
118+
# @digest =>
119+
# @timeout =>
120+
# expect(@circle.center.latitude).toBe(-50)
121+
# expect(@circle.center.longitude).toBe(50)
122+
# done()
123+
# @digest =>
124+
# @timeout =>
125+
# GCircle.creationUnSubscribe listener
126+
# , 500
127+
128+
it 'change radius does not fire center_changed', (done) ->
129+
listener = GCircle.creationSubscribe @, (gObject) =>
130+
_.delay =>
131+
@digest =>
132+
gObject.setRadius 200
133+
expect(@circle.events.radius_changed).toHaveBeenCalled()
134+
expect(@circle.events.center_changed).not.toHaveBeenCalled()
135+
done()
136+
@digest =>
137+
@timeout =>
138+
GCircle.creationUnSubscribe listener
139+
, 500
140+
141+
it 'change center does not fire radius_changed', (done) ->
142+
listener = GCircle.creationSubscribe @, (gObject) =>
143+
_.delay =>
144+
@digest =>
145+
gObject.setCenter
146+
lng: -> 50
147+
lat: -> -50
148+
expect(@circle.events.center_changed).toHaveBeenCalled()
149+
expect(@circle.events.radius_changed).not.toHaveBeenCalled()
150+
done()
151+
@digest =>
152+
GCircle.creationUnSubscribe listener
153+
95154
it 'exists', ->
96155
expect(@subject).toBeDefined()
97156

@@ -100,4 +159,4 @@ describe 'uiGmapCircle', ->
100159
@timeout =>
101160
expect(@circle.control.getCircle).toBeDefined()
102161
expect(@circle.control.getCircle()).toEqual(jasmine.any(GCircle))
103-
done()
162+
done()

spec/coffee/helpers/google-api-mock.coffee

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ angular.module('uiGmapgoogle-maps.mocks', ['uiGmapgoogle-maps'])
140140
@props.forEach (p) =>
141141
@["set#{capitalize p}"] = (val) =>
142142
@[p] = val
143+
if p == "radius" or p == "center"
144+
window.google.maps.event.fireAllListeners "#{p}_changed", @
143145

144146
setOptions: (o)=>
145147
super(o)
@@ -363,10 +365,13 @@ angular.module('uiGmapgoogle-maps.mocks', ['uiGmapgoogle-maps'])
363365
toPush = {}
364366
toPush.obj = thing
365367
toPush.events = {}
366-
toPush.events[eventName] = callBack
368+
toPush.events[eventName] = [callBack]
367369
listeners.push toPush
368370
else
369-
found.events[eventName] = callBack
371+
if !found.events[eventName]
372+
found.events[eventName] = [callBack]
373+
else
374+
found.events[eventName].push callBack
370375

371376
event.addListenerOnce = (thing, eventName, callBack) ->
372377
callBack() #forcing immediate return for idle so async api kicks off
@@ -386,7 +391,8 @@ angular.module('uiGmapgoogle-maps.mocks', ['uiGmapgoogle-maps'])
386391
event.fireListener = (thing, eventName) ->
387392
found = _.find listeners, (obj)->
388393
obj.obj == thing
389-
found.events[eventName](found.obj) if found? and found?.events[eventName]?
394+
if found? and found?.events[eventName]?
395+
found.events[eventName].forEach (cb) -> cb(found.obj)
390396

391397
unless event.normalizedEvents
392398
event.normalizedEvents = ->
@@ -402,7 +408,7 @@ angular.module('uiGmapgoogle-maps.mocks', ['uiGmapgoogle-maps'])
402408
event.fireAllListeners = (eventName, state) ->
403409
listeners.forEach (obj)->
404410
if obj.events[eventName]?
405-
obj.events[eventName](state)
411+
obj.events[eventName].forEach (cb) -> cb(state)
406412

407413
window.google.maps.event = event
408414
return listeners

0 commit comments

Comments
 (0)