mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-02-23 18:50:16 +00:00
Unit tests for moving & zooming directives added
This commit is contained in:
parent
3405f89a4a
commit
c3d8fd2399
169
src/app/cartography/directives/moving-canvas.directive.spec.ts
Normal file
169
src/app/cartography/directives/moving-canvas.directive.spec.ts
Normal file
@ -0,0 +1,169 @@
|
||||
import { ComponentFixture, TestBed, async, tick, fakeAsync } from '@angular/core/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { Context } from '../models/context';
|
||||
import { MovingEventSource } from '../events/moving-event-source';
|
||||
import { MovingCanvasDirective } from './moving-canvas.directive';
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
template: `<svg #svg class="map" preserveAspectRatio="none" movingCanvas><g class="canvas" transform="translate(0, 0) scale(1)"></g></svg>`
|
||||
})
|
||||
class DummyComponent {
|
||||
constructor(){}
|
||||
}
|
||||
|
||||
describe('MovingCanvasDirective', () => {
|
||||
let component: DummyComponent;
|
||||
let fixture: ComponentFixture<DummyComponent>;
|
||||
let movingEventSource = new MovingEventSource();
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [NoopAnimationsModule],
|
||||
providers: [
|
||||
{ provide: MovingEventSource, useValue: movingEventSource },
|
||||
{ provide: Context, useClass: Context }
|
||||
],
|
||||
declarations: [DummyComponent, MovingCanvasDirective]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DummyComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should move canvas if moving mode is activated', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let xMovement: number = 200;
|
||||
let yMovement: number = 200;
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mousedown', {
|
||||
bubbles: true,
|
||||
clientX: 0,
|
||||
clientY: 0,
|
||||
screenY: 0,
|
||||
screenX: 0,
|
||||
view: window
|
||||
}));
|
||||
tick();
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: xMovement,
|
||||
movementY: yMovement
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(${xMovement}, ${yMovement}) scale(1)`);
|
||||
}));
|
||||
|
||||
it('should not move canvas if moving mode is not activated', fakeAsync(() => {
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mousedown', {
|
||||
bubbles: true,
|
||||
clientX: 0,
|
||||
clientY: 0,
|
||||
screenY: 0,
|
||||
screenX: 0,
|
||||
view: window
|
||||
}));
|
||||
tick();
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: 1000,
|
||||
movementY: 1000
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual('translate(0, 0) scale(1)');
|
||||
}));
|
||||
|
||||
it('should not move canvas after mouseup event', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let xMovement: number = 200;
|
||||
let yMovement: number = 200;
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mousedown', {
|
||||
bubbles: true,
|
||||
clientX: 0,
|
||||
clientY: 0,
|
||||
screenY: 0,
|
||||
screenX: 0,
|
||||
view: window
|
||||
}));
|
||||
tick();
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: xMovement,
|
||||
movementY: yMovement
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(${xMovement}, ${yMovement}) scale(1)`);
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mouseup', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: 1000,
|
||||
movementY: 1000
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: xMovement,
|
||||
movementY: yMovement
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(${xMovement}, ${yMovement}) scale(1)`);
|
||||
}));
|
||||
|
||||
it('should not move canvas after deactivation of moving mode', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let xMovement: number = 200;
|
||||
let yMovement: number = 200;
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mousedown', {
|
||||
bubbles: true,
|
||||
clientX: 0,
|
||||
clientY: 0,
|
||||
screenY: 0,
|
||||
screenX: 0,
|
||||
view: window
|
||||
}));
|
||||
tick();
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: xMovement,
|
||||
movementY: yMovement
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(${xMovement}, ${yMovement}) scale(1)`);
|
||||
|
||||
movingEventSource.movingModeState.emit(false);
|
||||
canvas.dispatchEvent(new MouseEvent('mousemove', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
movementX: 1000,
|
||||
movementY: 1000
|
||||
} as MouseEventInit));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(${xMovement}, ${yMovement}) scale(1)`);
|
||||
}));
|
||||
});
|
137
src/app/cartography/directives/zooming-canvas.directive.spec.ts
Normal file
137
src/app/cartography/directives/zooming-canvas.directive.spec.ts
Normal file
@ -0,0 +1,137 @@
|
||||
import { ComponentFixture, TestBed, async, tick, fakeAsync } from '@angular/core/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { Context } from '../models/context';
|
||||
import { MovingEventSource } from '../events/moving-event-source';
|
||||
import { Component } from '@angular/core';
|
||||
import { ZoomingCanvasDirective } from './zooming-canvas.directive';
|
||||
|
||||
@Component({
|
||||
template: `<svg #svg class="map" preserveAspectRatio="none" zoomingCanvas><g class="canvas" transform="translate(0, 0) scale(1)"></g></svg>`
|
||||
})
|
||||
class DummyComponent {
|
||||
constructor(){}
|
||||
}
|
||||
|
||||
describe('ZoomingCanvasDirective', () => {
|
||||
let component: DummyComponent;
|
||||
let fixture: ComponentFixture<DummyComponent>;
|
||||
let movingEventSource = new MovingEventSource();
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [NoopAnimationsModule],
|
||||
providers: [
|
||||
{ provide: MovingEventSource, useValue: movingEventSource },
|
||||
{ provide: Context, useClass: Context }
|
||||
],
|
||||
declarations: [DummyComponent, ZoomingCanvasDirective]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DummyComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should zoom in canvas if moving mode is activated', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let deltaMode: number = 0;
|
||||
let zoom: number = -1000;
|
||||
|
||||
window.dispatchEvent(new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
}));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(0, 0) scale(2)`);
|
||||
}));
|
||||
|
||||
it('should zoom out canvas if moving mode is activated', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let deltaMode: number = 0;
|
||||
let zoom: number = 100;
|
||||
|
||||
window.dispatchEvent(new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
}));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(0, 0) scale(0.9)`);
|
||||
}));
|
||||
|
||||
it('should not zoom in/out canvas if moving mode is not activated', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let deltaMode: number = 0;
|
||||
let zoom: number = -1000;
|
||||
|
||||
window.dispatchEvent(new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
}));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(0, 0) scale(2)`);
|
||||
|
||||
movingEventSource.movingModeState.emit(false);
|
||||
window.dispatchEvent(new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
}));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(0, 0) scale(2)`);
|
||||
}));
|
||||
|
||||
it('should not zoom in/out canvas after deactivation of moving mode', fakeAsync(() => {
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let deltaMode: number = 0;
|
||||
let zoom: number = -1000;
|
||||
|
||||
window.dispatchEvent(new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
}));
|
||||
tick();
|
||||
|
||||
expect(canvas.getAttribute('transform')).toEqual(`translate(0, 0) scale(1)`);
|
||||
}));
|
||||
|
||||
it('should prevent from default wheel behaviour when moving mode activated', fakeAsync(() => {
|
||||
movingEventSource.movingModeState.emit(true);
|
||||
const canvas: HTMLElement = fixture.debugElement.nativeElement.querySelector('.canvas');
|
||||
let deltaMode: number = 0;
|
||||
let zoom: number = -1000;
|
||||
const event = new WheelEvent('wheel', {
|
||||
bubbles: true,
|
||||
relatedTarget: canvas,
|
||||
deltaMode: deltaMode,
|
||||
deltaY: zoom
|
||||
});
|
||||
spyOn(event, 'preventDefault');
|
||||
|
||||
window.dispatchEvent(event);
|
||||
tick();
|
||||
|
||||
expect(event.preventDefault).toHaveBeenCalled();
|
||||
}));
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user