| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * 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.intellij.execution.filters; |
| |
| import com.intellij.mock.MockDumbService; |
| import org.junit.Assert; |
| import org.jetbrains.annotations.Nullable; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import java.util.List; |
| |
| public class CompositeFilterTest { |
| |
| protected CompositeFilter myCompositeFilter; |
| |
| @Before |
| public void setUp() throws Exception { |
| myCompositeFilter = new CompositeFilter(new MockDumbService(null)); |
| myCompositeFilter.setForceUseAllFilters(false); |
| } |
| |
| @Test |
| public void testApplyNextFilter() throws Exception { |
| Assert.assertNull(applyFilter()); |
| |
| myCompositeFilter.addFilter(returnNullFilter()); |
| Assert.assertNull(applyFilter()); |
| |
| myCompositeFilter.addFilter(returnContinuingResultFilter()); |
| notNullResultOfSize(applyFilter(), 1); |
| |
| myCompositeFilter.addFilter(returnNullFilter()); |
| myCompositeFilter.addFilter(returnContinuingResultFilter()); |
| notNullResultOfSize(applyFilter(), 2); |
| |
| myCompositeFilter.addFilter(returnNullFilter()); |
| notNullResultOfSize(applyFilter(), 2); |
| |
| myCompositeFilter.addFilter(returnResultFilter()); |
| notNullResultOfSize(applyFilter(), 3); |
| |
| myCompositeFilter.addFilter(returnResultFilter()); |
| notNullResultOfSize(applyFilter(), 3); |
| |
| myCompositeFilter.setForceUseAllFilters(true); |
| notNullResultOfSize(applyFilter(), 4); |
| |
| } |
| |
| @Test |
| public void testApplyBadFilter() throws Exception { |
| myCompositeFilter.addFilter(throwSOEFilter()); |
| try { |
| Assert.assertNull(applyFilter()); |
| Assert.fail("Exception expected"); |
| } |
| catch (Exception e) { |
| Assert.assertTrue(e.getMessage().contains("Error while applying com.intellij.execution.filters.CompositeFilterTest$")); |
| } |
| } |
| |
| private Filter.Result applyFilter() { |
| return myCompositeFilter.applyFilter("foo\n", 10); |
| } |
| |
| private static void notNullResultOfSize(Filter.Result object, int expected) { |
| Assert.assertNotNull(object); |
| List<Filter.ResultItem> resultItems = object.getResultItems(); |
| Assert.assertEquals(expected, resultItems.size()); |
| |
| for (Filter.ResultItem resultItem : resultItems) { |
| Assert.assertNotNull(resultItem); |
| } |
| } |
| |
| private static Filter throwSOEFilter() { |
| //noinspection InfiniteRecursion |
| return new Filter() { |
| @Nullable |
| @Override |
| public Result applyFilter(String line, int entireLength) { |
| return applyFilter(line, entireLength); |
| } |
| }; |
| } |
| |
| private static Filter returnNullFilter() { |
| return new Filter() { |
| @Nullable |
| @Override |
| public Result applyFilter(String line, int entireLength) { |
| return null; |
| } |
| }; |
| } |
| |
| private static Filter returnResultFilter() { |
| return new Filter() { |
| @Nullable |
| @Override |
| public Result applyFilter(String line, int entireLength) { |
| return createResult(); |
| } |
| }; |
| } |
| |
| private static Filter returnContinuingResultFilter() { |
| return new Filter() { |
| @Nullable |
| @Override |
| public Result applyFilter(String line, int entireLength) { |
| Result result = createResult(); |
| result.setNextAction(NextAction.CONTINUE_FILTERING); |
| return result; |
| } |
| }; |
| } |
| |
| private static Filter.Result createResult() { |
| return new Filter.Result(1, 1, null, null); |
| } |
| } |