Spaces:
Sleeping
Sleeping
| package.path = '../common/libs/?.lua;../common/vendor/?.lua;' .. package.path | |
| local lu = require('luaunit') | |
| require('Polo') | |
| require('source/ColumnLayout') | |
| TestColumnLayout = { | |
| AVAIL_WIDTH = 100 | |
| } | |
| function TestColumnLayout:stub(layout) | |
| layout._column_gap_calls = {} | |
| layout._column_gap = function (self, padding) | |
| table.insert(self._column_gap_calls, {padding}) | |
| end | |
| layout._get_avail_width_calls = 0 | |
| layout._get_avail_width = function (self) | |
| self._get_avail_width_calls = self._get_avail_width_calls + 1 | |
| return TestColumnLayout.AVAIL_WIDTH | |
| end | |
| layout._horiz_margin_calls = {} | |
| layout._horiz_margin = function (self, margin) | |
| table.insert(self._horiz_margin_calls, {margin}) | |
| end | |
| layout._vert_margin_calls = {} | |
| layout._vert_margin = function (self, margin, width) | |
| table.insert(self._vert_margin_calls, {margin, width}) | |
| end | |
| layout._with_group_calls = 0 | |
| layout._with_group = function (self, f) | |
| self._with_group_calls = self._with_group_calls + 1 | |
| f() | |
| end | |
| end | |
| function TestColumnLayout:testInitDefault() | |
| local layout = ColumnLayout.new { | |
| render_column = function () end | |
| } | |
| lu.assertEquals(layout.column_padding, ColumnLayout.DEFAULT_COLUMN_PADDING) | |
| lu.assertEquals(layout.margin_bottom, 0) | |
| lu.assertEquals(layout.margin_left, 0) | |
| lu.assertEquals(layout.margin_right, 0) | |
| lu.assertEquals(layout.margin_top, 0) | |
| lu.assertEquals(layout.num_columns, ColumnLayout.DEFAULT_NUM_COLUMNS) | |
| lu.assertEquals(layout.width, 0) | |
| end | |
| function TestColumnLayout:testRender() | |
| local column_padding = 20 | |
| local margin_bottom = 15 | |
| local margin_left = 10 | |
| local margin_right = 30 | |
| local margin_top = 5 | |
| local num_columns = 2 | |
| local expected_column_width = ( | |
| self.AVAIL_WIDTH | |
| - margin_left | |
| - margin_right | |
| - column_padding | |
| ) / num_columns | |
| local render_column_calls = {} | |
| local layout = ColumnLayout.new { | |
| column_padding = column_padding, | |
| margin_bottom = margin_bottom, | |
| margin_left = margin_left, | |
| margin_right = margin_right, | |
| margin_top = margin_top, | |
| num_columns = num_columns, | |
| render_column = function (column) | |
| table.insert(render_column_calls, {column}) | |
| end | |
| } | |
| self:stub(layout) | |
| layout:render() | |
| lu.assertEquals(layout._column_gap_calls, {{column_padding}}) | |
| lu.assertEquals(layout._get_avail_width_calls, 1) | |
| lu.assertEquals(layout._horiz_margin_calls, {{margin_left}}) | |
| lu.assertEquals(layout._vert_margin_calls, { | |
| {margin_top, expected_column_width}, | |
| {margin_bottom, expected_column_width}, | |
| {margin_top, expected_column_width}, | |
| {margin_bottom, expected_column_width}, | |
| }) | |
| lu.assertEquals(layout._with_group_calls, num_columns) | |
| lu.assertEquals(render_column_calls, { | |
| {{num = 1, width = expected_column_width}}, | |
| {{num = 2, width = expected_column_width}}, | |
| }) | |
| end | |
| function TestColumnLayout:testRenderWithWidth() | |
| local column_padding = 15 | |
| local margin_bottom = 10 | |
| local margin_left = 5 | |
| local margin_right = 20 | |
| local margin_top = 25 | |
| local num_columns = 3 | |
| local width = 205 | |
| local expected_column_width = 50 | |
| local render_column_calls = {} | |
| local layout = ColumnLayout.new { | |
| column_padding = column_padding, | |
| margin_bottom = margin_bottom, | |
| margin_left = margin_left, | |
| margin_right = margin_right, | |
| margin_top = margin_top, | |
| num_columns = num_columns, | |
| width = width, | |
| render_column = function (column) | |
| table.insert(render_column_calls, {column}) | |
| end | |
| } | |
| self:stub(layout) | |
| layout:render() | |
| lu.assertEquals(layout._column_gap_calls, {{column_padding}, {column_padding}}) | |
| lu.assertEquals(layout._get_avail_width_calls, 0) | |
| lu.assertEquals(layout._horiz_margin_calls, {{margin_left}}) | |
| lu.assertEquals(layout._vert_margin_calls, { | |
| {margin_top, expected_column_width}, | |
| {margin_bottom, expected_column_width}, | |
| {margin_top, expected_column_width}, | |
| {margin_bottom, expected_column_width}, | |
| {margin_top, expected_column_width}, | |
| {margin_bottom, expected_column_width}, | |
| }) | |
| lu.assertEquals(layout._with_group_calls, num_columns) | |
| lu.assertEquals(render_column_calls, { | |
| {{num = 1, width = expected_column_width}}, | |
| {{num = 2, width = expected_column_width}}, | |
| {{num = 3, width = expected_column_width}}, | |
| }) | |
| end | |
| function TestColumnLayout:testRenderNested() | |
| local inner_renders = {} | |
| local outer_renders = {} | |
| local outer_layout = ColumnLayout.new { | |
| column_padding = 0, | |
| num_columns = 2, | |
| width = 60, | |
| render_column = function (outer_column) | |
| table.insert(outer_renders, outer_column) | |
| local inner_layout = ColumnLayout.new { | |
| column_padding = 0, | |
| num_columns = 3, | |
| width = outer_column.width, | |
| render_column = function (inner_column) | |
| table.insert(inner_renders, inner_column) | |
| end | |
| } | |
| self:stub(inner_layout) | |
| inner_layout:render() | |
| end | |
| } | |
| self:stub(outer_layout) | |
| outer_layout:render() | |
| lu.assertEquals(inner_renders, { | |
| {num=1, width=10}, | |
| {num=2, width=10}, | |
| {num=3, width=10}, | |
| {num=1, width=10}, | |
| {num=2, width=10}, | |
| {num=3, width=10}, | |
| }) | |
| lu.assertEquals(outer_renders, { | |
| {num=1, width=30}, | |
| {num=2, width=30}, | |
| }) | |
| end | |
| os.exit(lu.LuaUnit.run()) | |