TestLogger.java

  1. /*
  2.  * *********************************************************************************************************************
  3.  *
  4.  * TheseFoolishThings: Miscellaneous utilities
  5.  * http://tidalwave.it/projects/thesefoolishthings
  6.  *
  7.  * Copyright (C) 2009 - 2024 by Tidalwave s.a.s. (http://tidalwave.it)
  8.  *
  9.  * *********************************************************************************************************************
  10.  *
  11.  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  12.  * the License. You may obtain a copy of the License at
  13.  *
  14.  *     http://www.apache.org/licenses/LICENSE-2.0
  15.  *
  16.  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  17.  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
  18.  * specific language governing permissions and limitations under the License.
  19.  *
  20.  * *********************************************************************************************************************
  21.  *
  22.  * git clone https://bitbucket.org/tidalwave/thesefoolishthings-src
  23.  * git clone https://github.com/tidalwave-it/thesefoolishthings-src
  24.  *
  25.  * *********************************************************************************************************************
  26.  */
  27. package it.tidalwave.util.test;

  28. import javax.annotation.Nonnull;
  29. import javax.annotation.Nullable;
  30. import java.util.Arrays;
  31. import org.slf4j.LoggerFactory;
  32. import org.testng.ITestContext;
  33. import org.testng.ITestResult;
  34. import org.testng.TestListenerAdapter;

  35. /***********************************************************************************************************************
  36.  *
  37.  * @author  Fabrizio Giudici
  38.  *
  39.  **********************************************************************************************************************/
  40. public class TestLogger extends TestListenerAdapter
  41.   {
  42.     private static final String S = "***********************************************";
  43.     private static final String SEPARATOR = S + S + S + S;

  44.     @Override
  45.     public void onStart (@Nonnull final ITestContext testContext)
  46.       {
  47.         super.onStart(testContext);
  48.         final var testClass = testContext.getCurrentXmlTest().getClasses().get(0).getName();
  49.         final var log = LoggerFactory.getLogger(testClass);
  50.         log.info("STARTING TESTS OF {}", testClass);
  51.       }

  52.     @Override
  53.     public void onFinish (@Nonnull final ITestContext testContext)
  54.       {
  55.         super.onFinish(testContext);
  56.         final var testClass = testContext.getCurrentXmlTest().getClasses().get(0).getName();
  57.         final var log = LoggerFactory.getLogger(testClass);
  58.         log.info("FINISHED TESTS OF {}", testClass);
  59.       }

  60. //    @Override
  61. //    public void onConfigurationSuccess (final @Nonnull ITestResult result)
  62. //      {
  63. //        super.onConfigurationSuccess(result);
  64. //        final Logger log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  65. //        log.info("====== ON CONFIG SUCCESS");
  66. //      }

  67.     @Override
  68.     public void onConfigurationSkip (@Nonnull final ITestResult result)
  69.       {
  70.         super.onConfigurationSkip(result);
  71.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  72.         final var throwable = result.getThrowable();
  73.         log.warn("CONFIGURATION SKIPPED {}", getMessage(throwable));

  74.         if (throwable != null)
  75.           {
  76.             log.warn("CONFIGURATION SKIPPED", result.getThrowable());
  77.           }
  78.       }

  79.     @Override
  80.     public void onConfigurationFailure (@Nonnull final ITestResult result)
  81.       {
  82.         super.onConfigurationFailure(result);
  83.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  84.         final var throwable = result.getThrowable();
  85.         log.error("CONFIGURATION FAILED {}", getMessage(throwable));

  86.         if (throwable != null)
  87.           {
  88.             log.error("CONFIGURATION FAILED", result.getThrowable());
  89.           }
  90.       }

  91.     @Override
  92.     public void onTestStart (@Nonnull final ITestResult result)
  93.       {
  94.         super.onTestStart(result);
  95.         final var args = getArgs(result);
  96.         final var max = Math.max(args.length() + 5, result.getName().length() + 7);
  97.         final var separator = SEPARATOR.substring(0, Math.min(max, SEPARATOR.length()));
  98.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());

  99.         log.info(separator);
  100.         log.info("TEST \"{}\"", result.getName().replace('_', ' '));

  101.         if (!"".equals(args))
  102.           {
  103.             log.info("ARGS {}", args);
  104.           }

  105.         log.info(separator);
  106.       }

  107.     @Override
  108.     public void onTestFailure (@Nonnull final ITestResult result)
  109.       {
  110.         super.onTestFailure(result);
  111.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  112.         final var throwable = result.getThrowable();
  113.         final var args = getArgs(result);

  114.         log.error("TEST FAILED in {} msec - {}{} - {}",
  115.                  result.getEndMillis() - result.getStartMillis(),
  116.                  result.getName().replace('_', ' '),
  117.                  "".equals(args) ? "" : " " + args,
  118.                  getMessage(throwable));

  119.         if (throwable != null)
  120.           {
  121.             log.error("TEST FAILED", result.getThrowable());
  122.           }

  123.         log.error("");
  124.       }

  125.     @Override
  126.     public void onTestFailedButWithinSuccessPercentage (@Nonnull final ITestResult result)
  127.       {
  128.         super.onTestFailedButWithinSuccessPercentage(result);
  129.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  130.         log.info("TEST FAILED WITHIN SUCCESS PERCENTAGE in {} msec", result.getEndMillis() - result.getStartMillis());
  131.         log.info("");
  132.       }

  133.     @Override
  134.     public void onTestSkipped (@Nonnull final ITestResult result)
  135.       {
  136.         super.onTestSkipped(result);
  137.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  138.         final var throwable = result.getThrowable();
  139.         log.info("TEST SKIPPED {}", getMessage(throwable));

  140.         if (throwable != null)
  141.           {
  142.             log.info("TEST SKIPPED", result.getThrowable());
  143.           }

  144.         log.info("");
  145.       }

  146.     @Override
  147.     public void onTestSuccess (@Nonnull final ITestResult result)
  148.       {
  149.         super.onTestSuccess(result);
  150.         final var log = LoggerFactory.getLogger(result.getTestClass().getRealClass());
  151.         log.info("TEST PASSED in {} msec", result.getEndMillis() - result.getStartMillis());
  152.         log.info("");
  153.       }

  154.     @Nonnull
  155.     private String getArgs (@Nonnull final ITestResult result)
  156.       {
  157.         var args = "";

  158.         final var parameters = result.getParameters();

  159.         if ((parameters != null) && parameters.length > 0)
  160.           {
  161.             args = Arrays.toString(parameters);
  162.           }

  163.         return args;
  164.       }

  165.     @Nonnull
  166.     private static String getMessage (@Nullable final Throwable throwable)
  167.       {
  168.         return (throwable == null) ? "" : throwable.toString();
  169. //        return (throwable == null) ? "" : throwable.toString().replaceAll("\n*", "");
  170.       }
  171.   }