View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2026 the original author or authors.
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ///////////////////////////////////////////////////////////////////////////////////////////////
19  
20  package com.puppycrawl.tools.checkstyle;
21  
22  import static com.google.common.truth.Truth.assertWithMessage;
23  import static com.puppycrawl.tools.checkstyle.internal.utils.TestUtil.getExpectedThrowable;
24  
25  import java.util.Set;
26  
27  import org.junit.jupiter.api.Test;
28  
29  import com.puppycrawl.tools.checkstyle.internal.utils.CheckUtil;
30  
31  public class ThreadModeSettingsTest {
32  
33      @Test
34      public void testProperties() {
35          final ThreadModeSettings config = new ThreadModeSettings(1, 2);
36          assertWithMessage("Invalid checker threads number")
37                  .that(config.checkerThreadsNumber())
38                  .isEqualTo(1);
39          assertWithMessage("Invalid treewalker threads number")
40                  .that(config.treeWalkerThreadsNumber())
41                  .isEqualTo(2);
42      }
43  
44      @Test
45      public void testResolveCheckerInMultiThreadMode() {
46          final ThreadModeSettings configuration = new ThreadModeSettings(2, 2);
47  
48          final IllegalArgumentException exc =
49                  getExpectedThrowable(IllegalArgumentException.class, () -> {
50                      configuration.resolveName(ThreadModeSettings.CHECKER_MODULE_NAME);
51                  }, "An exception is expected");
52          assertWithMessage("Invalid exception message")
53                  .that(exc.getMessage())
54                  .isEqualTo("Multi thread mode for Checker module is not implemented");
55      }
56  
57      @Test
58      public void testResolveCheckerInSingleThreadMode() {
59          final ThreadModeSettings singleThreadMode = ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
60  
61          final String name = singleThreadMode.resolveName(ThreadModeSettings.CHECKER_MODULE_NAME);
62          assertWithMessage("Invalid name resolved")
63                  .that(name)
64                  .isEqualTo(ThreadModeSettings.CHECKER_MODULE_NAME);
65      }
66  
67      @Test
68      public void testResolveTreeWalker() {
69          final ThreadModeSettings configuration = new ThreadModeSettings(2, 2);
70  
71          final IllegalArgumentException exc =
72                  getExpectedThrowable(IllegalArgumentException.class, () -> {
73                      configuration.resolveName(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
74                  }, "Exception is expected");
75          assertWithMessage("Invalid exception message")
76                  .that(exc.getMessage())
77                  .isEqualTo("Multi thread mode for TreeWalker module is not implemented");
78      }
79  
80      @Test
81      public void testResolveTreeWalkerInSingleThreadMode() {
82          final ThreadModeSettings singleThreadMode = ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
83          final String actual =
84                  singleThreadMode.resolveName(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
85          assertWithMessage("Invalid name resolved: %s", actual)
86                  .that(actual)
87                  .isEqualTo(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
88      }
89  
90      @Test
91      public void testResolveAnyOtherModule() throws Exception {
92          final Set<Class<?>> allModules = CheckUtil.getCheckstyleModules();
93          final ThreadModeSettings multiThreadModeSettings = new ThreadModeSettings(2, 2);
94          final ThreadModeSettings singleThreadModeSettings =
95                  ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
96  
97          for (Class<?> module : allModules) {
98              if (Checker.class.isAssignableFrom(module)
99                      || TreeWalker.class.isAssignableFrom(module)) {
100                 // they're handled in other tests
101                 continue;
102             }
103 
104             final String moduleName = module.getSimpleName();
105             assertWithMessage("Invalid name resolved")
106                     .that(singleThreadModeSettings.resolveName(moduleName))
107                     .isEqualTo(moduleName);
108             assertWithMessage("Invalid name resolved")
109                     .that(multiThreadModeSettings.resolveName(moduleName))
110                     .isEqualTo(moduleName);
111         }
112     }
113 
114 }