blob: 23ec75b8e7325662030129d77ba790cd65b3e1fa [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var test = require('tape');
var $ = require('../../src/util/jquery');
var DestinationMarker = require('../../src/components/destination-marker');
var Place = require('../../src/place');
var mockMaps = require('../../mocks/google-maps');
function mockMarker(client, color) {
var map = new mockMaps.Map($('<div>')[0]);
return new DestinationMarker(mockMaps, map,
new Place(mockMaps.places.mockPlaceResult), client, color);
}
test('client events', function(t) {
var CLIENT1 = {};
var CLIENT2 = {};
var counts = [];
var h = [];
function makeHandler(i) {
return function() {
counts[i]++;
};
}
for (var i = 0; i < 6; i++) {
counts.push(0);
h.push(makeHandler(i));
}
var marker = mockMarker(CLIENT1, DestinationMarker.color.RED);
marker.onClick.add(h[0]);
marker.onClick.add([ h[1], h[2] ]);
marker.onClick.add(h[3]);
marker.pushClient(CLIENT2);
marker.onClick.add(h[4]);
marker.pushClient(CLIENT1);
marker.onClick.add(h[5]);
marker.marker.click();
t.deepEqual(counts, [1, 1, 1, 1, 1, 1], 'all handlers triggered');
marker.removeClient(CLIENT1);
marker.onClick.remove([ h[1], h[2] ]);
marker.marker.click();
t.deepEqual(counts, [1, 1, 1, 1, 2, 1], 'event handlers for CLIENT1 removed');
t.end();
});
test('colors', function(t) {
var marker = mockMarker('c1', DestinationMarker.color.RED);
var redIcon = marker.marker.getIcon();
marker.pushClient('c2', DestinationMarker.color.ORANGE);
var orangeIcon = marker.marker.getIcon();
t.notEqual(redIcon, orangeIcon, 'color changed with new client');
marker.setColor(DestinationMarker.color.YELLOW);
var yellowIcon = marker.marker.getIcon();
t.notEqual(orangeIcon, yellowIcon, 'color changed via setColor');
marker.pushClient('c3', DestinationMarker.color.GREEN);
var greenIcon = marker.marker.getIcon();
t.notEqual(yellowIcon, greenIcon,
'color changed with new client after setColor');
marker.setColor(DestinationMarker.color.BLUE);
var blueIcon = marker.marker.getIcon();
marker.removeClient('c2');
t.equal(marker.marker.getIcon(), blueIcon,
'color not changed with earlier client removed');
marker.pushClient('c4', DestinationMarker.color.PURPLE);
var purpleIcon = marker.marker.getIcon();
t.notEqual(blueIcon, purpleIcon,
'color changed with new client after earlier removal');
marker.removeClient('c4');
t.equal(marker.marker.getIcon(), blueIcon,
'color restored after client removal');
marker.removeClient('c3');
t.equal(marker.marker.getIcon(), redIcon,
'color restored to original after client removal with earlier removal of ' +
'intermediate client');
t.ok(marker.marker.getMap(), 'marker still attached to map');
marker.removeClient('c1');
t.notOk(marker.marker.getMap(), 'marker detached from map');
t.end();
});