Java源码示例:org.sonar.api.server.debt.DebtRemediationFunction
示例1
public TsLintRule(
String key,
String severity,
String name,
String htmlDescription
) {
this.key = key;
this.severity = severity;
this.name = name;
this.htmlDescription = htmlDescription;
this.hasDebtRemediation = false;
this.debtRemediationFunction = DebtRemediationFunction.Type.CONSTANT_ISSUE;
this.debtRemediationScalar = "0min";
this.debtRemediationOffset = "0min";
this.debtType = null;
}
示例2
public TsLintRule(
String key,
String severity,
String name,
String htmlDescription,
DebtRemediationFunction.Type debtRemediationFunction,
String debtRemediationScalar,
String debtRemediationOffset,
String debtType
) {
this.key = key;
this.severity = severity;
this.name = name;
this.htmlDescription = htmlDescription;
this.hasDebtRemediation = true;
this.debtRemediationFunction = debtRemediationFunction;
this.debtRemediationScalar = debtRemediationScalar;
this.debtRemediationOffset = debtRemediationOffset;
this.debtType = debtType;
}
示例3
@Test
public void ruleWithoutDebtRemediation() {
TsLintRule rule = new TsLintRule(
"key",
Severity.MAJOR,
"name",
"<html></html>"
);
assertEquals("key", rule.key);
assertEquals(Severity.MAJOR, rule.severity);
assertEquals("name", rule.name);
assertEquals("<html></html>", rule.htmlDescription);
assertEquals(false, rule.hasDebtRemediation);
assertEquals(DebtRemediationFunction.Type.CONSTANT_ISSUE, rule.debtRemediationFunction);
assertEquals("0min", rule.debtRemediationScalar);
assertEquals("0min", rule.debtRemediationOffset);
assertEquals(null, rule.debtType);
}
示例4
@Test
public void ruleWithDebtRemediation() {
TsLintRule rule = new TsLintRule(
"key",
Severity.MAJOR,
"name",
"<html></html>",
DebtRemediationFunction.Type.LINEAR_OFFSET,
"1min",
"2min",
RuleType.CODE_SMELL.name()
);
assertEquals("key", rule.key);
assertEquals(Severity.MAJOR, rule.severity);
assertEquals("name", rule.name);
assertEquals("<html></html>", rule.htmlDescription);
assertEquals(true, rule.hasDebtRemediation);
assertEquals(DebtRemediationFunction.Type.LINEAR_OFFSET, rule.debtRemediationFunction);
assertEquals("1min", rule.debtRemediationScalar);
assertEquals("2min", rule.debtRemediationOffset);
assertEquals(RuleType.CODE_SMELL.name(), rule.debtType);
}
示例5
public DebtRemediationFunction remediationFunction(DebtRemediationFunctions drf) {
if (func.startsWith("Constant")) {
return drf.constantPerIssue(constantCost.replace("mn", "min"));
}
if ("Linear".equals(func)) {
return drf.linear(linearFactor.replace("mn", "min"));
}
return drf.linearWithOffset(linearFactor.replace("mn", "min"), linearOffset.replace("mn", "min"));
}
示例6
public DebtRemediationFunction remediationFunction(DebtRemediationFunctions drf) {
if (func.startsWith("Constant")) {
return drf.constantPerIssue(constantCost.replace("mn", "min"));
}
if ("Linear".equals(func)) {
return drf.linear(linearFactor.replace("mn", "min"));
}
return drf.linearWithOffset(linearFactor.replace("mn", "min"), linearOffset.replace("mn", "min"));
}
示例7
public DebtRemediationFunction remediationFunction(DebtRemediationFunctions drf) {
if (func.startsWith("Constant")) {
return drf.constantPerIssue(constantCost.replace("mn", "min"));
}
if ("Linear".equals(func)) {
return drf.linear(linearFactor.replace("mn", "min"));
}
return drf.linearWithOffset(linearFactor.replace("mn", "min"), linearOffset.replace("mn", "min"));
}
示例8
public DebtRemediationFunction remediationFunction(DebtRemediationFunctions debt) {
if (func.startsWith("Constant")) {
return debt.constantPerIssue(constantCost.replace("mn", "min"));
}
if ("Linear".equals(func)) {
return debt.linear(linearFactor.replace("mn", "min"));
}
return debt.linearWithOffset(linearFactor.replace("mn", "min"), linearOffset.replace("mn", "min"));
}
示例9
@Test
public void testRemediationFunctionConstantPerIssue() {
remediation.func = "Constant issue";
remediation.constantCost = "3 mn";
DebtRemediationFunctions functions = mock(DebtRemediationFunctions.class);
DebtRemediationFunction function = mock(DebtRemediationFunction.class);
when(functions.constantPerIssue(eq(remediation.constantCost))).thenReturn(function);
when(function.coefficient()).thenReturn("3 min");
remediation.remediationFunction(functions);
verify(functions).constantPerIssue("3 min");
assertEquals("3 min",function.coefficient());
}
示例10
@Test
public void testRemediationFunctionLinear() {
remediation.func = "Linear";
remediation.linearFactor = "2 mn";
DebtRemediationFunctions functions = mock(DebtRemediationFunctions.class);
DebtRemediationFunction function = mock(DebtRemediationFunction.class);
when(functions.linear(eq(remediation.linearFactor))).thenReturn(function);
when(function.coefficient()).thenReturn("2 min");
remediation.remediationFunction(functions);
verify(functions).linear("2 min");
assertEquals("2 min",function.coefficient());
}
示例11
@Test
public void testRemediationFunctionlinearWithOffset() {
remediation.func = "somethingElse";
remediation.linearFactor = "2 mn";
remediation.linearOffset = "2 mn";
DebtRemediationFunctions functions = mock(DebtRemediationFunctions.class);
DebtRemediationFunction function = mock(DebtRemediationFunction.class);
when(functions.linearWithOffset(eq(remediation.linearFactor), eq(remediation.linearOffset))).thenReturn(function);
when(function.coefficient()).thenReturn("2 min");
remediation.remediationFunction(functions);
verify(functions).linearWithOffset("2 min", "2 min");
assertEquals("2 min",function.coefficient());
}
示例12
private DebtRemediationFunction remediationFunction(final DebtRemediationFunctions drf) {
if (this.func.startsWith("Constant")) {
return drf.constantPerIssue(this.constantCost.replace("mn", "min"));
}
if ("Linear".equals(this.func)) {
return drf.linear(this.coeff.replace("mn", "min"));
}
return drf.linearWithOffset(this.coeff.replace("mn", "min"), this.linearOffset.replace("mn", "min"));
}
示例13
@Test
public void define_should_createRepositoryAndRegisterAllSmellPluginChecks() {
Mockito.when(this.repository.key())
.thenReturn(EXPECTED_REPOSITORY_KEY);
Mockito.when(this.rule.key())
.thenReturn(LAST_RULE_KEY);
// Some plumbering...
Mockito.when(this.context.createRepository(Matchers.anyString(), Matchers.anyString()))
.thenReturn(this.repository);
Mockito.when(this.repository.setName(Matchers.anyString()))
.thenReturn(this.repository);
Mockito.when(this.repository.rules())
.thenReturn(ImmutableList.<NewRule> of(this.rule));
Mockito.when(this.repository.createRule(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.repository.rule(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setName(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setHtmlDescription(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setSeverity(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setTemplate(Matchers.anyBoolean()))
.thenReturn(this.rule);
Mockito.when(this.rule.setStatus(Matchers.any(RuleStatus.class)))
.thenReturn(this.rule);
Mockito.when(this.rule.setTags(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setDebtSubCharacteristic(Matchers.anyString()))
.thenReturn(this.rule);
Mockito.when(this.rule.setDebtRemediationFunction(Matchers.any(DebtRemediationFunction.class)))
.thenReturn(this.rule);
Mockito.when(this.rule.debtRemediationFunctions())
.thenReturn(this.functions);
Mockito.when(this.rule.setEffortToFixDescription(Matchers.anyString()))
.thenReturn(this.rule);
// Execute
final SmellRulesDefinition sut = new SmellRulesDefinition();
sut.define(this.context);
// Verify behavior
Mockito.verify(this.context, Mockito.times(1))
.createRepository(Matchers.eq(EXPECTED_REPOSITORY_KEY), Matchers.eq(Java.KEY));
Mockito.verify(this.repository, Mockito.times(1))
.setName(Matchers.eq(EXPECTED_REPOSITORY_NAME));
Mockito.verify(this.repository, Mockito.times(27))
.createRule(this.captor.capture());
Assertions.assertThat(this.captor.getValue())
.isEqualTo(LAST_RULE_KEY);
Mockito.verify(this.rule, Mockito.times(28))
.key();
Mockito.verify(this.rule, Mockito.times(1))
.setInternalKey(Matchers.eq(LAST_RULE_KEY));
Mockito.verify(this.repository, Mockito.times(1))
.done();
}
示例14
public static void loadRules(InputStream stream, List<TsLintRule> rulesCollection) {
Properties properties = new Properties();
try {
properties.load(stream);
} catch (IOException e) {
LOG.error("Error while loading TsLint rules", e);
}
for(String propKey : properties.stringPropertyNames()) {
if (propKey.contains(".")) {
continue;
}
String ruleEnabled = properties.getProperty(propKey);
if (!"true".equals(ruleEnabled)) {
continue;
}
String ruleId = propKey;
String ruleName = properties.getProperty(propKey + ".name", ruleId.replace("-", " "));
String ruleSeverity = properties.getProperty(propKey + ".severity", DEFAULT_RULE_SEVERITY);
String ruleDescription = properties.getProperty(propKey + ".description", DEFAULT_RULE_DESCRIPTION);
String debtRemediationFunction = properties.getProperty(propKey + ".debtFunc", null);
String debtRemediationScalar = properties.getProperty(propKey + ".debtScalar", DEFAULT_RULE_DEBT_SCALAR);
String debtRemediationOffset = properties.getProperty(propKey + ".debtOffset", DEFAULT_RULE_DEBT_OFFSET);
String debtType = properties.getProperty(propKey + ".debtType", DEFAULT_RULE_DEBT_TYPE);
TsLintRule tsRule = null;
// try to apply the specified debt remediation function
if (debtRemediationFunction != null) {
DebtRemediationFunction.Type debtRemediationFunctionEnum = DebtRemediationFunction.Type.valueOf(debtRemediationFunction);
tsRule = new TsLintRule(
ruleId,
ruleSeverity,
ruleName,
ruleDescription,
debtRemediationFunctionEnum,
debtRemediationScalar,
debtRemediationOffset,
debtType
);
}
// no debt remediation function specified
if (tsRule == null) {
tsRule = new TsLintRule(
ruleId,
ruleSeverity,
ruleName,
ruleDescription
);
}
rulesCollection.add(tsRule);
}
Collections.sort(rulesCollection, (TsLintRule r1, TsLintRule r2) -> r1.key.compareTo(r2.key));
}
示例15
private void createRule(NewRepository repository, TsLintRule tsRule) {
NewRule sonarRule =
repository
.createRule(tsRule.key)
.setName(tsRule.name)
.setSeverity(tsRule.severity)
.setHtmlDescription(tsRule.htmlDescription)
.setStatus(RuleStatus.READY);
if (tsRule.hasDebtRemediation) {
DebtRemediationFunction debtRemediationFn = null;
DebtRemediationFunctions funcs = sonarRule.debtRemediationFunctions();
switch (tsRule.debtRemediationFunction)
{
case LINEAR:
debtRemediationFn = funcs.linear(tsRule.debtRemediationScalar);
break;
case LINEAR_OFFSET:
debtRemediationFn = funcs.linearWithOffset(tsRule.debtRemediationScalar, tsRule.debtRemediationOffset);
break;
case CONSTANT_ISSUE:
debtRemediationFn = funcs.constantPerIssue(tsRule.debtRemediationScalar);
break;
}
sonarRule.setDebtRemediationFunction(debtRemediationFn);
}
RuleType type = null;
if (tsRule.debtType != null && RuleType.names().contains(tsRule.debtType)) {
// Try and parse it as a new-style rule type (since 5.5 SQALE's been replaced
// with something simpler, and there's really only three buckets)
type = RuleType.valueOf(tsRule.debtType);
}
if (type == null) {
type = RuleType.CODE_SMELL;
}
sonarRule.setType(type);
}
示例16
@Before
public void setUp() throws Exception {
this.settings = mock(Settings.class);
when(this.settings.getKeysStartingWith(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS))
.thenReturn(new ArrayList<String>() {{
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg1.name");
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg1.config");
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg2.name");
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg2.config");
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg3.name");
add(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg3.config");
}});
// config with one disabled rule
when(this.settings.getString(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg1.config"))
.thenReturn(
"custom-rule-1=false\n" +
"custom-rule-1.name=test rule #1\n" +
"custom-rule-1.severity=MAJOR\n" +
"custom-rule-1.description=#1 description\n" +
"\n"
);
// config with a basic rule (no debt settings)
when(this.settings.getString(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg2.config"))
.thenReturn(
"custom-rule-2=true\n" +
"custom-rule-2.name=test rule #2\n" +
"custom-rule-2.severity=MINOR\n" +
"custom-rule-2.description=#2 description\n" +
"\n"
);
// config with a advanced rules (including debt settings)
when(this.settings.getString(TypeScriptPlugin.SETTING_TS_RULE_CONFIGS + ".cfg3.config"))
.thenReturn(
"custom-rule-3=true\n" +
"custom-rule-3.name=test rule #3\n" +
"custom-rule-3.severity=INFO\n" +
"custom-rule-3.description=#3 description\n" +
"custom-rule-3.debtFunc=" + DebtRemediationFunction.Type.CONSTANT_ISSUE + "\n" +
"custom-rule-3.debtScalar=15min\n" +
"custom-rule-3.debtOffset=1min\n" +
"custom-rule-3.debtType=INVALID_TYPE_GOES_HERE\n" +
"\n" +
"custom-rule-4=true\n" +
"custom-rule-4.name=test rule #4\n" +
"custom-rule-4.severity=MINOR\n" +
"custom-rule-4.description=#4 description\n" +
"custom-rule-4.debtFunc=" + DebtRemediationFunction.Type.LINEAR + "\n" +
"custom-rule-4.debtScalar=5min\n" +
"custom-rule-4.debtOffset=2h\n" +
"custom-rule-4.debtType=" + RuleType.BUG.name() + "\n" +
"\n" +
"custom-rule-5=true\n" +
"custom-rule-5.name=test rule #5\n" +
"custom-rule-5.severity=MAJOR\n" +
"custom-rule-5.description=#5 description\n" +
"custom-rule-5.debtFunc=" + DebtRemediationFunction.Type.LINEAR_OFFSET + "\n" +
"custom-rule-5.debtScalar=30min\n" +
"custom-rule-5.debtOffset=15min\n" +
"custom-rule-5.debtType=" + RuleType.VULNERABILITY.name() + "\n" +
"\n"
);
this.definition = new TsRulesDefinition(this.settings);
this.context = new Context();
this.definition.define(context);
}
示例17
@Test
public void ConfiguresAdditionalRules() {
// cfg1
Rule rule1 = getRule("custom-rule-1");
assertNull(rule1);
// cfg2
Rule rule2 = getRule("custom-rule-2");
assertNotNull(rule2);
assertEquals("test rule #2", rule2.name());
assertEquals(Severity.MINOR, rule2.severity());
assertEquals("#2 description", rule2.htmlDescription());
assertEquals(null, rule2.debtRemediationFunction());
assertEquals(RuleType.CODE_SMELL, rule2.type());
// cfg3
Rule rule3 = getRule("custom-rule-3");
assertNotNull(rule3);
assertEquals("test rule #3", rule3.name());
assertEquals(Severity.INFO, rule3.severity());
assertEquals("#3 description", rule3.htmlDescription());
assertEquals(
DebtRemediationFunction.Type.CONSTANT_ISSUE,
rule3.debtRemediationFunction().type()
);
assertEquals(null, rule3.debtRemediationFunction().gapMultiplier());
assertEquals("15min", rule3.debtRemediationFunction().baseEffort());
assertEquals(RuleType.CODE_SMELL, rule3.type());
// cfg4
Rule rule4 = getRule("custom-rule-4");
assertNotNull(rule4);
assertEquals("test rule #4", rule4.name());
assertEquals(Severity.MINOR, rule4.severity());
assertEquals("#4 description", rule4.htmlDescription());
assertEquals(
DebtRemediationFunction.Type.LINEAR,
rule4.debtRemediationFunction().type()
);
assertEquals("5min", rule4.debtRemediationFunction().gapMultiplier());
assertEquals(null, rule4.debtRemediationFunction().baseEffort());
assertEquals(RuleType.BUG, rule4.type());
// cfg5
Rule rule5 = getRule("custom-rule-5");
assertNotNull(rule5);
assertEquals("test rule #5", rule5.name());
assertEquals(Severity.MAJOR, rule5.severity());
assertEquals("#5 description", rule5.htmlDescription());
assertEquals(RuleType.VULNERABILITY, rule5.type());
assertEquals("30min", rule5.debtRemediationFunction().gapMultiplier());
assertEquals("15min", rule5.debtRemediationFunction().baseEffort());
}