RUBY-21918 JSON Schema related quick fixes should be available for YAML

This commit is contained in:
Anton Lobov
2018-06-26 18:00:01 +02:00
parent aadf239812
commit f4671834b1
14 changed files with 309 additions and 41 deletions
@@ -2,6 +2,7 @@
package com.jetbrains.jsonSchema.extension;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.util.ThreeState;
import com.jetbrains.jsonSchema.extension.adapters.JsonPropertyAdapter;
@@ -63,4 +64,14 @@ public interface JsonLikePsiWalker {
default boolean invokeEnterBeforeObjectAndArray() { return false; }
default String getNodeTextForValidation(PsiElement element) { return element.getText(); }
default QuickFixAdapter getQuickFixAdapter(Project project) { return null; }
interface QuickFixAdapter {
@Nullable PsiElement getPropertyValue(PsiElement property);
@Nullable String getPropertyName(PsiElement property);
@NotNull PsiElement createProperty(@NotNull final String name, @NotNull final String value);
boolean ensureComma(PsiElement backward, PsiElement self, PsiElement newElement);
void removeIfComma(PsiElement forward);
boolean fixWhitespaceBefore();
}
}
@@ -5,6 +5,7 @@ import com.intellij.codeInsight.completion.CompletionUtil;
import com.intellij.json.JsonDialectUtil;
import com.intellij.json.JsonElementTypes;
import com.intellij.json.psi.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -166,4 +167,51 @@ public class JsonOriginalPsiWalker implements JsonLikePsiWalker {
public JsonValueAdapter createValueAdapter(@NotNull PsiElement element) {
return element instanceof JsonValue ? JsonJsonPropertyAdapter.createAdapterByType((JsonValue)element) : null;
}
@Override
public QuickFixAdapter getQuickFixAdapter(Project project) {
return new QuickFixAdapter() {
private final JsonElementGenerator myGenerator = new JsonElementGenerator(project);
@Nullable
@Override
public PsiElement getPropertyValue(PsiElement property) {
assert property instanceof JsonProperty;
return ((JsonProperty)property).getValue();
}
@NotNull
@Override
public String getPropertyName(PsiElement property) {
assert property instanceof JsonProperty;
return ((JsonProperty)property).getName();
}
@NotNull
@Override
public PsiElement createProperty(@NotNull String name, @NotNull String value) {
return myGenerator.createProperty(name, value);
}
@Override
public boolean ensureComma(PsiElement backward, PsiElement self, PsiElement newElement) {
if (backward instanceof JsonProperty) {
self.addAfter(myGenerator.createComma(), backward);
return true;
}
return false;
}
@Override
public void removeIfComma(PsiElement forward) {
if (forward instanceof LeafPsiElement && ((LeafPsiElement)forward).getElementType() == JsonElementTypes.COMMA) {
forward.delete();
}
}
@Override
public boolean fixWhitespaceBefore() {
return true;
}
};
}
}
@@ -4,7 +4,6 @@ package com.jetbrains.jsonSchema.impl;
import com.intellij.codeInspection.LocalInspectionToolSession;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.json.psi.JsonFile;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiElement;
@@ -81,7 +80,7 @@ public class JsonSchemaComplianceChecker {
if (checkIfAlreadyProcessed(entry.getKey())) continue;
String value = entry.getValue().getMessage();
if (myMessagePrefix != null) value = myMessagePrefix + value;
LocalQuickFix fix = entry.getKey().getContainingFile() instanceof JsonFile ? entry.getValue().createFix() : null;
LocalQuickFix fix = entry.getValue().createFix(myWalker.getQuickFixAdapter(myHolder.getProject()));
if (fix == null) {
myHolder.registerProblem(entry.getKey(), value);
}
@@ -3,6 +3,7 @@ package com.jetbrains.jsonSchema.impl;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker;
import com.jetbrains.jsonSchema.impl.fixes.AddMissingPropertyFix;
import com.jetbrains.jsonSchema.impl.fixes.RemoveProhibitedPropertyFix;
import com.jetbrains.jsonSchema.impl.fixes.SuggestEnumValuesFix;
@@ -108,14 +109,15 @@ public class JsonValidationError {
}
@Nullable
public LocalQuickFix createFix() {
public LocalQuickFix createFix(@Nullable JsonLikePsiWalker.QuickFixAdapter quickFixAdapter) {
if (quickFixAdapter == null) return null;
switch (myFixableIssueKind) {
case MissingProperty:
return new AddMissingPropertyFix((MissingMultiplePropsIssueData)myIssueData);
return new AddMissingPropertyFix((MissingMultiplePropsIssueData)myIssueData, quickFixAdapter);
case ProhibitedProperty:
return new RemoveProhibitedPropertyFix((ProhibitedPropertyIssueData)myIssueData);
return new RemoveProhibitedPropertyFix((ProhibitedPropertyIssueData)myIssueData, quickFixAdapter);
case NonEnumValue:
return new SuggestEnumValuesFix();
return new SuggestEnumValuesFix(quickFixAdapter);
default:
return null;
}
@@ -8,10 +8,6 @@ import com.intellij.codeInsight.template.impl.ConstantNode;
import com.intellij.codeInsight.template.impl.MacroCallNode;
import com.intellij.codeInsight.template.macro.CompleteMacro;
import com.intellij.codeInspection.*;
import com.intellij.json.psi.JsonElementGenerator;
import com.intellij.json.psi.JsonObject;
import com.intellij.json.psi.JsonProperty;
import com.intellij.json.psi.JsonValue;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.ex.util.EditorUtil;
@@ -25,6 +21,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.DocumentUtil;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker;
import com.jetbrains.jsonSchema.impl.JsonSchemaType;
import com.jetbrains.jsonSchema.impl.JsonValidationError;
import org.jetbrains.annotations.Nls;
@@ -35,9 +32,12 @@ import java.util.List;
public class AddMissingPropertyFix implements LocalQuickFix, BatchQuickFix<CommonProblemDescriptor> {
private final JsonValidationError.MissingMultiplePropsIssueData myData;
private final JsonLikePsiWalker.QuickFixAdapter myQuickFixAdapter;
public AddMissingPropertyFix(JsonValidationError.MissingMultiplePropsIssueData data) {
public AddMissingPropertyFix(JsonValidationError.MissingMultiplePropsIssueData data,
JsonLikePsiWalker.QuickFixAdapter quickFixAdapter) {
myData = data;
myQuickFixAdapter = quickFixAdapter;
}
@Nls(capitalization = Nls.Capitalization.Sentence)
@@ -58,17 +58,16 @@ public class AddMissingPropertyFix implements LocalQuickFix, BatchQuickFix<Commo
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement element = descriptor.getPsiElement();
Ref<Boolean> hadComma = Ref.create(false);
if (!(element instanceof JsonObject)) return;
PsiElement newElement = performFix(project, element, hadComma);
PsiElement newElement = performFix(element, hadComma);
// if we have more than one property, don't expand templates and don't move the caret
if (newElement == null) return;
JsonValue value = ((JsonProperty)newElement).getValue();
PsiElement value = myQuickFixAdapter.getPropertyValue(newElement);
FileEditor fileEditor = FileEditorManager.getInstance(project).getSelectedEditor(element.getContainingFile().getVirtualFile());
EditorEx editor = EditorUtil.getEditorEx(fileEditor);
assert editor != null;
if (value == null) {
WriteAction.run(() ->editor.getCaretModel().moveToOffset(newElement.getTextRange().getEndOffset()));
WriteAction.run(() -> editor.getCaretModel().moveToOffset(newElement.getTextRange().getEndOffset()));
return;
}
TemplateManager templateManager = TemplateManager.getInstance(project);
@@ -86,9 +85,7 @@ public class AddMissingPropertyFix implements LocalQuickFix, BatchQuickFix<Commo
templateManager.startTemplate(editor, template);
}
private PsiElement performFix(@NotNull Project project, PsiElement element, Ref<Boolean> hadComma) {
JsonElementGenerator generator = new JsonElementGenerator(project);
private PsiElement performFix(PsiElement element, Ref<Boolean> hadComma) {
Ref<PsiElement> newElementRef = Ref.create(null);
WriteAction.run(() -> {
@@ -98,19 +95,14 @@ public class AddMissingPropertyFix implements LocalQuickFix, BatchQuickFix<Commo
String defaultValue = defaultValueObject instanceof String ? StringUtil.wrapWithDoubleQuote(defaultValueObject.toString()) : null;
PsiElement newElement = element
.addBefore(
generator.createProperty(issue.propertyName, defaultValue == null ? getDefaultValueFromType(issue) : defaultValue),
myQuickFixAdapter.createProperty(issue.propertyName, defaultValue == null ? getDefaultValueFromType(issue) : defaultValue),
element.getLastChild());
PsiElement backward = PsiTreeUtil.skipWhitespacesBackward(newElement);
if (backward instanceof JsonProperty) {
element.addAfter(generator.createComma(), backward);
hadComma.set(true);
}
hadComma.set(myQuickFixAdapter.ensureComma(backward, element, newElement));
if (isSingle) {
newElementRef.set(newElement);
}
}
});
return newElementRef.get();
@@ -143,7 +135,7 @@ public class AddMissingPropertyFix implements LocalQuickFix, BatchQuickFix<Commo
}
DocumentUtil.writeInRunUndoTransparentAction(() -> propFixes.forEach(fix ->
fix.first.performFix(project, fix.second, Ref.create(false))));
fix.first.performFix(fix.second, Ref.create(false))));
}
@Nullable
@@ -3,21 +3,22 @@ package com.jetbrains.jsonSchema.impl.fixes;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.json.JsonElementTypes;
import com.intellij.json.psi.JsonProperty;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker;
import com.jetbrains.jsonSchema.impl.JsonValidationError;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
public class RemoveProhibitedPropertyFix implements LocalQuickFix {
private final JsonValidationError.ProhibitedPropertyIssueData myData;
private final JsonLikePsiWalker.QuickFixAdapter myQuickFixAdapter;
public RemoveProhibitedPropertyFix(JsonValidationError.ProhibitedPropertyIssueData data) {
public RemoveProhibitedPropertyFix(JsonValidationError.ProhibitedPropertyIssueData data,
JsonLikePsiWalker.QuickFixAdapter quickFixAdapter) {
myData = data;
myQuickFixAdapter = quickFixAdapter;
}
@Nls(capitalization = Nls.Capitalization.Sentence)
@@ -37,12 +38,9 @@ public class RemoveProhibitedPropertyFix implements LocalQuickFix {
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement element = descriptor.getPsiElement();
if (!(element instanceof JsonProperty)) return;
assert myData.propertyName.equals(((JsonProperty)element).getName());
assert myData.propertyName.equals(myQuickFixAdapter.getPropertyName(element));
PsiElement forward = PsiTreeUtil.skipWhitespacesForward(element);
element.delete();
if (forward instanceof LeafPsiElement && ((LeafPsiElement)forward).getElementType() == JsonElementTypes.COMMA) {
forward.delete();
}
myQuickFixAdapter.removeIfComma(forward);
}
}
@@ -8,7 +8,6 @@ import com.intellij.codeInspection.BatchQuickFix;
import com.intellij.codeInspection.CommonProblemDescriptor;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.json.psi.JsonValue;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorEx;
@@ -19,6 +18,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiWhiteSpace;
import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -26,7 +26,10 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public class SuggestEnumValuesFix implements LocalQuickFix, BatchQuickFix<CommonProblemDescriptor> {
public SuggestEnumValuesFix() {
private final JsonLikePsiWalker.QuickFixAdapter myQuickFixAdapter;
public SuggestEnumValuesFix(JsonLikePsiWalker.QuickFixAdapter quickFixAdapter) {
myQuickFixAdapter = quickFixAdapter;
}
@Nls(capitalization = Nls.Capitalization.Sentence)
@@ -46,7 +49,6 @@ public class SuggestEnumValuesFix implements LocalQuickFix, BatchQuickFix<Common
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement element = descriptor.getPsiElement();
if (!(element instanceof JsonValue)) return;
FileEditor fileEditor = FileEditorManager.getInstance(project).getSelectedEditor(element.getContainingFile().getVirtualFile());
boolean whitespaceBefore = false;
if (element.getPrevSibling() instanceof PsiWhiteSpace) {
@@ -55,7 +57,7 @@ public class SuggestEnumValuesFix implements LocalQuickFix, BatchQuickFix<Common
WriteAction.run(() -> element.delete());
EditorEx editor = EditorUtil.getEditorEx(fileEditor);
assert editor != null;
if (whitespaceBefore) {
if (myQuickFixAdapter.fixWhitespaceBefore() && whitespaceBefore) {
WriteAction.run(() -> {
int offset = editor.getCaretModel().getOffset();
editor.getDocument().insertString(offset, " ");
@@ -26,9 +26,16 @@ public abstract class JsonSchemaHighlightingTestBase extends DaemonAnalyzerTestC
protected abstract Predicate<VirtualFile> getAvailabilityPredicate();
protected void doTest(@Language("JSON") @NotNull final String schema, @NotNull final String text) throws Exception {
final PsiFile file = configureInitially(schema, text);
doTest(file.getVirtualFile(), true, false);
}
@NotNull
protected PsiFile configureInitially(@NotNull @Language("JSON") String schema,
@NotNull String text) throws Exception {
enableInspectionTool(getInspectionProfile());
final PsiFile file = createFile(myModule, getTestFileName(), text);
final PsiFile file = doCreateFile(text);
registerProvider(getProject(), schema);
Disposer.register(getTestRootDisposable(), new Disposable() {
@@ -38,7 +45,12 @@ public abstract class JsonSchemaHighlightingTestBase extends DaemonAnalyzerTestC
}
});
configureByFile(file.getVirtualFile());
doTest(file.getVirtualFile(), true, false);
return file;
}
@NotNull
protected PsiFile doCreateFile(@NotNull String text) throws Exception {
return createFile(myModule, getTestFileName(), text);
}
private void registerProvider(Project project, @NotNull String schema) throws IOException {
@@ -0,0 +1,52 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.fixes;
import com.intellij.codeInspection.InspectionProfileEntry;
import com.intellij.json.JsonLanguage;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.Predicate;
import com.jetbrains.jsonSchema.impl.JsonSchemaComplianceInspection;
public class JsonSchemaQuickFixTest extends JsonSchemaQuickFixTestBase {
@Override
protected String getTestFileName() {
return "config.json";
}
@Override
protected InspectionProfileEntry getInspectionProfile() {
return new JsonSchemaComplianceInspection();
}
@Override
protected Predicate<VirtualFile> getAvailabilityPredicate() {
return file -> file.getFileType() instanceof LanguageFileType && ((LanguageFileType)file.getFileType()).getLanguage().isKindOf(
JsonLanguage.INSTANCE);
}
public void testAddMissingProperty() throws Exception {
doTest("{\n" +
" \"properties\": {\n" +
" \"a\": {\n" +
" \"default\": \"q\"\n" +
" }\n" +
" },\n" +
" \"required\": [\"a\", \"b\"]\n" +
"}", "<warning>{\"c\": 5}</warning>", "Add missing properties 'a', 'b'", "{\"c\": 5,\n" +
" \"a\": \"q\",\n" +
" \"b\":\n" +
"}");
}
public void testRemoveProhibitedProperty() throws Exception {
doTest("{\n" +
" \"properties\": {\n" +
" \"a\": {},\n" +
" \"c\": {}\n" +
" },\n" +
" \"additionalProperties\": false\n" +
"}", "{\"a\": 5, <warning>\"b\": 6</warning>, \"c\": 7}", "Remove prohibited property 'b'", "{\"a\": 5,\n" +
" \"c\": 7}");
}
}
@@ -0,0 +1,43 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.fixes;
import com.intellij.codeInsight.EditorInfo;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.jetbrains.jsonSchema.JsonSchemaHighlightingTestBase;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
public abstract class JsonSchemaQuickFixTestBase extends JsonSchemaHighlightingTestBase {
protected void doTest(@Language("JSON") @NotNull String schema, @NotNull String text, String fixName, String afterFix) throws Exception {
PsiFile file = configureInitially(schema, text);
HashMap<VirtualFile, EditorInfo> map = new HashMap<>();
map.put(file.getVirtualFile(), new EditorInfo(file.getText()));
List<Editor> editors = openEditors(map);
Collection<HighlightInfo> infos = doDoTest(true, false);
PsiFile psiFile = getPsiFile(editors.get(0).getDocument());
findAndInvokeIntentionAction(infos, fixName, editors.get(0), psiFile);
assertEquals(afterFix, getFile().getText());
}
@NotNull
@Override
protected PsiFile doCreateFile(@NotNull String text) throws Exception {
File dir = createTempDir("json_schema_test_r", true);
File child = new File(dir, getTestFileName());
//noinspection ResultOfMethodCallIgnored
child.createNewFile();
FileUtil.writeToFile(child, text);
VirtualFile schemaFile = getVirtualFile(child);
schemaFile.setWritable(true);
return getPsiManager().findFile(schemaFile);
}
}
@@ -16,6 +16,7 @@
package com.jetbrains.jsonSchema.schemaFile;
import com.jetbrains.jsonSchema.*;
import com.jetbrains.jsonSchema.fixes.JsonSchemaQuickFixTest;
import com.jetbrains.jsonSchema.impl.JsonBySchemaCompletionTest;
import com.jetbrains.jsonSchema.impl.JsonBySchemaHeavyCompletionTest;
import com.jetbrains.jsonSchema.impl.JsonSchemaReadTest;
@@ -40,6 +41,7 @@ public class JsonSchemaTestSuite extends TestCase {
suite.addTestSuite(JsonSchemaReadTest.class);
suite.addTestSuite(JsonSchemaFileResolveTest.class);
suite.addTestSuite(JsonSchemaPerformanceTest.class);
suite.addTestSuite(JsonSchemaQuickFixTest.class);
return suite;
}
}
@@ -2,9 +2,11 @@
package org.jetbrains.yaml.schema;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ThreeState;
import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker;
@@ -13,6 +15,7 @@ import com.jetbrains.jsonSchema.extension.adapters.JsonValueAdapter;
import com.jetbrains.jsonSchema.impl.JsonSchemaVariantsTreeBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.yaml.YAMLElementGenerator;
import org.jetbrains.yaml.YAMLTokenTypes;
import org.jetbrains.yaml.psi.*;
import org.jetbrains.yaml.psi.impl.YAMLBlockMappingImpl;
@@ -202,4 +205,56 @@ public class YamlJsonPsiWalker implements JsonLikePsiWalker {
int spaceIndex = text.indexOf(' ');
return spaceIndex > 0 ? text.substring(spaceIndex + 1) : text;
}
@Override
public QuickFixAdapter getQuickFixAdapter(Project project) {
return new QuickFixAdapter() {
private final YAMLElementGenerator myGenerator = YAMLElementGenerator.getInstance(project);
@Nullable
@Override
public PsiElement getPropertyValue(PsiElement property) {
assert property instanceof YAMLKeyValue;
return ((YAMLKeyValue)property).getValue();
}
@Nullable
@Override
public String getPropertyName(PsiElement property) {
assert property instanceof YAMLKeyValue;
return ((YAMLKeyValue)property).getName();
}
@NotNull
@Override
public PsiElement createProperty(@NotNull String name, @NotNull String value) {
return myGenerator.createYamlKeyValue(name, StringUtil.unquoteString(value));
}
@Override
public boolean ensureComma(PsiElement backward, PsiElement self, PsiElement newElement) {
if (newElement instanceof YAMLKeyValue) {
newElement.getParent().addAfter(myGenerator.createEol(), newElement);
}
return false;
}
@Override
public void removeIfComma(PsiElement forward) {
if (forward instanceof LeafPsiElement && ((LeafPsiElement)forward).getElementType() == YAMLTokenTypes.EOL) {
PsiElement nextSibling;
while ((nextSibling = forward.getNextSibling()) instanceof LeafPsiElement
&& ((LeafPsiElement)nextSibling).getElementType() == YAMLTokenTypes.INDENT){
nextSibling.delete();
}
forward.delete();
}
}
@Override
public boolean fixWhitespaceBefore() {
return false;
}
};
}
}
@@ -0,0 +1,51 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.yaml.schema;
import com.intellij.codeInspection.InspectionProfileEntry;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.Predicate;
import com.jetbrains.jsonSchema.fixes.JsonSchemaQuickFixTestBase;
import org.jetbrains.yaml.YAMLLanguage;
public class YamlByJsonSchemaQuickFixTest extends JsonSchemaQuickFixTestBase {
@Override
protected String getTestFileName() {
return "config.yml";
}
@Override
protected InspectionProfileEntry getInspectionProfile() {
return new YamlJsonSchemaHighlightingInspection();
}
@Override
protected Predicate<VirtualFile> getAvailabilityPredicate() {
return file -> file.getFileType() instanceof LanguageFileType && ((LanguageFileType)file.getFileType()).getLanguage().isKindOf(
YAMLLanguage.INSTANCE);
}
public void testAddMissingProperty() throws Exception {
doTest("{\n" +
" \"properties\": {\n" +
" \"a\": {\n" +
" \"default\": \"q\"\n" +
" }\n" +
" },\n" +
" \"required\": [\"a\", \"b\"]\n" +
"}", "<warning>c: 5</warning>", "Add missing properties 'a', 'b'", "a: q\n" +
"b:\n" +
"c: 5");
}
public void testRemoveProhibitedProperty() throws Exception {
doTest("{\n" +
" \"properties\": {\n" +
" \"a\": {},\n" +
" \"c\": {}\n" +
" },\n" +
" \"additionalProperties\": false\n" +
"}", "a: 5\n<warning>b: 6</warning>\nc: 7", "Remove prohibited property 'b'", "a: 5\n" +
"c: 7");
}
}
@@ -13,6 +13,7 @@ public class YamlJsonSchemaTestSuite extends TestCase {
suite.addTestSuite(YamlByJsonSchemaCompletionTest.class);
suite.addTestSuite(YamlByJsonSchemaHeavyCompletionTest.class);
suite.addTestSuite(YamlByJsonSchemaHighlightingTest.class);
suite.addTestSuite(YamlByJsonSchemaQuickFixTest.class);
return suite;
}
}