package jetbrains.mps.tool.common; /*Generated by MPS */ import org.jetbrains.annotations.NotNull; import java.util.regex.Pattern; import java.util.regex.Matcher; public class TeamCityMessageFormat implements IMessageFormat { private static final String LINES_SEPARATOR = "|n"; private static final String SERVER_PREFIX = "##teamcity["; private static final String SERVER_TEST_FAILED_PREFIX = "##teamcity[testFailed"; public TeamCityMessageFormat() { } @Override public String escapeBuildMessage(@NotNull String rawMessage) { return rawMessage.replace("|", "||").replace("'", "|'").replace("\n", LINES_SEPARATOR).replace("\r", "|r").replace("]", "|]"); } @Override public StringBuffer escapeBuildMessage(@NotNull StringBuffer message) { String[] replacements = new String[]{"\\|", "||", "'", "|'", "\n", LINES_SEPARATOR, "\r", "|r", "]", "|]"}; for (int i = 0; i < replacements.length; i += 2) { StringBuffer newMessage = new StringBuffer(message.length()); Pattern p = Pattern.compile(replacements[i]); Matcher m = p.matcher(message); boolean found = false; while (m.find()) { found = true; m.appendReplacement(newMessage, replacements[i + 1]); } if (found) { m.appendTail(newMessage); message = newMessage; } } return message; } @Override public String getLinesSeparator() { return LINES_SEPARATOR; } @Override public String formatTestStart(@NotNull String testName) { return "##teamcity[testStarted name='" + testName + "' captureStandardOutput='true']"; } @Override public String formatTestFinish(@NotNull String testName) { return "##teamcity[testFinished name='" + testName + "']"; } public String formatTestFailure(String testName, String message, String detailes) { return "##teamcity[testFailed name='" + testName + "' message='" + message + "' details='" + detailes + "']"; } @Override public CharSequence formatTestFailure(@NotNull String testName, @NotNull String message, @NotNull CharSequence details) { StringBuffer sb = new StringBuffer(); sb.append("##teamcity[testFailed name='").append(testName).append("' message='").append(message).append("' details='").append(details).append("']"); return sb; } @Override public boolean isBuildServerMessage(@NotNull CharSequence message) { return (message.length() >= SERVER_PREFIX.length()) && message.subSequence(0, SERVER_PREFIX.length()).toString().equals(SERVER_PREFIX); } @Override public int hasContinuation(@NotNull String message) { return (message.endsWith("\\") ? 1 : 0); } public boolean isTestFailMessage(CharSequence text) { return (text.length() >= SERVER_TEST_FAILED_PREFIX.length()) && text.subSequence(0, SERVER_TEST_FAILED_PREFIX.length()).toString().equals(SERVER_TEST_FAILED_PREFIX); } }