<!DOCTYPE html>
<html>
<body>
<script src="../resources/js-test.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/services/device/public/interfaces/battery_monitor.mojom.js"></script>
<script src="resources/mock-battery-monitor.js"></script>
<script>
description("Test no garbage collection of battery manager object when listeners are attached.");

if (!window.testRunner)
    debug('This test cannot be run without the TestRunner');

// Clean-up any unused battery manager objects from previous tests.
gc();
jsTestIsAsync = true;
testRunner.waitUntilDone();

function fireLevelChange() {
    gc();
    setAndFireMockBatteryInfo(false, 10, 20, 0.6);
}

navigator.getBattery().then(function(battery) {
    battery.addEventListener('levelchange', function() {
        testIfBatteryStatusIsUpToDate(battery);
        battery.removeEventListener('levelchange', arguments.callee);
        setTimeout(finishJSTest, 0);
    });
    setTimeout(fireLevelChange, 0);
});

setAndFireMockBatteryInfo(false, 10, 20, 0.5);
</script>
</body>
</html>
