package fr.adrienbrault.idea.symfony2plugin.tests.intentions.yaml;
import com.jetbrains.php.lang.PhpFileType;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.intentions.yaml.YamlQuotedEscapedInspection
*/
public class YamlQuotedEscapedInspectionTest extends SymfonyLightCodeInsightFixtureTestCase {
public void testDeprecatedNonEscapedInDoubleQuotedStrings() {
this.initVersion();
assertLocalInspectionContains("foo.yml",
"class: \"Foo<caret>\\Bar\"",
"Not escaping a backslash in a double-quoted string is deprecated"
);
assertLocalInspectionNotContains("foo.yml",
"class: \"Foo<caret>\\\\Bar\"",
"Not escaping a backslash in a double-quoted string is deprecated"
);
assertLocalInspectionNotContains("foo.yml",
"class: 'Foo<caret>\\Bar'",
"Not escaping a backslash in a double-quoted string is deprecated"
);
assertLocalInspectionNotContains("foo.yml",
"class: Foo<caret>\\Bar",
"Not escaping a backslash in a double-quoted string is deprecated"
);
}
public void testDeprecatedNonEscapedInDoubleQuotedForWrongSymfonyVersion() {
this.initVersion("2.5");
assertLocalInspectionNotContains("foo.yml",
"class: \"Foo<caret>\\Bar\"",
"Not escaping a backslash in a double-quoted string is deprecated"
);
}
public void testDeprecatedNonEscapedWhitelistCharInDoubleQuotedStrings() {
this.initVersion();
for (String s : new String[]{"\\n", "\\r", "\\t", "\\_", " "}) {
assertLocalInspectionNotContains("foo.yml",
"class: \"Foo<caret>" + s +"Bar\"",
"Not escaping a backslash in a double-quoted string is deprecated"
);
}
}
public void testDeprecatedNonEscapedBlacklistConditionInDoubleQuotedStrings() {
this.initVersion();
assertLocalInspectionNotContains("foo.yml",
"class: \"Foo<caret>\\Bar" + StringUtils.repeat("a", 255) + "\"",
"Not escaping a backslash in a double-quoted string is deprecated"
);
}
public void testDeprecatedUsageOfAtCharAtTheBeginningOfUnquotedStrings() {
this.initVersion();
assertLocalInspectionContains("foo.yml",
"class: @f<caret>oo",
"Deprecated usage of '@' at the beginning of unquoted string"
);
assertLocalInspectionContains("foo.yml",
"class: `f<caret>oo",
"Deprecated usage of '`' at the beginning of unquoted string"
);
assertLocalInspectionContains("foo.yml",
"class: |f<caret>oo",
"Deprecated usage of '|' at the beginning of unquoted string"
);
assertLocalInspectionContains("foo.yml",
"class: >f<caret>oo",
"Deprecated usage of '>' at the beginning of unquoted string"
);
assertLocalInspectionContains("foo.yml",
"class: %f<caret>oo",
"Not quoting a scalar starting with the '%' indicator character is deprecated since Symfony 3.1"
);
assertLocalInspectionNotContains("foo.yml",
"class: '%f<caret>oo'",
"Not quoting a scalar starting with the '%' indicator character is deprecated since Symfony 3.1"
);
assertLocalInspectionNotContains("foo.yml",
"class: '@f<caret>oo'",
"Deprecated usage of '@' at the beginning of unquoted string"
);
assertLocalInspectionNotContains("foo.yml",
"class: \"@f<caret>oo\"",
"Deprecated usage of '@' at the beginning of unquoted string"
);
}
public void testDeprecatedUsageOfAtCharAtTheBeginningOfUnquotedStringsOnWrongSymfonyVersion() {
this.initVersion("2.5");
assertLocalInspectionNotContains("foo.yml",
"class: @f<caret>oo",
"Deprecated usage of '@' at the beginning of unquoted string"
);
}
private void initVersion() {
initVersion("2.8");
}
private void initVersion(@NotNull String version) {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
"namespace Symfony\\Component\\HttpKernel {\n" +
" class Kernel {\n" +
" const VERSION = '" + version + "';" +
" }" +
"}"
);
}
}