import com.google.common.collect.Sets;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.CompareToBuilder;
import org.codehaus.staxmate.SMInputFactory;
import org.codehaus.staxmate.in.SMHierarchicCursor;
import org.codehaus.staxmate.in.SMInputCursor;
import java.io.Reader;
import java.io.Writer;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
} finally {
dbSession.close();
}
- Iterator<ActiveRule> activeRules = index.get(ActiveRuleIndex.class).findByProfile(profile.getKey());
- writeXml(writer, profile, activeRules);
+ List<ActiveRule> activeRules = Lists.newArrayList(index.get(ActiveRuleIndex.class).findByProfile(profile.getKey()));
+ Collections.sort(activeRules, BackupActiveRuleComparator.INSTANCE);
+ writeXml(writer, profile, activeRules.iterator());
}
private void writeXml(Writer writer, QualityProfileDto profile, Iterator<ActiveRule> activeRules) {
xmlFactory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE);
return new SMInputFactory(xmlFactory);
}
+
+ private enum BackupActiveRuleComparator implements Comparator<ActiveRule> {
+ INSTANCE;
+
+ @Override
+ public int compare(ActiveRule o1, ActiveRule o2) {
+ return new CompareToBuilder()
+ .append(o1.key().ruleKey().repository(), o2.key().ruleKey().repository())
+ .append(o1.key().ruleKey().rule(), o2.key().ruleKey().rule())
+ .toComparison();
+ }
+ }
}
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
+import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.api.server.rule.RuleParamType;
import org.sonar.core.persistence.DbSession;
@Test
public void backup() throws Exception {
- // create profile P1 with rule x1 activated
+ RuleKey blahRuleKey = RuleKey.of("blah", "my-rule");
+ RuleDto blahRule = RuleTesting.newDto(blahRuleKey).setSeverity("INFO").setLanguage("xoo");
+ db.ruleDao().insert(dbSession, blahRule);
+ dbSession.commit();
+ dbSession.clearCache();
+
+ // create profile P1 with rules x2 and x1 activated
db.qualityProfileDao().insert(dbSession, QProfileTesting.newXooP1());
- RuleActivation activation = new RuleActivation(RuleTesting.XOO_X1);
- activation.setSeverity(Severity.BLOCKER);
- activation.setParameter("max", "7");
- tester.get(RuleActivator.class).activate(dbSession, activation, QProfileTesting.XOO_P1_NAME);
+ RuleActivation activation1 = new RuleActivation(RuleTesting.XOO_X2).setSeverity("MINOR");
+ RuleActivation activation2 = new RuleActivation(RuleTesting.XOO_X1);
+ RuleActivation activation3 = new RuleActivation(blahRuleKey);
+ activation2.setSeverity(Severity.BLOCKER);
+ activation2.setParameter("max", "7");
+ tester.get(RuleActivator.class).activate(dbSession, activation1, QProfileTesting.XOO_P1_NAME);
+ tester.get(RuleActivator.class).activate(dbSession, activation2, QProfileTesting.XOO_P1_NAME);
+ tester.get(RuleActivator.class).activate(dbSession, activation3, QProfileTesting.XOO_P1_NAME);
dbSession.commit();
dbSession.clearCache();
tester.get(QProfileBackuper.class).backup(QProfileTesting.XOO_P1_KEY, output);
XMLUnit.setIgnoreWhitespace(true);
+ XMLUnit.setIgnoreComments(true);
Diff diff = XMLUnit.compareXML(output.toString(),
Resources.toString(getClass().getResource("QProfileBackuperMediumTest/expected-backup.xml"), Charsets.UTF_8));