2
0
mirror of https://github.com/koreader/koreader synced 2024-11-13 19:11:25 +00:00
koreader/spec/unit/batterystat_spec.lua
Robert 830fc790f1 Battery stats plugin: fix and improvements (#5626)
- fix incorrectly shown awake, sleeping, charging and discharging,
- remove unneeded debug mode and logging to external file,
- prevent showing values like inf, -inf, nan in estimated times
  (we now show "n/a"), and values below zero,
- show extra confirm box when we want to reset data,
- show time in format xxhxxm instead of only pure minutes,
- check at initialization that the device was charging when it was
  turned off (battery level larger than at the time of exit).
2019-11-26 14:21:14 +01:00

192 lines
6.8 KiB
Lua

describe("BatteryState plugin tests #nocov", function()
local MockTime, module
local stat = function() --luacheck: ignore
return module:new():stat()
end,
setup(function()
require("commonrequire")
package.unloadAll()
require("document/canvascontext"):init(require("device"))
MockTime = require("mock_time")
MockTime:install()
end)
teardown(function()
MockTime:uninstall()
package.unloadAll()
require("document/canvascontext"):init(require("device"))
end)
before_each(function()
module = dofile("plugins/batterystat.koplugin/main.lua")
end)
it("should record charging time", function()
local widget = stat()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
widget:resetAll()
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(1, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onCharging()
assert.is_true(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
-- Awake charging & discharging time should be reset.
assert.are.equal(0, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(0, widget.discharging.time)
assert.are.equal(1, widget.charging.time)
widget:onNotCharging()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
-- awake & discharging time should be reset.
assert.are.equal(1, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(1, widget.discharging.time)
assert.are.equal(1, widget.charging.time)
widget:onCharging()
assert.is_true(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
-- Awake charging & discharging time should be reset.
assert.are.equal(0, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(0, widget.discharging.time)
assert.are.equal(1, widget.charging.time)
end)
it("should record suspending time", function()
local widget = stat()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
widget:resetAll()
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(1, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onSuspend()
assert.is_false(widget.was_charging)
assert.is_true(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(1, widget.sleeping.time)
assert.are.equal(2, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onResume()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(2, widget.awake.time)
assert.are.equal(1, widget.sleeping.time)
assert.are.equal(3, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onSuspend()
assert.is_false(widget.was_charging)
assert.is_true(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(2, widget.awake.time)
assert.are.equal(2, widget.sleeping.time)
assert.are.equal(4, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
end)
it("should not swap the state when several charging events fired", function()
local widget = stat()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
widget:resetAll()
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(1, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onCharging()
assert.is_true(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
-- Awake charging & discharging time should be reset.
assert.are.equal(0, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(0, widget.discharging.time)
assert.are.equal(1, widget.charging.time)
widget:onCharging()
assert.is_true(widget.was_charging)
assert.is_false(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(0, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(0, widget.discharging.time)
assert.are.equal(2, widget.charging.time)
end)
it("should not swap the state when several suspending events fired", function()
local widget = stat()
assert.is_false(widget.was_charging)
assert.is_false(widget.was_suspending)
widget:resetAll()
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(0, widget.sleeping.time)
assert.are.equal(1, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onSuspend()
assert.is_false(widget.was_charging)
assert.is_true(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(1, widget.sleeping.time)
assert.are.equal(2, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onSuspend()
assert.is_false(widget.was_charging)
assert.is_true(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(2, widget.sleeping.time)
assert.are.equal(3, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
widget:onSuspend()
assert.is_false(widget.was_charging)
assert.is_true(widget.was_suspending)
MockTime:increase(1)
widget:accumulate()
assert.are.equal(1, widget.awake.time)
assert.are.equal(3, widget.sleeping.time)
assert.are.equal(4, widget.discharging.time)
assert.are.equal(0, widget.charging.time)
end)
end)