use of org.sonar.api.batch.fs.internal.DefaultFileSystem in project sonar-java by SonarSource.
the class JavaSensorTest method analyzeTwoFilesWithIssues.
private SensorContextTester analyzeTwoFilesWithIssues(MapSettings settings) throws IOException {
SensorContextTester context = SensorContextTester.create(new File("src/test/files").getAbsoluteFile()).setSettings(settings).setRuntime(SonarRuntimeImpl.forSonarQube(Version.create(8, 7), SonarQubeSide.SCANNER, SonarEdition.COMMUNITY));
DefaultFileSystem fs = context.fileSystem();
fs.setWorkDir(tmp.newFolder().toPath());
File mainFile = new File(fs.baseDir(), "CodeWithIssues.java");
fs.add(new TestInputFileBuilder("", mainFile.getName()).setLanguage("java").setModuleBaseDir(fs.baseDirPath()).setType(InputFile.Type.MAIN).initMetadata(Files.readString(mainFile.toPath())).setCharset(UTF_8).build());
File testFile = new File(fs.baseDir(), "CodeWithIssuesTest.java");
fs.add(new TestInputFileBuilder("", testFile.getName()).setLanguage("java").setModuleBaseDir(fs.baseDirPath()).setType(InputFile.Type.TEST).initMetadata(Files.readString(testFile.toPath())).setCharset(UTF_8).build());
FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(mock(FileLinesContext.class));
ClasspathForTest javaTestClasspath = new ClasspathForTest(context.config(), fs);
ClasspathForMain javaClasspath = new ClasspathForMain(context.config(), fs);
DefaultJavaResourceLocator resourceLocator = new DefaultJavaResourceLocator(new ClasspathForMain(context.config(), fs));
CheckRegistrar[] checkRegistrars = new CheckRegistrar[] { new CustomRegistrar() };
ActiveRulesBuilder activeRulesBuilder = new ActiveRulesBuilder();
CheckList.getChecks().stream().map(check -> AnnotationUtils.getAnnotation(check, org.sonar.check.Rule.class).key()).map(key -> new NewActiveRule.Builder().setRuleKey(RuleKey.of("java", key)).build()).forEach(activeRulesBuilder::addRule);
Stream.of("CustomMainCheck", "CustomJspCheck", "CustomTestCheck").map(key -> new NewActiveRule.Builder().setRuleKey(RuleKey.of("CustomRepository", key)).build()).forEach(activeRulesBuilder::addRule);
CheckFactory checkFactory = new CheckFactory(activeRulesBuilder.build());
SonarComponents components = new SonarComponents(fileLinesContextFactory, fs, javaClasspath, javaTestClasspath, checkFactory, checkRegistrars, null);
JavaSensor jss = new JavaSensor(components, fs, resourceLocator, context.config(), mock(NoSonarFilter.class), null);
jss.execute(context);
return context;
}
use of org.sonar.api.batch.fs.internal.DefaultFileSystem in project sonar-java by SonarSource.
the class JavaSensorTest method createSonarComponentsMock.
private static SonarComponents createSonarComponentsMock(SensorContextTester contextTester) {
DefaultFileSystem fs = contextTester.fileSystem();
ClasspathForTest javaTestClasspath = new ClasspathForTest(contextTester.config(), fs);
ClasspathForMain javaClasspath = new ClasspathForMain(contextTester.config(), fs);
FileLinesContext fileLinesContext = mock(FileLinesContext.class);
FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext);
SonarComponents sonarComponents = spy(new SonarComponents(fileLinesContextFactory, fs, javaClasspath, javaTestClasspath, checkFactory));
sonarComponents.setSensorContext(contextTester);
BadMethodNameCheck check = new BadMethodNameCheck();
when(sonarComponents.mainChecks()).thenReturn(Collections.singletonList(check));
return sonarComponents;
}
use of org.sonar.api.batch.fs.internal.DefaultFileSystem in project sonar-java by SonarSource.
the class SonarComponentsTest method add_issue_or_parse_error.
@Test
void add_issue_or_parse_error() throws Exception {
JavaCheck expectedCheck = new CustomCheck();
CheckRegistrar expectedRegistrar = getRegistrar(expectedCheck);
SensorContextTester context = SensorContextTester.create(new File("."));
DefaultFileSystem fileSystem = context.fileSystem();
TestInputFileBuilder inputFileBuilder = new TestInputFileBuilder("", "file.java");
inputFileBuilder.setLines(45);
int[] lineStartOffsets = new int[45];
lineStartOffsets[35] = 12;
lineStartOffsets[42] = 1;
int lastValidOffset = 420;
inputFileBuilder.setOriginalLineStartOffsets(lineStartOffsets);
inputFileBuilder.setOriginalLineEndOffsets(computeLineEndOffsets(lineStartOffsets, lastValidOffset));
inputFileBuilder.setLastValidOffset(lastValidOffset);
InputFile inputFile = inputFileBuilder.build();
fileSystem.add(inputFile);
when(this.checks.ruleKey(any(JavaCheck.class))).thenReturn(mock(RuleKey.class));
SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fileSystem, null, null, checkFactory, new CheckRegistrar[] { expectedRegistrar });
sonarComponents.setSensorContext(context);
sonarComponents.addIssue(inputFile, expectedCheck, -5, "message on wrong line", null);
sonarComponents.addIssue(inputFile, expectedCheck, 42, "message on line 42", 1);
sonarComponents.reportIssue(new AnalyzerMessage(expectedCheck, inputFile, 35, "other message", 0));
List<Issue> issues = new ArrayList<>(context.allIssues());
assertThat(issues).hasSize(3);
assertThat(issues.get(0).primaryLocation().message()).isEqualTo("message on wrong line");
assertThat(issues.get(1).primaryLocation().message()).isEqualTo("message on line 42");
assertThat(issues.get(2).primaryLocation().message()).isEqualTo("other message");
RecognitionException parseError = new RecognitionException(-1, "invalid code", new Exception("parse error"));
context.setRuntime(SonarRuntimeImpl.forSonarLint(V8_9));
assertThat(sonarComponents.reportAnalysisError(parseError, inputFile)).isTrue();
context.setRuntime(SonarRuntimeImpl.forSonarQube(V8_9, SonarQubeSide.SCANNER, SonarEdition.COMMUNITY));
assertThat(sonarComponents.reportAnalysisError(parseError, inputFile)).isFalse();
}
use of org.sonar.api.batch.fs.internal.DefaultFileSystem in project sonar-java by SonarSource.
the class SonarComponentsTest method test_sonar_components.
@Test
void test_sonar_components() {
SensorContextTester sensorContextTester = spy(SensorContextTester.create(new File("")));
DefaultFileSystem fs = sensorContextTester.fileSystem();
ClasspathForTest javaTestClasspath = mock(ClasspathForTest.class);
List<File> javaTestClasspathList = Collections.emptyList();
when(javaTestClasspath.getElements()).thenReturn(javaTestClasspathList);
InputFile inputFile = TestUtils.emptyInputFile("foo.java");
fs.add(inputFile);
FileLinesContext fileLinesContext = mock(FileLinesContext.class);
when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext);
SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fs, null, javaTestClasspath, checkFactory);
sonarComponents.setSensorContext(sensorContextTester);
List<JavaCheck> visitors = sonarComponents.mainChecks();
assertThat(visitors).isEmpty();
Collection<JavaCheck> testChecks = sonarComponents.testChecks();
assertThat(testChecks).isEmpty();
assertThat(sonarComponents.getJavaClasspath()).isEmpty();
assertThat(sonarComponents.getJavaTestClasspath()).isEqualTo(javaTestClasspathList);
NewHighlighting newHighlighting = sonarComponents.highlightableFor(inputFile);
assertThat(newHighlighting).isNotNull();
verify(sensorContextTester, times(1)).newHighlighting();
NewSymbolTable newSymbolTable = sonarComponents.symbolizableFor(inputFile);
assertThat(newSymbolTable).isNotNull();
verify(sensorContextTester, times(1)).newSymbolTable();
assertThat(sonarComponents.fileLinesContextFor(inputFile)).isEqualTo(fileLinesContext);
assertThat(sonarComponents.context()).isSameAs(sensorContextTester);
ClasspathForMain javaClasspath = mock(ClasspathForMain.class);
List<File> list = mock(List.class);
when(javaClasspath.getElements()).thenReturn(list);
sonarComponents = new SonarComponents(fileLinesContextFactory, fs, javaClasspath, javaTestClasspath, checkFactory);
assertThat(sonarComponents.getJavaClasspath()).isEqualTo(list);
}
use of org.sonar.api.batch.fs.internal.DefaultFileSystem in project sonar-java by SonarSource.
the class GeneratedFileTest method setUp.
@BeforeEach
public void setUp() throws Exception {
expected = tmp.resolve("file.jsp");
Files.write(expected, "content".getBytes(StandardCharsets.UTF_8));
fs = new DefaultFileSystem(tmp);
actual = new GeneratedFile(expected);
}
Aggregations