@Test
  public void testShouldAnalyseReusedReports() throws Exception {
    conf.addProperty(GendarmeConstants.MODE, GendarmeSensor.MODE_REUSE_REPORT);
    conf.addProperty(GendarmeConstants.REPORTS_PATH_KEY, "**/*.xml");
    initializeSensor();
    GendarmeRunner runner = mock(GendarmeRunner.class);
    GendarmeCommandBuilder builder = GendarmeCommandBuilder.createBuilder(null, vsProject);
    builder.setExecutable(new File("FxCopCmd.exe"));
    when(runner.createCommandBuilder(eq(solution), any(VisualStudioProject.class)))
        .thenReturn(builder);

    PowerMockito.mockStatic(GendarmeRunner.class);
    when(GendarmeRunner.create(anyString(), anyString())).thenReturn(runner);

    File fakeReport = TestUtils.getResource("/Sensor/FakeGendarmeConfigFile.xml");
    PowerMockito.mockStatic(FileFinder.class);
    when(FileFinder.findFiles(solution, vsProject, "**/*.xml"))
        .thenReturn(Lists.newArrayList(fakeReport, fakeReport));

    Project project = mock(Project.class);
    when(project.getName()).thenReturn("Project #1");

    SensorContext context = mock(SensorContext.class);

    sensor.analyse(project, context);

    verify(resultParser, times(2)).parse(any(File.class));
  }
Ejemplo n.º 2
0
  /** {@inheritDoc} */
  public void analyse(Project project, SensorContext context) {
    if (rulesProfile.getActiveRulesByRepository(FxCopConstants.REPOSITORY_KEY).isEmpty()) {
      LOG.warn(
          "/!\\ SKIP FxCop analysis: no rule defined for FxCop in the \"{}\" profil.",
          rulesProfile.getName());
      return;
    }

    fxCopResultParser.setEncoding(fileSystem.getSourceCharset());

    final File reportFile;
    File projectDir = project.getFileSystem().getBasedir();
    String reportDefaultPath =
        getMicrosoftWindowsEnvironment().getWorkingDirectory()
            + "/"
            + FxCopConstants.FXCOP_REPORT_XML;
    if (MODE_REUSE_REPORT.equalsIgnoreCase(executionMode)) {
      String reportPath =
          configuration.getString(FxCopConstants.REPORTS_PATH_KEY, reportDefaultPath);
      reportFile = FileFinder.browse(projectDir, reportPath);
      LOG.info("Reusing FxCop report: " + reportFile);
    } else {
      // prepare config file for FxCop
      File fxCopConfigFile = generateConfigurationFile();
      // and run FxCop
      try {
        FxCopRunner runner =
            FxCopRunner.create(
                configuration.getString(
                    FxCopConstants.INSTALL_DIR_KEY, FxCopConstants.INSTALL_DIR_DEFVALUE));
        launchFxCop(project, runner, fxCopConfigFile);
      } catch (FxCopException e) {
        throw new SonarException("FxCop execution failed.", e);
      }
      reportFile = new File(projectDir, reportDefaultPath);
    }

    // and analyze results
    analyseResults(reportFile);
  }