aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js')
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js
new file mode 100644
index 00000000..d70c87fb
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ ONOS GUI -- SVG -- Zoom Service - Unit Tests
+ */
+describe('factory: fw/svg/zoom.js', function() {
+ var $log, fs, zs, svg, zoomLayer, zoomer;
+
+ var cz = 'ZoomService.createZoomer(): ',
+ d3s = ' (D3 selection) property defined';
+
+ beforeEach(module('onosUtil', 'onosSvg'));
+
+ beforeEach(inject(function (_$log_, FnService, ZoomService) {
+ $log = _$log_;
+ fs = FnService;
+ zs = ZoomService;
+ svg = d3.select('body').append('svg').attr('id', 'mySvg');
+ zoomLayer = svg.append('g').attr('id', 'myZoomlayer');
+ }));
+
+ afterEach(function () {
+ d3.select('#mySvg').remove();
+ // Note: since zoomLayer is a child of svg, it should be removed also
+ });
+
+ it('should define ZoomService', function () {
+ expect(zs).toBeDefined();
+ });
+
+ it('should define api functions', function () {
+ expect(fs.areFunctions(zs, ['createZoomer'])).toBeTruthy();
+ });
+
+ function verifyZoomerApi() {
+ expect(fs.areFunctions(zoomer, [
+ 'panZoom', 'reset', 'translate', 'scale', 'scaleExtent'
+ ])).toBeTruthy();
+ }
+
+ it('should fail gracefully with no option object', function () {
+ spyOn($log, 'error');
+
+ zoomer = zs.createZoomer();
+ expect($log.error).toHaveBeenCalledWith(cz + 'No "svg" (svg tag)' + d3s);
+ expect($log.error).toHaveBeenCalledWith(cz + 'No "zoomLayer" (g tag)' + d3s);
+ expect(zoomer).toBeNull();
+ });
+
+ it('should complain if we miss required options', function () {
+ spyOn($log, 'error');
+
+ zoomer = zs.createZoomer({});
+ expect($log.error).toHaveBeenCalledWith(cz + 'No "svg" (svg tag)' + d3s);
+ expect($log.error).toHaveBeenCalledWith(cz + 'No "zoomLayer" (g tag)' + d3s);
+ expect(zoomer).toBeNull();
+ });
+
+ it('should work with minimal parameters', function () {
+ spyOn($log, 'error');
+
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer
+ });
+ expect($log.error).not.toHaveBeenCalled();
+ verifyZoomerApi();
+ });
+
+ it('should start at scale 1 and translate 0,0', function () {
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer
+ });
+ verifyZoomerApi();
+ expect(zoomer.translate()).toEqual([0,0]);
+ expect(zoomer.scale()).toEqual(1);
+ });
+
+ it('should allow programmatic pan/zoom', function () {
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer
+ });
+ verifyZoomerApi();
+ expect(zoomer.translate()).toEqual([0,0]);
+ expect(zoomer.scale()).toEqual(1);
+
+ zoomer.panZoom([20,30], 3);
+ expect(zoomer.translate()).toEqual([20,30]);
+ expect(zoomer.scale()).toEqual(3);
+ });
+
+ it('should provide default scale extent', function () {
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer
+ });
+ expect(zoomer.scaleExtent()).toEqual([0.25, 10]);
+ });
+
+ it('should allow us to override the minimum zoom', function () {
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer,
+ zoomMin: 1.23
+ });
+ expect(zoomer.scaleExtent()).toEqual([1.23, 10]);
+ });
+
+ it('should allow us to override the maximum zoom', function () {
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer,
+ zoomMax: 13
+ });
+ expect(zoomer.scaleExtent()).toEqual([0.25, 13]);
+ });
+
+ // TODO: test zoomed() where we fake out the d3.event.sourceEvent etc...
+ // need to check default enabled (true) and custom enabled predicate
+ // need to check that the callback is invoked also
+
+ it('should invoke the callback on programmatic pan/zoom', function () {
+ var foo = { cb: function () {} };
+ spyOn(foo, 'cb');
+
+ zoomer = zs.createZoomer({
+ svg: svg,
+ zoomLayer: zoomLayer,
+ zoomCallback: foo.cb
+ });
+
+ zoomer.panZoom([0,0], 2);
+ expect(foo.cb).toHaveBeenCalled();
+ });
+
+});