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:
irengrig
2017-01-16 17:18:12 +01:00
parent e1c069d0ed
commit 13b022cdab
2 changed files with 51 additions and 1 deletions
@@ -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);