UNPKG

6.92 kBJavaScriptView Raw
1'use strict';
2
3import FluxViewport from '../src/FluxViewport.js';
4import viewportState from './viewportState.json';
5import * as THREE from 'three';
6
7// This is a stub
8var domElement = document.createElement();
9
10export function focusViewport(t) {
11 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
12 var viewport = new FluxViewport(domElement, {width:100,height:100});
13 viewport.setGeometryEntity(sphere).then(function () {
14 t.ok(viewport._renderer._model, 'Viewport should create a model');
15 t.end();
16 }, function (errors) {
17 t.fail('Caught an error: '+ errors);
18 t.end();
19 });
20}
21
22export function replaceGeom(t) {
23 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
24 var sphere2 = {"origin":[0,0,0],"primitive":"sphere","radius":2};
25 var viewport = new FluxViewport(domElement, {width:100,height:100});
26 viewport.setGeometryEntity(sphere).then(function () {
27 t.ok(viewport._renderer._model, 'Viewport should create a model');
28 viewport.setGeometryEntity(sphere2).then(function () {
29 t.ok(viewport._renderer._model, 'Viewport should create a model');
30 t.end();
31 }, function (errors) {
32 t.fail('Caught an error: '+ errors);
33 t.end();
34 });
35 }, function (errors) {
36 t.fail('Caught an error: '+ errors);
37 t.end();
38 });
39}
40
41export function viewportToJson(t) {
42 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
43 var viewport = new FluxViewport(domElement, {width:100,height:100});
44 viewport.setGeometryEntity(sphere).then(function () {
45 var viewportString = JSON.stringify(viewport.toJSON());
46 var keywords = ['entities', 'view', 'cameras'];
47 for (var i=0;i<keywords.length;i++) {
48 t.ok(viewportString.toLocaleLowerCase().indexOf(keywords[i])!==-1, 'JSON should contain '+keywords[i]);
49 }
50 t.end();
51 }, function (errors) {
52 t.fail('Caught an error: '+ errors);
53 t.end();
54 });
55}
56
57export function viewportFromJson(t) {
58 var viewport = new FluxViewport(domElement, {width:100,height:100});
59 viewport.fromJSON(viewportState).then( function() {
60 t.equal(viewport._entities.primitive, 'sphere', 'Should get a sphere from JSON');
61 t.end();
62 }, function (errors) {
63 t.fail('Caught an error: '+ errors);
64 t.end();
65 });
66}
67
68export function initControls(t) {
69 var updated = false;
70 var viewport = new FluxViewport(domElement);
71 viewport.addEventListener(FluxViewport.getChangeEvent(), function() {
72 updated = true;
73 });
74 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
75 viewport.setGeometryEntity(sphere).then(function () {
76 viewport.focus();
77 t.ok(updated, 'Update should fire.');
78 t.end();
79 }, function (errors) {
80 t.fail('Caught an error: '+ errors);
81 t.end();
82 });
83}
84
85export function hideHelpers(t) {
86 var viewport = new FluxViewport(domElement, {width:100,height:100});
87 viewport.setHelpersVisible(false);
88 t.equal(viewport._renderer._helpersScene.visible, false, "Should not be visible");
89 t.end();
90}
91
92export function setAlpha(t) {
93 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
94 var viewport = new FluxViewport(domElement, {width:100,height:100});
95 viewport.setGeometryEntity(sphere).then(function () {
96 t.ok(viewport._renderer._model, 'Viewport should create a model');
97 viewport.setClearColor('white', 0.5);
98 viewport.render();
99 t.equal(viewport._renderer._context.renderer.getClearAlpha(), 0.5, "Alpha can be set");
100 t.end();
101 }, function (errors) {
102 t.fail('Caught an error: '+ errors);
103 t.end();
104 });
105}
106
107export function viewportSelection(t) {
108 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
109 var viewport = new FluxViewport(domElement, {width:100,height:100,
110 selection: FluxViewport.getSelectionModes().HOVER});
111 viewport.setGeometryEntity(sphere).then(function () {
112 t.equal(viewport.getSelection().length,0,"Selection starts empty");
113 viewport.setSelection(['mySphere']);
114 t.deepEqual(viewport.getSelection(),['mySphere'],"Selection has id");
115 t.end();
116 }).catch(function (errors) {
117 t.fail('Caught an error: '+ errors);
118 t.end();
119 });
120}
121
122export function viewportShadows(t) {
123 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
124 var sphere2 = {"origin":[100,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
125 var viewport = new FluxViewport(domElement);
126 viewport.setupDefaultLighting();
127 var left = [];
128 viewport.setGeometryEntity(sphere).then(function () {
129 var lights = viewport._renderer._scene.children[0].children;
130 for (var i=0;i<lights.length;i++) {
131 var light = lights[i];
132 if (light.type === 'DirectionalLight') {
133 left[i] = light.shadow.camera.left;
134 t.ok(light.shadow.camera.right > light.shadow.camera.left, 'Frustum has positive width');
135 }
136 }
137 t.equal(viewport._renderer._context.renderer.shadowMap.enabled, false, 'Shadow default is off');
138 viewport.activateShadows();
139 t.equal(viewport._renderer._context.renderer.shadowMap.enabled, true, 'Shadow turned on');
140 viewport.setGeometryEntity(sphere2).then(function () {
141 var lights = viewport._renderer._scene.children[0].children;
142 for (var i=0;i<lights.length;i++) {
143 var light = lights[i];
144 if (light.type === 'DirectionalLight') {
145 t.ok(Math.abs(light.shadow.camera.left)>Math.abs(left[i]),
146 'Frustum is larger for distant geom');
147 }
148 }
149 });
150 t.end();
151 }).catch(function (errors) {
152 t.fail('Caught an error: '+ errors);
153 t.end();
154 });
155}
156
157export function viewportClipping(t) {
158 var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
159 var viewport = new FluxViewport(domElement);
160 viewport.setGeometryEntity(sphere).then(function (result) {
161 var object = result.getObject();
162 t.equal(object.children[0].material.side, THREE.FrontSide, 'Solid object default to one side');
163 viewport.activateClipping(0,0.4,0,0,1,0);
164 t.equal(object.children[0].material.side, THREE.DoubleSide, 'Objects must be double side when clipped');
165 t.ok(viewport._renderer._clippingPlane.constant > 0, 'Plane does not go through origin');
166 viewport.deactivateClipping();
167 t.equal(object.children[0].material.side, THREE.FrontSide, 'Solid object return to one side');
168 t.end();
169 }).catch(function (errors) {
170 t.fail('Caught an error: '+ errors);
171 t.end();
172 });
173}