summaryrefslogtreecommitdiff
path: root/test/07-test-surface.js
blob: 2a51b7f949d1b1a14ab31b814aa7b01a285b125a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
var assert = require("assert")
var vec2 = require("../public/assets/javascripts/rectangles/models/vec2.js")
var Rect = require("../public/assets/javascripts/rectangles/models/rect.js")
var Surface = require("../public/assets/javascripts/rectangles/models/surface.js")

// [[1 3] [0 4]] front back left right
// [[3 4] [2 4]] front back left right
// [[4 5] [0 4]] front back left right

describe('basic surface', function(){
  var surface = new Surface ()
  surface.add( new Rect( new vec2(1, 6), new vec2(0, 4) ) )

  var small = new vec2(2, 2)
  var oblong = new vec2(4, 1)

  describe('#clamp_delta()', function(){
    var position = new vec2(2,1) 
    it("does not alter a zero delta", function(){
      var delta = new vec2(0,0)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( 0, 0 )))
    })
    it("does not alter a minimal delta", function(){
      var delta = new vec2(1,1)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( 1, 1 )))
    })
    it("clamps leftward delta", function(){
      var delta = new vec2(-10, 0)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( -1, 0 )))
    })
    it("clamps rightward delta", function(){
      var delta = new vec2(10, 0)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( 2, 0 )))
    })
    it("clamps upward delta", function(){
      var delta = new vec2(0, 10)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( 0, 1 )))
    })
    it("clamps downward delta", function(){
      var delta = new vec2(0, -10)
      surface.clamp_delta(surface.bounds, small, position, delta)
      assert.equal(true, delta.eq(new vec2( 0, -1 )))
    })
  })

  describe('#place()', function(){
    it("fits a small element on the top left", function(){
      var bounds = surface.place(small, new vec2(1,3))
//      console.log(bounds)
    })
    it("places a small element on the right", function(){
      var bounds = surface.place(small, new vec2(4,6))
//      console.log(bounds)
    })
  })

  // describe placement
  // describe dragging up (clamp at top edge)
  // describe dragging down (clamp at bottom edge)
  // describe dragging left (clamp at left edge)
  // describe dragging right (clamp at right edge)
})

describe('double surface', function(){
  var surface = new Surface ()
  surface.add( new Rect( new vec2(0, 3), new vec2(0, 4) ) )
  surface.add( new Rect( new vec2(3, 5), new vec2(0, 4) ) )

  var small = new vec2(2, 2)
  var oblong = new vec2(4, 1)

  // describe placement
  // describe dragging up (clamp at top edge)
  // describe dragging down (clamp at bottom edge)
  // describe dragging left (clamp at left edge)
  // describe dragging right (clamp at right edge)
})

describe('two-level surface', function(){
  var surface = new Surface ()
  surface.add( new Rect( new vec2(0, 3), new vec2(0, 4) ) )
  surface.add( new Rect( new vec2(3, 5), new vec2(0, 6) ) )

  var small = new vec2(2, 2)
  var oblong = new vec2(4, 1)

  // describe placement/centering
  // describe dragging up (clamp at top edge)
  // describe dragging down (clamp at bottom edge)
  // describe dragging left (clamp at left edge)
  // describe dragging right (clamp at right edge)
  // describe dragging up and right (clamp at top edge, then pop into peninsula space)
})

describe('door surface', function(){
  var surface = new Surface ()
  surface.add( new Rect( new vec2(0, 3), new vec2(0, 4) ) )
  surface.add( new Rect( new vec2(3, 4), new vec2(2, 4) ) )
  surface.add( new Rect( new vec2(4, 6), new vec2(0, 4) ) )

  var small = new vec2(2, 2)
  var large = new vec2(10, 10)
  var oblong = new vec2(4, 1)

  describe('#fits()', function(){
    it("fits something small", function(){
      assert.equal(true,  !! surface.fits(small))
    })
    it("doesn't fit something large", function(){
      assert.equal(false, !! surface.fits(large))
    })
    it("fits something oblong", function(){
      assert.equal(true,  !! surface.fits(oblong))
    })
  })
  describe('#fits_scale()', function(){
    it("fits something large, scaled down", function(){
      assert.equal(true,  !! surface.fits_scale(large, 0.1))
    })
    it("doesn't fit something small, scaled up", function(){
      assert.equal(false, !! surface.fits_scale(small, 10))
    })
    it("doesn't fit something oblong, scaled up", function(){
      assert.equal(false, !! surface.fits_scale(oblong, 10))
    })
  })

  describe('#place()', function(){
    it("fits a small element on the top left", function(){
      var bounds = surface.place(small, new vec2(1,3))
//      console.log(bounds)
    })
    it("places a small element on the right", function(){
      var bounds = surface.place(small, new vec2(4,6))
//      console.log(bounds)
    })
  })

  describe('#clamp()', function(){
    it("", function(){
    })
  })

})