Package com.github.sevntu.checkstyle

Source Code of com.github.sevntu.checkstyle.BaseCheckTestSupport$BriefLogger

package com.github.sevntu.checkstyle;

import static java.text.MessageFormat.format;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URL;
import java.util.List;
import java.util.Locale;
import java.util.Properties;

import org.junit.Assert;

import com.google.common.collect.Lists;
import com.puppycrawl.tools.checkstyle.Checker;
import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
import com.puppycrawl.tools.checkstyle.DefaultLogger;
import com.puppycrawl.tools.checkstyle.TreeWalker;
import com.puppycrawl.tools.checkstyle.api.AuditEvent;
import com.puppycrawl.tools.checkstyle.api.Configuration;

public abstract class BaseCheckTestSupport extends Assert
{
  /** A brief logger that only display errors */
  protected static class BriefLogger extends DefaultLogger
  {

    public BriefLogger(OutputStream out)
    {
      super(out, true);
    }

    @Override
    public void auditStarted(AuditEvent evt) {
    }

    @Override
    public void fileFinished(AuditEvent evt) {
    }

    @Override
    public void fileStarted(AuditEvent evt) {
    }
  }

  private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  private final PrintStream printStream = new PrintStream(baos);

  public static DefaultConfiguration createCheckConfig(Class<?> aClazz)
  {
    return new DefaultConfiguration(aClazz.getName());
  }

  protected void verify(Configuration aConfig, String aFileName, String[] aExpected)
      throws Exception
  {
    verify(createChecker(aConfig), aFileName, aFileName, aExpected);
  }

  protected void verify(Checker aC, String aFileName, String[] aExpected) throws Exception
  {
    verify(aC, aFileName, aFileName, aExpected);
  }

  protected void verify(Checker aC, String aProcessedFilename, String aMessageFileName,
      String[] aExpected) throws Exception
  {
    verify(aC, new File[] { new File(aProcessedFilename) }, aMessageFileName, aExpected);
  }

  protected void verify(Checker checker, File[] aProcessedFiles, String aMessageFileName,
      String[] aExpected) throws Exception
  {
    printStream.flush();
    List<File> testInputFiles = Lists.newArrayList(aProcessedFiles);
    int foundErrorsCount = checker.process(testInputFiles);

    // Process each output line
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    BufferedReader br = new BufferedReader(new InputStreamReader(bais));

    try {
      for (int i = 0; i < aExpected.length; i++) {
        final String expected = aMessageFileName + ":" + aExpected[i];
        final String actual = br.readLine();
        assertEquals("error message " + i, expected, actual);
      }

      assertEquals("Check generated unexpected warning: " + br.readLine(), aExpected.length, foundErrorsCount);
      checker.destroy();
    } finally {
      br.close();
      bais.close();
    }
  }

  protected Checker createChecker(Configuration aCheckConfig) throws Exception
  {
    Checker checker = new Checker();
    // make sure the tests always run with english error messages
    // so the tests don't fail in supported locales like german
    Locale locale = Locale.ENGLISH;
    checker.setLocaleCountry(locale.getCountry());
    checker.setLocaleLanguage(locale.getLanguage());
    checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader());

    DefaultConfiguration defaultConfig = createCheckerConfig(aCheckConfig);
    checker.configure(defaultConfig);

    checker.addListener(new BriefLogger(printStream));
    return checker;
  }

  protected DefaultConfiguration createCheckerConfig(Configuration aConfig)
  {
    DefaultConfiguration result = new DefaultConfiguration("configuration");
    DefaultConfiguration treeWalkerConfig = createCheckConfig(TreeWalker.class);
    // make sure that the tests always run with this charset
    result.addAttribute("charset", "iso-8859-1");
    result.addChild(treeWalkerConfig);
    treeWalkerConfig.addChild(aConfig);
    return result;
  }

  protected String getPath(String aFilename)
  {
    String result = null;
    try {
      URL resource = getClass().getResource(aFilename);
      if (resource == null) {
        throw new RuntimeException(String.format("Resource '%s' can NOT be found "
            + "(does not exist or just not visible for current classloader)",
            aFilename));
      } else {
        result = new File(resource.getPath()).getCanonicalPath();
      }
    } catch (IOException e) {
      throw new RuntimeException("Error while getting path for resource: " + aFilename, e);
    }
    return result;
  }

  /**
   * Gets the check message 'as is' from appropriate 'messages.properties' file.
   * @param messageKey the key of message in 'messages.properties' file.
   */
  public String getCheckMessage(String messageKey) {
    Properties pr = new Properties();
    try {
      pr.load(getClass().getResourceAsStream("messages.properties"));
    } catch (IOException e) {
      return null;
    }
    return pr.getProperty(messageKey);
  }
 
  /**
   * Gets the check message 'as is' from appropriate 'messages.properties' file.
   * @param messageKey the key of message in 'messages.properties' file.
   * @param arguments the arguments of message in 'messages.properties' file.
   */
  public String getCheckMessage(String messageKey, Object ... arguments) {
    return format(getCheckMessage(messageKey), arguments);
  }
}
TOP

Related Classes of com.github.sevntu.checkstyle.BaseCheckTestSupport$BriefLogger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.