File: state_spec.lua

package info (click to toggle)
lua-luassert 1.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 388 kB
  • sloc: makefile: 2
file content (145 lines) | stat: -rw-r--r-- 4,925 bytes parent folder | download | duplicates (2)
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
describe("Tests states of the assert engine", function()

  it("checks levels created/reverted", function()
    local start = assert:snapshot()
    assert.is_nil(start.next)

    local snapshot1 = assert:snapshot()
    assert.is.table(start.next)
    assert.are.equal(start.next, snapshot1)
    assert.are.equal(start, snapshot1.previous)
    assert.is_nil(snapshot1.next)

    local snapshot2 = assert:snapshot()
    assert.is.table(snapshot1.next)
    assert.are.equal(snapshot2, snapshot1.next)
    assert.are.equal(snapshot2.previous, snapshot1)
    assert.is_nil(snapshot2.next)

    snapshot2:revert()
    assert.is.table(start.next)
    assert.are.equal(start.next, snapshot1)
    assert.are.equal(start, snapshot1.previous)
    assert.is_nil(snapshot1.next)

    snapshot1:revert()
    assert.is_nil(start.next)
  end)

  it("checks to see if a formatter is reversed", function()

    -- add a state level by creating a snapshot
    local snapshot1 = assert:snapshot()
    -- register extra formatters
    local fmt1 = function(value)
        if type(value) == "string" then return "ok" end
      end
    assert:add_formatter(fmt1)
    local fmt2 = function(value)
        if type(value) == "number" then return "1" end
      end
    assert:add_formatter(fmt2)
    -- check formatters
    assert.are.equal(#snapshot1.formatters, 2)
    assert.are.equal(snapshot1.formatters[2], fmt1)
    assert.are.equal(snapshot1.formatters[1], fmt2)
    assert.are.equal("ok", assert:format({"some value"})[1])
    assert.are.equal("1", assert:format({123})[1])

    -- add another state level by creating a snapshot
    local snapshot2 = assert:snapshot()
    -- register extra formatter
    local fmt3 = function(value)
        if type(value) == "number" then return "2" end
      end
    assert:add_formatter(fmt3)
    assert.are.equal(#snapshot2.formatters, 1)
    assert.are.equal(snapshot2.formatters[1], fmt3)
    -- check formatter newest level
    assert.are.equal("2", assert:format({123})[1])
    -- check formatter previous level
    assert.are.equal("ok", assert:format({"some value"})[1])
    -- check formatter initial level
    assert.are.equal("(boolean) true", assert:format({true})[1])

    -- revert 1 state up
    snapshot2:revert()
    assert.is_nil(snapshot1.next)
    assert.are.equal(2, #snapshot1.formatters)
    -- check formatter reverted level
    assert.are.equal("1", assert:format({123})[1])
    -- check formatter unchanged level
    assert.are.equal("ok", assert:format({"some value"})[1])
    -- check formatter unchanged level
    assert.are.equal("(boolean) true", assert:format({true})[1])

    -- revert 1 more up, to initial level
    snapshot1:revert()
    assert.are.equal("(number) 123", assert:format({123})[1])
    assert.are.equal("(string) 'some value'", assert:format({"some value"})[1])
    assert.are.equal("(boolean) true", assert:format({true})[1])
  end)

  it("checks to see if a parameter is reversed", function()

    -- add a state level by creating a snapshot
    local snapshot1 = assert:snapshot()
    assert.is_nil(assert:get_parameter("Test_1"))
    assert.is_nil(assert:get_parameter("Test_2"))
    assert:set_parameter("Test_1", 1)
    assert:set_parameter("Test_2", 2)
    assert.are.equal(1, assert:get_parameter("Test_1"))
    assert.are.equal(2, assert:get_parameter("Test_2"))

    -- add another state level by creating a snapshot
    local snapshot2 = assert:snapshot()
    assert.are.equal(1, assert:get_parameter("Test_1"))
    assert.are.equal(2, assert:get_parameter("Test_2"))
    assert:set_parameter("Test_1", "one")
    assert:set_parameter("Test_2", nil)    -- test setting to nil
    assert.are.equal("one", assert:get_parameter("Test_1"))
    assert.is_nil(assert:get_parameter("Test_2"))

    -- revert 1 state up
    snapshot2:revert()
    assert.are.equal(1, assert:get_parameter("Test_1"))
    assert.are.equal(2, assert:get_parameter("Test_2"))

    -- revert 1 more up, to initial level
    snapshot1:revert()
    assert.is_nil(assert:get_parameter("Test_1"))
    assert.is_nil(assert:get_parameter("Test_2"))
  end)

  it("checks to see if a spy/stub is reversed", function()

    local c1, c2 = 0, 0
    local test = {
      f1 = function() c1 = c1 + 1 end,
      f2 = function() c2 = c2 + 1 end,
    }
    -- add a state level by creating a snapshot
    local snapshot1 = assert:snapshot()
    -- create spy/stub
    local s1 = spy.on(test, "f1")
    local s2 = stub(test, "f2")
    -- call them both
    test.f1()
    test.f2()
    assert.spy(test.f1).was.called(1)
    assert.spy(test.f2).was.called(1)
    assert.is_equal(1, c1)
    assert.is_equal(0, c2) -- 0, because it's a stub

    -- revert to initial level
    snapshot1:revert()
    test.f1()
    test.f2()
    -- check count is still 1 for both
    assert.spy(s1).was.called(1)
    assert.spy(s2).was.called(1)
    assert.is_equal(2, c1)
    assert.is_equal(1, c2)
  end)

end)