@@ -15,6 +15,28 @@ import assert from "power-assert";
1515/*:: declare function describe(name: string, fn: Function): void; */
1616/*:: declare function it(name: string, fn: Function): void; */
1717
18+ //
19+ // Utils
20+ //
21+ function stripArray ( arr ) {
22+ return arr . map ( stripObject ) ;
23+ }
24+
25+ function stripObject ( obj ) {
26+ obj = Object . assign ( { } , obj ) ;
27+ return Object . keys ( obj ) . reduce ( ( memo , key ) => {
28+ if ( obj [ key ] != null ) memo [ key ] = obj [ key ] ;
29+ return memo ;
30+ } , { } ) ;
31+ }
32+
33+ function assertDeepEqualStrip ( obj1 , obj2 ) {
34+ assert . deepEqual ( stripArray ( obj1 ) , stripArray ( obj2 ) ) ;
35+ }
36+ //
37+ // Specs
38+ //
39+
1840describe ( "bottom" , ( ) => {
1941 it ( "Handles an empty layout as input" , ( ) => {
2042 assert ( bottom ( [ ] ) === 0 ) ;
@@ -248,8 +270,8 @@ describe("moveElement", () => {
248270describe ( "compact vertical" , ( ) => {
249271 it ( "Removes empty vertical space above item" , ( ) => {
250272 const layout = [ { i : "1" , x : 0 , y : 1 , w : 1 , h : 1 } ] ;
251- assert . deepEqual ( compact ( layout , "vertical" , 10 ) , [
252- { i : "1" , x : 0 , y : 0 , w : 1 , h : 1 , moved : false }
273+ assertDeepEqualStrip ( compact ( layout , "vertical" , 10 ) , [
274+ { i : "1" , x : 0 , y : 0 , w : 1 , h : 1 , moved : false , static : false }
253275 ] ) ;
254276 } ) ;
255277
@@ -258,9 +280,9 @@ describe("compact vertical", () => {
258280 { x : 0 , y : 0 , w : 1 , h : 5 , i : "1" } ,
259281 { x : 0 , y : 1 , w : 1 , h : 1 , i : "2" }
260282 ] ;
261- assert . deepEqual ( compact ( layout , "vertical" , 10 ) , [
262- { x : 0 , y : 0 , w : 1 , h : 5 , i : "1" , moved : false } ,
263- { x : 0 , y : 5 , w : 1 , h : 1 , i : "2" , moved : false }
283+ assertDeepEqualStrip ( compact ( layout , "vertical" , 10 ) , [
284+ { x : 0 , y : 0 , w : 1 , h : 5 , i : "1" , moved : false , static : false } ,
285+ { x : 0 , y : 5 , w : 1 , h : 1 , i : "2" , moved : false , static : false }
264286 ] ) ;
265287 } ) ;
266288
@@ -272,21 +294,33 @@ describe("compact vertical", () => {
272294 { x : 5 , y : 2 , w : 1 , h : 1 , i : "4" } ,
273295 { x : 5 , y : 3 , w : 1 , h : 1 , i : "5" , static : true }
274296 ] ;
275- assert . deepEqual ( compact ( layout , "vertical" , 10 ) , [
276- { x : 0 , y : 0 , w : 2 , h : 5 , i : "1" , moved : false } ,
277- { x : 0 , y : 5 , w : 10 , h : 1 , i : "2" , moved : false } ,
278- { x : 5 , y : 6 , w : 1 , h : 1 , i : "3" , moved : false } ,
279- { x : 5 , y : 7 , w : 1 , h : 1 , i : "4" , moved : false } ,
297+
298+ assertDeepEqualStrip ( compact ( layout , "vertical" , 10 ) , [
299+ { x : 0 , y : 0 , w : 2 , h : 5 , i : "1" , moved : false , static : false } ,
300+ { x : 0 , y : 5 , w : 10 , h : 1 , i : "2" , moved : false , static : false } ,
301+ { x : 5 , y : 6 , w : 1 , h : 1 , i : "3" , moved : false , static : false } ,
302+ { x : 5 , y : 7 , w : 1 , h : 1 , i : "4" , moved : false , static : false } ,
280303 { x : 5 , y : 3 , w : 1 , h : 1 , i : "5" , moved : false , static : true }
281304 ] ) ;
282305 } ) ;
306+
307+ it ( "Clones layout items (does not modify input)" , ( ) => {
308+ const layout = [
309+ { x : 0 , y : 0 , w : 2 , h : 5 , i : "1" } ,
310+ { x : 0 , y : 0 , w : 10 , h : 1 , i : "2" }
311+ ] ;
312+ const out = compact ( layout , "vertical" , 10 ) ;
313+ layout . forEach ( item => {
314+ assert ( ! out . includes ( item ) ) ;
315+ } ) ;
316+ } ) ;
283317} ) ;
284318
285319describe ( "compact horizontal" , ( ) => {
286320 it ( "compact horizontal should remove empty horizontal space to left of item" , ( ) => {
287- const layout = [ { i : "1" , x : 5 , y : 5 , w : 1 , h : 1 } ] ;
288- assert . deepEqual ( compact ( layout , "horizontal" , 10 ) , [
289- { i : "1" , x : 0 , y : 0 , w : 1 , h : 1 , moved : false }
321+ const layout = [ { x : 5 , y : 5 , w : 1 , h : 1 , i : "1" } ] ;
322+ assertDeepEqualStrip ( compact ( layout , "horizontal" , 10 ) , [
323+ { x : 0 , y : 0 , w : 1 , h : 1 , i : "1" , moved : false , static : false }
290324 ] ) ;
291325 } ) ;
292326
@@ -295,9 +329,9 @@ describe("compact horizontal", () => {
295329 { y : 0 , x : 0 , h : 1 , w : 5 , i : "1" } ,
296330 { y : 0 , x : 1 , h : 1 , w : 1 , i : "2" }
297331 ] ;
298- assert . deepEqual ( compact ( layout , "horizontal" , 10 ) , [
299- { y : 0 , x : 0 , h : 1 , w : 5 , i : "1" , moved : false } ,
300- { y : 0 , x : 5 , h : 1 , w : 1 , i : "2" , moved : false }
332+ assertDeepEqualStrip ( compact ( layout , "horizontal" , 10 ) , [
333+ { y : 0 , x : 0 , h : 1 , w : 5 , i : "1" , moved : false , static : false } ,
334+ { y : 0 , x : 5 , h : 1 , w : 1 , i : "2" , moved : false , static : false }
301335 ] ) ;
302336 } ) ;
303337
@@ -309,11 +343,11 @@ describe("compact horizontal", () => {
309343 { y : 5 , x : 2 , h : 1 , w : 1 , i : "4" } ,
310344 { y : 5 , x : 2 , h : 1 , w : 1 , i : "5" , static : true }
311345 ] ;
312- assert . deepEqual ( compact ( layout , "horizontal" , 10 ) , [
313- { y : 0 , x : 0 , h : 2 , w : 5 , i : "1" , moved : false } ,
314- { y : 0 , x : 5 , h : 10 , w : 1 , i : "2" , moved : false } ,
315- { y : 5 , x : 6 , h : 1 , w : 1 , i : "3" , moved : false } ,
316- { y : 5 , x : 7 , h : 1 , w : 1 , i : "4" , moved : false } ,
346+ assertDeepEqualStrip ( compact ( layout , "horizontal" , 10 ) , [
347+ { y : 0 , x : 0 , h : 2 , w : 5 , i : "1" , moved : false , static : false } ,
348+ { y : 0 , x : 5 , h : 10 , w : 1 , i : "2" , moved : false , static : false } ,
349+ { y : 5 , x : 6 , h : 1 , w : 1 , i : "3" , moved : false , static : false } ,
350+ { y : 5 , x : 7 , h : 1 , w : 1 , i : "4" , moved : false , static : false } ,
317351 { y : 5 , x : 2 , h : 1 , w : 1 , i : "5" , moved : false , static : true }
318352 ] ) ;
319353 } ) ;
0 commit comments