mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
json schema, fix special case of finding "definitions" in schema of schema to validate themselves -> skip validation by now, have test for that
This commit is contained in:
@@ -16,6 +16,7 @@ import com.intellij.psi.SmartPsiElementPointer;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.jsonSchema.JsonSchemaFileType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -57,7 +58,10 @@ public class JsonSchemaWalker {
|
||||
@NotNull final JsonSchemaObject rootSchema, @NotNull VirtualFile schemaFile) {
|
||||
final List<Step> position = findPosition(element, false, true);
|
||||
if (position == null || position.isEmpty()) return;
|
||||
|
||||
// but this does not validate definitions section against general schema --> should be done separately
|
||||
if (JsonSchemaFileType.INSTANCE.equals(element.getContainingFile().getFileType()) &&
|
||||
position.get(0).getTransition() instanceof PropertyTransition &&
|
||||
"definitions".equals(((PropertyTransition)position.get(0).getTransition()).getName())) return;
|
||||
extractSchemaVariants(element.getProject(), consumer, schemaFile, rootSchema, false, position);
|
||||
}
|
||||
|
||||
@@ -360,6 +364,7 @@ public class JsonSchemaWalker {
|
||||
final JsonSchemaObject object = new JsonSchemaObject(pointer);
|
||||
object.setProperties(parent.getDefinitions());
|
||||
resultConsumer.setSchema(object);
|
||||
return;
|
||||
}
|
||||
}
|
||||
final JsonSchemaObject child = parent.getProperties().get(myName);
|
||||
|
||||
@@ -1,18 +1,29 @@
|
||||
package com.jetbrains.jsonSchema.impl;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionTestCase;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.json.JsonLanguage;
|
||||
import com.intellij.lang.LanguageAnnotators;
|
||||
import com.intellij.lang.annotation.Annotator;
|
||||
import com.intellij.lang.annotation.HighlightSeverity;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.ThrowableComputable;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.util.concurrency.Semaphore;
|
||||
import com.jetbrains.jsonSchema.JsonSchemaFileType;
|
||||
import com.jetbrains.jsonSchema.JsonSchemaTestServiceImpl;
|
||||
import com.jetbrains.jsonSchema.ide.JsonSchemaAnnotator;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
@@ -21,6 +32,11 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
* @author Irina.Chernushina on 8/29/2015.
|
||||
*/
|
||||
public class JsonSchemaReadTest extends CompletionTestCase {
|
||||
@Override
|
||||
protected String getTestDataPath() {
|
||||
return PlatformTestUtil.getCommunityPath() + "/json/tests/testData/jsonSchema";
|
||||
}
|
||||
|
||||
public void testReadSchemaItself() throws Exception {
|
||||
final File file = new File(PlatformTestUtil.getCommunityPath(), "json/tests/testData/jsonSchema/schema.json");
|
||||
final JsonSchemaObject read = getSchemaObject(file);
|
||||
@@ -58,6 +74,35 @@ public class JsonSchemaReadTest extends CompletionTestCase {
|
||||
Assert.assertEquals(0, minValue.intValue());
|
||||
}
|
||||
|
||||
public void testMainSchemaHighlighting() throws Exception {
|
||||
final Set<VirtualFile> files = JsonSchemaServiceEx.Impl.getEx(myProject).getSchemaFiles();
|
||||
VirtualFile mainSchema = null;
|
||||
for (VirtualFile file : files) {
|
||||
if ("schema.json".equals(file.getName())) {
|
||||
mainSchema = file;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertNotNull(mainSchema);
|
||||
assertTrue(JsonSchemaFileType.INSTANCE.equals(mainSchema.getFileType()));
|
||||
|
||||
final Annotator annotator = new JsonSchemaAnnotator();
|
||||
LanguageAnnotators.INSTANCE.addExplicitExtension(JsonLanguage.INSTANCE, annotator);
|
||||
Disposer.register(getTestRootDisposable(), new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
LanguageAnnotators.INSTANCE.removeExplicitExtension(JsonLanguage.INSTANCE, annotator);
|
||||
JsonSchemaTestServiceImpl.setProvider(null);
|
||||
}
|
||||
});
|
||||
|
||||
configureByExistingFile(mainSchema);
|
||||
final List<HighlightInfo> infos = doHighlighting();
|
||||
for (HighlightInfo info : infos) {
|
||||
if (!HighlightSeverity.INFORMATION.equals(info.getSeverity())) assertFalse(info.getDescription(), true);
|
||||
}
|
||||
}
|
||||
|
||||
private JsonSchemaObject getSchemaObject(File file) throws IOException {
|
||||
Assert.assertTrue(file.exists());
|
||||
final VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);
|
||||
|
||||
Reference in New Issue
Block a user