/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package limitedwip.autorevert; import limitedwip.autorevert.AutoRevert.Settings; import limitedwip.autorevert.components.IdeAdapter; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import static org.mockito.Mockito.*; public class AutoRevertTest { private static final int secondsTillRevert = 2; private final IdeAdapter ideAdapter = mock(IdeAdapter.class); private final Settings settings = new Settings(true, secondsTillRevert, true); private final AutoRevert autoRevert = new AutoRevert(ideAdapter).init(settings); private int secondsSinceStart; @Test public void sendsUIStartupNotification() { autoRevert.start(); verify(ideAdapter).onAutoRevertStarted(eq(secondsTillRevert)); } @Test public void sendsUINotificationOnTimer_OnlyWhenStarted() { InOrder inOrder = inOrder(ideAdapter); autoRevert.onTimer(next()); inOrder.verify(ideAdapter, times(0)).onTimeTillRevert(anyInt()); autoRevert.start(); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(anyInt()); } @Test public void revertsChanges_WhenReceivedEnoughTimeUpdates() { autoRevert.start(); autoRevert.onTimer(next()); autoRevert.onTimer(next()); autoRevert.onTimer(next()); autoRevert.onTimer(next()); verify(ideAdapter, times(2)).revertCurrentChangeList(); verify(ideAdapter, times(2)).onChangesRevert(); } @Test public void doesNotRevertChanges_WhenStopped() { autoRevert.start(); autoRevert.onTimer(next()); autoRevert.stop(); autoRevert.onTimer(next()); verify(ideAdapter).onAutoRevertStarted(anyInt()); verify(ideAdapter).onAutoRevertStopped(); verify(ideAdapter, never()).revertCurrentChangeList(); } @Test public void resetsTimeTillRevert_WhenStopped() { InOrder inOrder = inOrder(ideAdapter); autoRevert.start(); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(2)); autoRevert.stop(); autoRevert.start(); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(2)); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(1)); } @Test public void resetsTimeTillRevert_WhenCommitted() { InOrder inOrder = inOrder(ideAdapter); autoRevert.start(); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(2)); autoRevert.onAllFilesCommitted(); inOrder.verify(ideAdapter).onCommit(secondsTillRevert); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(2)); autoRevert.onTimer(next()); inOrder.verify(ideAdapter).onTimeTillRevert(eq(1)); } @Test public void sendsUINotificationOnCommit_OnlyWhenStarted() { InOrder inOrder = inOrder(ideAdapter); autoRevert.onAllFilesCommitted(); inOrder.verify(ideAdapter, times(0)).onCommit(anyInt()); autoRevert.start(); autoRevert.onAllFilesCommitted(); inOrder.verify(ideAdapter).onCommit(anyInt()); } @Test public void appliesRevertTimeOutChange_AfterStart() { autoRevert.onSettings(new Settings(1)); autoRevert.start(); autoRevert.onTimer(next()); autoRevert.onTimer(next()); verify(ideAdapter, times(2)).revertCurrentChangeList(); verify(ideAdapter, times(2)).onChangesRevert(); } @Test public void appliesRevertTimeoutChange_AfterEndOfCurrentTimeOut() { autoRevert.start(); autoRevert.onSettings(new Settings(1)); autoRevert.onTimer(next()); autoRevert.onTimer(next()); // reverts changes after 2nd time event autoRevert.onTimer(next()); // reverts changes after 1st time event autoRevert.onTimer(next()); // reverts changes after 1st time event verify(ideAdapter, times(3)).revertCurrentChangeList(); verify(ideAdapter, times(3)).onChangesRevert(); } @Test public void appliesRevertTimeoutChange_AfterCommit() { autoRevert.start(); autoRevert.onSettings(new Settings(1)); autoRevert.onTimer(next()); autoRevert.onAllFilesCommitted(); autoRevert.onTimer(next()); // reverts changes after 1st time event autoRevert.onTimer(next()); // reverts changes after 1st time event autoRevert.onTimer(next()); // reverts changes after 1st time event verify(ideAdapter, times(3)).revertCurrentChangeList(); verify(ideAdapter, times(3)).onChangesRevert(); } @Test public void doesNotSendUIStartupNotification_WhenDisabled() { Settings disabledSettings = new Settings(false, secondsTillRevert, false); autoRevert.onSettings(disabledSettings); autoRevert.start(); verify(ideAdapter).onSettingsUpdate(settings); verify(ideAdapter).onSettingsUpdate(disabledSettings); verifyNoMoreInteractions(ideAdapter); } @Test public void doesNotRevertChanges_WhenDisabled() { autoRevert.start(); autoRevert.onTimer(next()); autoRevert.onSettings(new Settings(false, 2, false)); autoRevert.onTimer(next()); verify(ideAdapter, never()).revertCurrentChangeList(); } @Before public void setUp() throws Exception { secondsSinceStart = 0; stub(ideAdapter.revertCurrentChangeList()).toReturn(10); } private int next() { return ++secondsSinceStart; } }