/*
* Sonar W3C Markup Validation Plugin
* Copyright (C) 2010 Matthijs Galesloot
* dev@sonar.codehaus.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sonar.plugins.web.markup;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.List;
import org.apache.commons.configuration.MapConfiguration;
import org.apache.commons.io.IOUtils;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.MavenProject;
import org.sonar.api.profiles.ProfileDefinition;
import org.sonar.api.profiles.RulesProfile;
import org.sonar.api.resources.InputFile;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.ProjectFileSystem;
import org.sonar.api.resources.Resource;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleFinder;
import org.sonar.api.rules.RuleQuery;
import org.sonar.api.utils.SonarException;
import org.sonar.api.utils.ValidationMessages;
import org.sonar.plugins.web.api.WebConstants;
import org.sonar.plugins.web.language.Web;
import org.sonar.plugins.web.markup.rules.DefaultMarkupProfile;
import org.sonar.plugins.web.markup.rules.MarkupRuleRepository;
/**
*
* @author Matthijs Galesloot
*
*/
public class AbstractWebScannerPluginTester {
protected static class MarkupRuleFinder implements RuleFinder {
private final MarkupRuleRepository repository;
private final List<Rule> rules;
public MarkupRuleFinder() {
repository = new MarkupRuleRepository();
rules = repository.createRules();
}
public Rule find(RuleQuery query) {
return null;
}
public Collection<Rule> findAll(RuleQuery query) {
return null;
}
public Rule findByKey(String repositoryKey, String key) {
for (Rule rule : rules) {
if (rule.getKey().equals(key)) {
return rule;
}
}
return null;
}
public Rule findById(int ruleId) {
// TODO Auto-generated method stub
return null;
}
}
/**
* create standard rules profile
*/
protected RulesProfile createStandardRulesProfile() {
ProfileDefinition profileDefinition = new DefaultMarkupProfile();
ValidationMessages messages = ValidationMessages.create();
RulesProfile profile = profileDefinition.createProfile(messages);
assertEquals(0, messages.getErrors().size());
assertEquals(0, messages.getWarnings().size());
assertEquals(0, messages.getInfos().size());
return profile;
}
private static MavenProject loadPom(File pomFile) throws URISyntaxException {
FileReader fileReader = null;
try {
fileReader = new FileReader(pomFile);
Model model = new MavenXpp3Reader().read(fileReader);
MavenProject project = new MavenProject(model);
project.setFile(pomFile);
project.addCompileSourceRoot(project.getBuild().getSourceDirectory());
return project;
} catch (Exception e) {
throw new SonarException("Failed to read Maven project file : " + pomFile.getPath(), e);
} finally {
IOUtils.closeQuietly(fileReader);
}
}
private static class MockFileSystem implements ProjectFileSystem {
public ProjectFileSystem addSourceDir(File arg0) {
// TODO Auto-generated method stub
return null;
}
public ProjectFileSystem addTestDir(File arg0) {
// TODO Auto-generated method stub
return null;
}
public File getBasedir() {
return new File("src/test/resources");
}
public File getBuildDir() {
return new File(getBasedir(), "builddir");
}
public File getBuildOutputDir() {
// TODO Auto-generated method stub
return null;
}
public File getFileFromBuildDirectory(String arg0) {
// TODO Auto-generated method stub
return null;
}
public List<File> getJavaSourceFiles() {
// TODO Auto-generated method stub
return null;
}
public File getReportOutputDir() {
// TODO Auto-generated method stub
return null;
}
public File getSonarWorkingDirectory() {
// TODO Auto-generated method stub
return null;
}
public Charset getSourceCharset() {
// TODO Auto-generated method stub
return null;
}
public List<File> getSourceDirs() {
// TODO Auto-generated method stub
return null;
}
public List<File> getSourceFiles(Language... arg0) {
// TODO Auto-generated method stub
return null;
}
public List<File> getTestDirs() {
// TODO Auto-generated method stub
return null;
}
public List<File> getTestFiles(Language... arg0) {
// TODO Auto-generated method stub
return null;
}
public boolean hasJavaSourceFiles() {
// TODO Auto-generated method stub
return false;
}
public boolean hasTestFiles(Language arg0) {
// TODO Auto-generated method stub
return false;
}
public List<InputFile> mainFiles(String... arg0) {
// TODO Auto-generated method stub
return null;
}
public File resolvePath(String arg0) {
return new File(getBasedir(), arg0);
}
public List<InputFile> testFiles(String... arg0) {
// TODO Auto-generated method stub
return null;
}
public Resource toResource(File arg0) {
// TODO Auto-generated method stub
return null;
}
public File writeToWorkingDirectory(String arg0, String arg1) throws IOException {
// TODO Auto-generated method stub
return null;
}
}
protected Project loadProjectFromPom(File pomFile) throws Exception {
MavenProject pom = loadPom(pomFile);
Project project = new Project(pom.getGroupId() + ":" + pom.getArtifactId()).setPom(pom).setConfiguration(
new MapConfiguration(pom.getProperties()));
project.setFileSystem(new MockFileSystem());
project.setPom(pom);
project.setLanguageKey(WebConstants.LANGUAGE_KEY);
project.setLanguage(Web.INSTANCE);
return project;
}
}