blob: 3cf11cd15ab19131f0f9db8f2d28c260a87fc263 [file] [log] [blame]
/*
* Copyright 2000-2011 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.impl;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.editor.markup.TextAttributes;
import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
* @author Denis Zhdanov
* @since 07/19/2011
*/
public class ConsoleUtilTest {
private static final ConsoleViewContentType IMPORTANT_OUTPUT = new ConsoleViewContentType("IMPORTANT_OUTPUT", (TextAttributes)null);
private static final ConsoleViewContentType NORMAL_OUTPUT = new ConsoleViewContentType("NORMAL_OUTPUT", (TextAttributes)null);
private List<ConsoleViewImpl.TokenInfo> myTokens;
@Before
public void setUp() {
myTokens = new ArrayList<ConsoleViewImpl.TokenInfo>();
}
@Test
public void completeRemoval() {
register(NORMAL_OUTPUT, 12);
register(IMPORTANT_OUTPUT, 5);
doTest(0, 17);
}
@Test
public void removeLaysTooFarToTheRight() {
register(NORMAL_OUTPUT, 12);
register(IMPORTANT_OUTPUT, 5);
doTest(17, 20, myTokens.toArray(new ConsoleViewImpl.TokenInfo[myTokens.size()]));
}
@Test
public void removeFromSingleToken() {
register(NORMAL_OUTPUT, 12);
register(IMPORTANT_OUTPUT, 5);
doTest(2, 4, t(NORMAL_OUTPUT, 0, 10), t(IMPORTANT_OUTPUT, 10, 15));
}
@Test
public void removeExactTokenOffset() {
register(NORMAL_OUTPUT, 12);
register(IMPORTANT_OUTPUT, 5);
doTest(12, 17, t(NORMAL_OUTPUT, 0, 12));
}
@Test
public void removeInsideSingleTokenWithStrictLeft() {
register(NORMAL_OUTPUT, 12);
register(IMPORTANT_OUTPUT, 5);
doTest(0, 11, t(NORMAL_OUTPUT, 0, 1), t(IMPORTANT_OUTPUT, 1, 6));
}
private void doTest(int startRemoveOffset, int endRemoveOffset, ConsoleViewImpl.TokenInfo ... expected) {
ConsoleUtil.updateTokensOnTextRemoval(myTokens, startRemoveOffset, endRemoveOffset);
String message = String.format("Expected: %s, actual: %s", Arrays.toString(expected), myTokens);
assertEquals(message, expected.length, myTokens.size());
for (int i = 0; i < expected.length; i++) {
ConsoleViewImpl.TokenInfo expectedToken = expected[i];
final ConsoleViewImpl.TokenInfo actualToken = myTokens.get(i);
assertEquals(message, expectedToken.contentType, actualToken.contentType);
assertEquals(message, expectedToken.startOffset, actualToken.startOffset);
assertEquals(message, expectedToken.endOffset, actualToken.endOffset);
}
}
private void register(ConsoleViewContentType contentType, int length) {
int startOffset = myTokens.isEmpty() ? 0 : myTokens.get(myTokens.size() - 1).endOffset;
int endOffset = startOffset + length;
myTokens.add(t(contentType, startOffset, endOffset));
}
private static ConsoleViewImpl.TokenInfo t(@NotNull ConsoleViewContentType contentType, int start, int end) {
return new ConsoleViewImpl.TokenInfo(contentType, start, end);
}
}