View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2024 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  
24  import java.util.Set;
25  
26  import org.junit.jupiter.api.Test;
27  
28  import com.puppycrawl.tools.checkstyle.internal.utils.CheckUtil;
29  
30  public class ThreadModeSettingsTest {
31  
32      @Test
33      public void testProperties() {
34          final ThreadModeSettings config = new ThreadModeSettings(1, 2);
35          assertWithMessage("Invalid checker threads number")
36                  .that(config.getCheckerThreadsNumber())
37                  .isEqualTo(1);
38          assertWithMessage("Invalid treewalker threads number")
39                  .that(config.getTreeWalkerThreadsNumber())
40                  .isEqualTo(2);
41      }
42  
43      @Test
44      public void testResolveCheckerInMultiThreadMode() {
45          final ThreadModeSettings configuration = new ThreadModeSettings(2, 2);
46  
47          try {
48              configuration.resolveName(ThreadModeSettings.CHECKER_MODULE_NAME);
49              assertWithMessage("An exception is expected").fail();
50          }
51          catch (IllegalArgumentException ex) {
52              assertWithMessage("Invalid exception message")
53                      .that(ex.getMessage())
54                      .isEqualTo("Multi thread mode for Checker module is not implemented");
55          }
56      }
57  
58      @Test
59      public void testResolveCheckerInSingleThreadMode() {
60          final ThreadModeSettings singleThreadMode = ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
61  
62          final String name = singleThreadMode.resolveName(ThreadModeSettings.CHECKER_MODULE_NAME);
63          assertWithMessage("Invalid name resolved")
64                  .that(name)
65                  .isEqualTo(ThreadModeSettings.CHECKER_MODULE_NAME);
66      }
67  
68      @Test
69      public void testResolveTreeWalker() {
70          final ThreadModeSettings configuration = new ThreadModeSettings(2, 2);
71  
72          try {
73              configuration.resolveName(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
74              assertWithMessage("Exception is expected").fail();
75          }
76          catch (IllegalArgumentException ex) {
77              assertWithMessage("Invalid exception message")
78                      .that(ex.getMessage())
79                      .isEqualTo("Multi thread mode for TreeWalker module is not implemented");
80          }
81      }
82  
83      @Test
84      public void testResolveTreeWalkerInSingleThreadMode() {
85          final ThreadModeSettings singleThreadMode = ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
86          final String actual =
87                  singleThreadMode.resolveName(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
88          assertWithMessage("Invalid name resolved: " + actual)
89                  .that(actual)
90                  .isEqualTo(ThreadModeSettings.TREE_WALKER_MODULE_NAME);
91      }
92  
93      @Test
94      public void testResolveAnyOtherModule() throws Exception {
95          final Set<Class<?>> allModules = CheckUtil.getCheckstyleModules();
96          final ThreadModeSettings multiThreadModeSettings = new ThreadModeSettings(2, 2);
97          final ThreadModeSettings singleThreadModeSettings =
98                  ThreadModeSettings.SINGLE_THREAD_MODE_INSTANCE;
99  
100         for (Class<?> module : allModules) {
101             if (Checker.class.isAssignableFrom(module)
102                     || TreeWalker.class.isAssignableFrom(module)) {
103                 // they're handled in other tests
104                 continue;
105             }
106 
107             final String moduleName = module.getSimpleName();
108             assertWithMessage("Invalid name resolved")
109                     .that(singleThreadModeSettings.resolveName(moduleName))
110                     .isEqualTo(moduleName);
111             assertWithMessage("Invalid name resolved")
112                     .that(multiThreadModeSettings.resolveName(moduleName))
113                     .isEqualTo(moduleName);
114         }
115     }
116 
117 }