From 0357d2f609d7a8bc8baba9b1fea9c9ebe7cdb4ce Mon Sep 17 00:00:00 2001 From: nsingh Date: Tue, 24 Oct 2017 17:50:16 -0700 Subject: [PATCH] Added test case with multiple conditionals --- .../test/ConditionalsLiveHoverTest.java | 137 +++++++++++++++--- .../java/example/MultipleConditionals.java | 32 ++++ 2 files changed, 152 insertions(+), 17 deletions(-) create mode 100644 headless-services/boot-java-language-server/src/test/resources/test-projects/test-conditionals-live-hover/src/main/java/example/MultipleConditionals.java diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/conditionals/test/ConditionalsLiveHoverTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/conditionals/test/ConditionalsLiveHoverTest.java index 6b24b5d4c..5eaa0c273 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/conditionals/test/ConditionalsLiveHoverTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/conditionals/test/ConditionalsLiveHoverTest.java @@ -13,6 +13,7 @@ package org.springframework.ide.vscode.boot.java.conditionals.test; import static org.junit.Assert.assertTrue; import java.io.File; +import java.time.Duration; import org.junit.Before; import org.junit.Test; @@ -35,6 +36,7 @@ public class ConditionalsLiveHoverTest { mockAppProvider = new MockRunningAppProvider(); harness = BootLanguageServerHarness.builder() .runningAppProvider(mockAppProvider.provider) + .watchDogInterval(Duration.ofMillis(100)) .build(); } @@ -43,7 +45,8 @@ public class ConditionalsLiveHoverTest { File directory = new File( ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI()); - String docUri = "file://" +directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnMissingBeanConfig.java"; + String docUri = "file://" + directory.getAbsolutePath() + + "/src/main/java/example/ConditionalOnMissingBeanConfig.java"; harness.intialize(directory); @@ -59,25 +62,20 @@ public class ConditionalsLiveHoverTest { File directory = new File( ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI()); - String docUri = "file://" +directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnBeanConfig.java"; - + String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnBeanConfig.java"; // Build a mock running boot app - mockAppProvider.builder() - .isSpringBootApp(true) - .port("1111") - .processId("22022") - .host("cfapps.io") - .processName("test-conditionals-live-hover") - .getAutoConfigReport("{\"positiveMatches\":{\"ConditionalOnBeanConfig#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}]}}") - .build(); + mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io") + .processName("test-conditionals-live-hover") + .getAutoConfigReport( + "{\"positiveMatches\":{\"ConditionalOnBeanConfig#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}]}}") + .build(); harness.intialize(directory); Editor editor = harness.newEditorFromFileUri(docUri, LanguageId.JAVA); - editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + - "\n" + - "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'"); + editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n" + + "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'"); } @@ -86,11 +84,12 @@ public class ConditionalsLiveHoverTest { File directory = new File( ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI()); - String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/ConditionalOnMissingBeanConfig.java"; + String docUri = "file://" + directory.getAbsolutePath() + + "/src/main/java/example/ConditionalOnMissingBeanConfig.java"; // Build a mock running boot app - mockAppProvider.builder().isSpringBootApp(true).port("1111") - .processId("22022").host("cfapps.io").processName("test-conditionals-live-hover") + mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io") + .processName("test-conditionals-live-hover") .getAutoConfigReport( "{\"positiveMatches\":{\"ConditionalOnMissingBeanConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}]}}") .build(); @@ -102,4 +101,108 @@ public class ConditionalsLiveHoverTest { + "Message: @ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans"); } + + @Test + public void testMultipleLiveHoverContentRealProject() throws Exception { + + File directory = new File( + ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI()); + String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/MultipleConditionals.java"; + + // Build a mock running boot app + mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io") + .processName("test-conditionals-live-hover") + .getAutoConfigReport( + "{\"positiveMatches\":{\"HelloConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}],\"HelloConfig2#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}],\"MultipleConditionals#hi\":[{\"condition\":\"OnClassCondition\",\"message\":\"@ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class\"},{\"condition\":\"OnWebApplicationCondition\",\"message\":\"@ConditionalOnWebApplication (required) found StandardServletEnvironment\"},{\"condition\":\"OnJavaCondition\",\"message\":\"@ConditionalOnJava (1.8 or newer) found 1.8\"},{\"condition\":\"OnExpressionCondition\",\"message\":\"@ConditionalOnExpression (#{true}) resulted in true\"},{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'\"}]}}") + .build(); + + harness.intialize(directory); + + Editor editor = harness.newEditorFromFileUri(docUri, LanguageId.JAVA); + + editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n" + + "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'"); + + editor.assertHoverContains("@ConditionalOnWebApplication", "Condition: OnWebApplicationCondition\n" + "\n" + + "Message: @ConditionalOnWebApplication (required) found StandardServletEnvironment"); + + editor.assertHoverContains("@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)", + "Condition: OnJavaCondition\n" + "\n" + "Message: @ConditionalOnJava (1.8 or newer) found 1.8"); + + editor.assertHoverContains("@ConditionalOnMissingClass", "Condition: OnClassCondition\n" + "\n" + + "Message: @ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class"); + + editor.assertHoverContains("@ConditionalOnExpression", "Condition: OnExpressionCondition\n" + "\n" + + "Message: @ConditionalOnExpression (#{true}) resulted in true"); + } + +// @Test +// public void testMultipleLiveHoverHints() throws Exception { +// +// File directory = new File( +// ProjectsHarness.class.getResource("/test-projects/test-conditionals-live-hover/").toURI()); +// String docUri = "file://" + directory.getAbsolutePath() + "/src/main/java/example/MultipleConditionals.java"; +// +// // Build a mock running boot app +// mockAppProvider.builder().isSpringBootApp(true).port("1111").processId("22022").host("cfapps.io") +// .processName("test-conditionals-live-hover") +// .getAutoConfigReport( +// "{\"positiveMatches\":{\"HelloConfig#missing\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnMissingBean (types: example.Hello; SearchStrategy: all) did not find any beans\"}],\"HelloConfig2#hi\":[{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found bean 'missing'\"}],\"MultipleConditionals#hi\":[{\"condition\":\"OnClassCondition\",\"message\":\"@ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class\"},{\"condition\":\"OnWebApplicationCondition\",\"message\":\"@ConditionalOnWebApplication (required) found StandardServletEnvironment\"},{\"condition\":\"OnJavaCondition\",\"message\":\"@ConditionalOnJava (1.8 or newer) found 1.8\"},{\"condition\":\"OnExpressionCondition\",\"message\":\"@ConditionalOnExpression (#{true}) resulted in true\"},{\"condition\":\"OnBeanCondition\",\"message\":\"@ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'\"}]}}") +// .build(); +// +// harness.intialize(directory); +// +// Editor editor = harness.newEditor(LanguageId.JAVA, "package example;\n" + +// "\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;\n" + +// "import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;\n" + +// "import org.springframework.context.annotation.Bean;\n" + +// "import org.springframework.context.annotation.Configuration;\n" + +// "\n" + +// "@Configuration\n" + +// "public class MultipleConditionals {\n" + +// "\n" + +// " @Bean\n" + +// " @ConditionalOnBean\n" + +// " @ConditionalOnWebApplication\n" + +// " @ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)\n" + +// " @ConditionalOnMissingClass\n" + +// " @ConditionalOnExpression\n" + +// " public Hello hi() {\n" + +// " return null;\n" + +// " }\n" + +// " \n" + +// " @Bean\n" + +// " @ConditionalOnMissingBean\n" + +// " @ConditionalOnNotWebApplication\n" + +// " public Hello missing() {\n" + +// " return null;\n" + +// " }\n" + +// "}"); +// +//// editor.assertHoverContains("@ConditionalOnBean", "Condition: OnBeanCondition\n" + "\n" +//// + "Message: @ConditionalOnBean (types: example.Hello; SearchStrategy: all) found beans 'hi', 'missing'"); +//// +//// editor.assertHoverContains("@ConditionalOnWebApplication", "Condition: OnWebApplicationCondition\n" + "\n" +//// + "Message: @ConditionalOnWebApplication (required) found StandardServletEnvironment"); +//// +//// editor.assertHoverContains("@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)", +//// "Condition: OnJavaCondition\n" + "\n" + "Message: @ConditionalOnJava (1.8 or newer) found 1.8"); +//// +//// editor.assertHoverContains("@ConditionalOnMissingClass", "Condition: OnClassCondition\n" + "\n" +//// + "Message: @ConditionalOnClass found required class; @ConditionalOnMissingClass did not find unwanted class"); +//// +//// editor.assertHoverContains("@ConditionalOnExpression", "Condition: OnExpressionCondition\n" + "\n" +//// + "Message: @ConditionalOnExpression (#{true}) resulted in true"); +// +// editor.assertHighlights("@ConditionalOnBean", "@ConditionalOnWebApplication", +// "@ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT)", "@ConditionalOnMissingClass", +// "@ConditionalOnExpression"); +// +// } } diff --git a/headless-services/boot-java-language-server/src/test/resources/test-projects/test-conditionals-live-hover/src/main/java/example/MultipleConditionals.java b/headless-services/boot-java-language-server/src/test/resources/test-projects/test-conditionals-live-hover/src/main/java/example/MultipleConditionals.java new file mode 100644 index 000000000..4417dc166 --- /dev/null +++ b/headless-services/boot-java-language-server/src/test/resources/test-projects/test-conditionals-live-hover/src/main/java/example/MultipleConditionals.java @@ -0,0 +1,32 @@ +package example; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MultipleConditionals { + + @Bean + @ConditionalOnBean + @ConditionalOnWebApplication + @ConditionalOnJava(value=ConditionalOnJava.JavaVersion.EIGHT) + @ConditionalOnMissingClass + @ConditionalOnExpression + public Hello hi() { + return null; + } + + @Bean + @ConditionalOnMissingBean + @ConditionalOnNotWebApplication + public Hello missing() { + return null; + } +}