/*******************************************************************************
* Copyright (c) 2016 Red Hat.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat - Initial Contribution
*******************************************************************************/
package org.eclipse.linuxtools.internal.docker.ui.consoles;
import static org.assertj.core.api.Assertions.assertThat;
import static org.eclipse.linuxtools.internal.docker.ui.consoles.StyledTextBuilder.ESC;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.SWTUtils;
import org.eclipse.swt.custom.StyledText;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
/**
* Testing that the colored output are properly generated into
* {@link StyledText}.
*/
@RunWith(Parameterized.class)
public class StyledConsoleLogsTest {
private static class ParametersBuilder {
private final List<Object[]> parameters = new ArrayList<>();
ParametersBuilder add(final String lineText, final StyledString expectation) {
parameters.add(new Object[] { lineText, expectation });
return this;
}
Object[][] build() {
return parameters.toArray(new Object[0][0]);
}
}
@Parameters() // don't use name = "{0}" to display the unit test name, as it
// breaks the build on Hudson because of an invalid XML
// character
public static Object[][] getData() {
final ParametersBuilder parametersBuilder = new ParametersBuilder();
parametersBuilder.add(ESC + "[33mcontainerid|" + ESC + "[0mstandard_content",
new StyledString().append("containerid|", StylerBuilder.styler(33)).append("standard_content",
StylerBuilder.defaultStyler()));
parametersBuilder.add("prefix_content" + ESC + "[33mcontainerid|" + ESC + "[0mstandard_content",
new StyledString().append("prefix_content", StylerBuilder.defaultStyler())
.append("containerid|", StylerBuilder.styler(33))
.append("standard_content", StylerBuilder.defaultStyler()));
parametersBuilder.add(ESC + "[33merror_content",
new StyledString().append("error_content", StylerBuilder.styler(33)));
parametersBuilder.add(ESC + "[33mcontainerid|" + ESC + "[0mstandard_content1" + ESC + "[34mcolorized_content"
+ ESC + "[0mstandard_content2",
new StyledString().append("containerid|", StylerBuilder.styler(33))
.append("standard_content1", StylerBuilder.defaultStyler())
.append("colorized_content", StylerBuilder.styler(34))
.append("standard_content2", StylerBuilder.defaultStyler()));
parametersBuilder.add(
ESC + "[33mcontainerid|" + ESC + "[0mstandard_content1" + ESC + "[34mcolorized_content" + ESC
+ "[0mstandard_content2" + ESC + "[35mcolorized_content2",
new StyledString().append("containerid|", StylerBuilder.styler(33))
.append("standard_content1", StylerBuilder.defaultStyler())
.append("colorized_content", StylerBuilder.styler(34))
.append("standard_content2", StylerBuilder.defaultStyler())
.append("colorized_content2", StylerBuilder.styler(35)));
parametersBuilder.add(ESC + "[0m" + ESC + "[33merror_content",
new StyledString().append("", StylerBuilder.defaultStyler()).append("error_content",
StylerBuilder.styler(33)));
parametersBuilder.add(ESC + "[0m", new StyledString().append("", StylerBuilder.defaultStyler()));
return parametersBuilder.build();
}
@Parameter(0)
public String lineText;
@Parameter(1)
public StyledString expectedStyledString;
@Test
public void shouldGenerateStyledString() {
// given
// when
final StyledString result = StyledTextBuilder.parse(lineText);
// then
assertThat(SWTUtils.syncExec(() -> result.getStyleRanges()))
.isEqualTo(SWTUtils.syncExec(() -> expectedStyledString.getStyleRanges()));
assertThat(result.getString()).isEqualTo(expectedStyledString.getString());
}
}