// Copyright 2012 Google Inc. All Rights Reserved. // // 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 com.google.collide.client.editor.search; import static com.google.collide.client.editor.search.SearchTestsUtil.createDocument; import static com.google.collide.client.editor.search.SearchTestsUtil.createMockViewport; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import com.google.collide.client.editor.ViewportModel; import com.google.collide.client.editor.search.SearchTask.SearchDirection; import com.google.collide.client.editor.search.SearchTask.SearchTaskExecutor; import com.google.collide.client.testing.StubIncrementalScheduler; import com.google.collide.shared.document.Document; import com.google.collide.shared.document.Line; import com.google.collide.shared.document.LineInfo; import junit.framework.TestCase; import org.easymock.EasyMock; /** * Tests for the revamped Search Task. */ public class SearchTaskTests extends TestCase { private Document document; private StubIncrementalScheduler scheduler; @Override public void setUp() { document = createDocument(); scheduler = new StubIncrementalScheduler(10, 1000); } public void testDocumentFitsInViewport() { SearchTask task = new SearchTask(document, createMockViewport(document, 12), scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(12); replay(executor); task.searchDocument(executor, null); verify(executor); } public void testSchedulerRunsThroughDocument() { SearchTask task = new SearchTask(document, createMockViewport(document, 5), scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(5); expect(executor.onSearchLine( EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(false))) .andReturn(true).times(7); replay(executor); task.searchDocument(executor, null); verify(executor); } public void testDirectionDownWorks() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect(executor.onSearchLine(viewport.getTopLine(), 0, true)).andReturn(true); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(3); expect(executor.onSearchLine(viewport.getBottomLine(), 4, true)).andReturn(true); expect(executor.onSearchLine( EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(false))) .andReturn(true).times(7); replay(executor); task.searchDocument(executor, null, SearchDirection.DOWN); verify(executor); } public void testDirectionUpWorks() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect(executor.onSearchLine(viewport.getBottomLine(), 4, true)).andReturn(true); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(3); expect(executor.onSearchLine(viewport.getTopLine(), 0, true)).andReturn(true); expect(executor.onSearchLine(document.getLastLine(), 11, false)).andReturn(true); expect(executor.onSearchLine( EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(false))) .andReturn(true).times(6); replay(executor); task.searchDocument(executor, null, SearchDirection.UP); verify(executor); } public void testStartingAtLineWorks() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); LineInfo lineInfo = viewport.getTopLineInfo(); lineInfo.moveToNext(); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect(executor.onSearchLine(lineInfo.line(), 1, true)).andReturn(true); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(2); expect(executor.onSearchLine(viewport.getBottomLine(), 4, true)).andReturn(true); expect(executor.onSearchLine( EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(false))) .andReturn(true).times(7); expect(executor.onSearchLine(viewport.getTopLine(), 0, false)).andReturn(true); replay(executor); task.searchDocumentStartingAtLine(executor, null, SearchDirection.DOWN, lineInfo); verify(executor); } public void testNoWrapWorks() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect(executor.onSearchLine(viewport.getBottomLine(), 4, true)).andReturn(true); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(3); expect(executor.onSearchLine(viewport.getTopLine(), 0, true)).andReturn(true); replay(executor); task.setShouldWrapDocument(false); task.searchDocument(executor, null, SearchDirection.UP); verify(executor); } public void testHaltViewportSearch() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect(executor.onSearchLine(viewport.getTopLine(), 0, true)).andReturn(true); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(3); expect(executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.eq(4), EasyMock.eq(true))) .andReturn(false); replay(executor); task.searchDocument(executor, null); verify(executor); } public void testHaltSchedulerSearch() { ViewportModel viewport = createMockViewport(document, 5); SearchTask task = new SearchTask(document, viewport, scheduler); SearchTaskExecutor executor = EasyMock.createMock(SearchTaskExecutor.class); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.anyInt(), EasyMock.eq(true))) .andReturn(true).times(5); expect( executor.onSearchLine(EasyMock.anyObject(Line.class), EasyMock.eq(5), EasyMock.eq(false))) .andReturn(false); replay(executor); task.searchDocument(executor, null); verify(executor); } }