Simplify InstanceSupplierCodeGeneratorTests
This commit is contained in:
		
							parent
							
								
									4b14a0b42c
								
							
						
					
					
						commit
						35372e5e72
					
				| 
						 | 
					@ -68,18 +68,20 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private final TestGenerationContext generationContext;
 | 
						private final TestGenerationContext generationContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final DefaultListableBeanFactory beanFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	InstanceSupplierCodeGeneratorTests() {
 | 
						InstanceSupplierCodeGeneratorTests() {
 | 
				
			||||||
		this.generationContext = new TestGenerationContext();
 | 
							this.generationContext = new TestGenerationContext();
 | 
				
			||||||
 | 
							this.beanFactory = new DefaultListableBeanFactory();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void generateWhenHasDefaultConstructor() {
 | 
						void generateWhenHasDefaultConstructor() {
 | 
				
			||||||
		BeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
 | 
							BeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								TestBean bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			TestBean bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
					 | 
				
			||||||
			assertThat(bean).isInstanceOf(TestBean.class);
 | 
								assertThat(bean).isInstanceOf(TestBean.class);
 | 
				
			||||||
			assertThat(compiled.getSourceFile())
 | 
								assertThat(compiled.getSourceFile())
 | 
				
			||||||
					.contains("InstanceSupplier.using(TestBean::new)");
 | 
										.contains("InstanceSupplier.using(TestBean::new)");
 | 
				
			||||||
| 
						 | 
					@ -91,11 +93,9 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	void generateWhenHasConstructorWithParameter() {
 | 
						void generateWhenHasConstructorWithParameter() {
 | 
				
			||||||
		BeanDefinition beanDefinition = new RootBeanDefinition(InjectionComponent.class);
 | 
							BeanDefinition beanDefinition = new RootBeanDefinition(InjectionComponent.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerSingleton("injected", "injected");
 | 
				
			||||||
		beanFactory.registerSingleton("injected", "injected");
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								InjectionComponent bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			InjectionComponent bean = getBean(beanFactory, beanDefinition,
 | 
					 | 
				
			||||||
					instanceSupplier);
 | 
					 | 
				
			||||||
			assertThat(bean).isInstanceOf(InjectionComponent.class).extracting("bean")
 | 
								assertThat(bean).isInstanceOf(InjectionComponent.class).extracting("bean")
 | 
				
			||||||
					.isEqualTo("injected");
 | 
										.isEqualTo("injected");
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
| 
						 | 
					@ -107,10 +107,9 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	void generateWhenHasConstructorWithInnerClassAndDefaultConstructor() {
 | 
						void generateWhenHasConstructorWithInnerClassAndDefaultConstructor() {
 | 
				
			||||||
		RootBeanDefinition beanDefinition = new RootBeanDefinition(
 | 
							RootBeanDefinition beanDefinition = new RootBeanDefinition(
 | 
				
			||||||
				NoDependencyComponent.class);
 | 
									NoDependencyComponent.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerSingleton("configuration", new InnerComponentConfiguration());
 | 
				
			||||||
		beanFactory.registerSingleton("configuration", new InnerComponentConfiguration());
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								NoDependencyComponent bean = getBean(beanDefinition,
 | 
				
			||||||
			NoDependencyComponent bean = getBean(beanFactory, beanDefinition,
 | 
					 | 
				
			||||||
					instanceSupplier);
 | 
										instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(NoDependencyComponent.class);
 | 
								assertThat(bean).isInstanceOf(NoDependencyComponent.class);
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).contains(
 | 
								assertThat(compiled.getSourceFile()).contains(
 | 
				
			||||||
| 
						 | 
					@ -124,11 +123,10 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	void generateWhenHasConstructorWithInnerClassAndParameter() {
 | 
						void generateWhenHasConstructorWithInnerClassAndParameter() {
 | 
				
			||||||
		BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
							BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
				
			||||||
				EnvironmentAwareComponent.class);
 | 
									EnvironmentAwareComponent.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerSingleton("configuration", new InnerComponentConfiguration());
 | 
				
			||||||
		beanFactory.registerSingleton("configuration", new InnerComponentConfiguration());
 | 
							this.beanFactory.registerSingleton("environment", new StandardEnvironment());
 | 
				
			||||||
		beanFactory.registerSingleton("environment", new StandardEnvironment());
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								EnvironmentAwareComponent bean = getBean(beanDefinition,
 | 
				
			||||||
			EnvironmentAwareComponent bean = getBean(beanFactory, beanDefinition,
 | 
					 | 
				
			||||||
					instanceSupplier);
 | 
										instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(EnvironmentAwareComponent.class);
 | 
								assertThat(bean).isInstanceOf(EnvironmentAwareComponent.class);
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).contains(
 | 
								assertThat(compiled.getSourceFile()).contains(
 | 
				
			||||||
| 
						 | 
					@ -142,10 +140,9 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	void generateWhenHasConstructorWithGeneric() {
 | 
						void generateWhenHasConstructorWithGeneric() {
 | 
				
			||||||
		BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
							BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
				
			||||||
				NumberHolderFactoryBean.class);
 | 
									NumberHolderFactoryBean.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerSingleton("number", 123);
 | 
				
			||||||
		beanFactory.registerSingleton("number", 123);
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								NumberHolder<?> bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			NumberHolder<?> bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
					 | 
				
			||||||
			assertThat(bean).isInstanceOf(NumberHolder.class);
 | 
								assertThat(bean).isInstanceOf(NumberHolder.class);
 | 
				
			||||||
			assertThat(bean).extracting("number").isNull(); // No property actually set
 | 
								assertThat(bean).extracting("number").isNull(); // No property actually set
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).contains("NumberHolderFactoryBean::new");
 | 
								assertThat(compiled.getSourceFile()).contains("NumberHolderFactoryBean::new");
 | 
				
			||||||
| 
						 | 
					@ -158,9 +155,8 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	void generateWhenHasPrivateConstructor() {
 | 
						void generateWhenHasPrivateConstructor() {
 | 
				
			||||||
		BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
							BeanDefinition beanDefinition = new RootBeanDefinition(
 | 
				
			||||||
				TestBeanWithPrivateConstructor.class);
 | 
									TestBeanWithPrivateConstructor.class);
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
								TestBeanWithPrivateConstructor bean = getBean(beanDefinition,
 | 
				
			||||||
			TestBeanWithPrivateConstructor bean = getBean(beanFactory, beanDefinition,
 | 
					 | 
				
			||||||
					instanceSupplier);
 | 
										instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(TestBeanWithPrivateConstructor.class);
 | 
								assertThat(bean).isInstanceOf(TestBeanWithPrivateConstructor.class);
 | 
				
			||||||
			assertThat(compiled.getSourceFile())
 | 
								assertThat(compiled.getSourceFile())
 | 
				
			||||||
| 
						 | 
					@ -175,11 +171,10 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
		BeanDefinition beanDefinition = BeanDefinitionBuilder
 | 
							BeanDefinition beanDefinition = BeanDefinitionBuilder
 | 
				
			||||||
				.rootBeanDefinition(String.class)
 | 
									.rootBeanDefinition(String.class)
 | 
				
			||||||
				.setFactoryMethodOnBean("stringBean", "config").getBeanDefinition();
 | 
									.setFactoryMethodOnBean("stringBean", "config").getBeanDefinition();
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
				
			||||||
		beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
					 | 
				
			||||||
				.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
									.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
			String bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
								String bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(String.class);
 | 
								assertThat(bean).isInstanceOf(String.class);
 | 
				
			||||||
			assertThat(bean).isEqualTo("Hello");
 | 
								assertThat(bean).isEqualTo("Hello");
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).contains(
 | 
								assertThat(compiled.getSourceFile()).contains(
 | 
				
			||||||
| 
						 | 
					@ -195,11 +190,10 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
				.rootBeanDefinition(String.class)
 | 
									.rootBeanDefinition(String.class)
 | 
				
			||||||
				.setFactoryMethodOnBean("privateStaticStringBean", "config")
 | 
									.setFactoryMethodOnBean("privateStaticStringBean", "config")
 | 
				
			||||||
				.getBeanDefinition();
 | 
									.getBeanDefinition();
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
				
			||||||
		beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
					 | 
				
			||||||
				.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
									.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
			String bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
								String bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(String.class);
 | 
								assertThat(bean).isInstanceOf(String.class);
 | 
				
			||||||
			assertThat(bean).isEqualTo("Hello");
 | 
								assertThat(bean).isEqualTo("Hello");
 | 
				
			||||||
			assertThat(compiled.getSourceFile())
 | 
								assertThat(compiled.getSourceFile())
 | 
				
			||||||
| 
						 | 
					@ -215,11 +209,10 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
		BeanDefinition beanDefinition = BeanDefinitionBuilder
 | 
							BeanDefinition beanDefinition = BeanDefinitionBuilder
 | 
				
			||||||
				.rootBeanDefinition(Integer.class)
 | 
									.rootBeanDefinition(Integer.class)
 | 
				
			||||||
				.setFactoryMethodOnBean("integerBean", "config").getBeanDefinition();
 | 
									.setFactoryMethodOnBean("integerBean", "config").getBeanDefinition();
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
				
			||||||
		beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
					 | 
				
			||||||
				.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
									.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
			Integer bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
								Integer bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(Integer.class);
 | 
								assertThat(bean).isInstanceOf(Integer.class);
 | 
				
			||||||
			assertThat(bean).isEqualTo(42);
 | 
								assertThat(bean).isEqualTo(42);
 | 
				
			||||||
			assertThat(compiled.getSourceFile())
 | 
								assertThat(compiled.getSourceFile())
 | 
				
			||||||
| 
						 | 
					@ -236,13 +229,12 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
				.setFactoryMethodOnBean("create", "config").getBeanDefinition();
 | 
									.setFactoryMethodOnBean("create", "config").getBeanDefinition();
 | 
				
			||||||
		beanDefinition.setResolvedFactoryMethod(ReflectionUtils
 | 
							beanDefinition.setResolvedFactoryMethod(ReflectionUtils
 | 
				
			||||||
				.findMethod(SampleFactory.class, "create", Number.class, String.class));
 | 
									.findMethod(SampleFactory.class, "create", Number.class, String.class));
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
				
			||||||
		beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
					 | 
				
			||||||
				.genericBeanDefinition(SampleFactory.class).getBeanDefinition());
 | 
									.genericBeanDefinition(SampleFactory.class).getBeanDefinition());
 | 
				
			||||||
		beanFactory.registerSingleton("number", 42);
 | 
							this.beanFactory.registerSingleton("number", 42);
 | 
				
			||||||
		beanFactory.registerSingleton("string", "test");
 | 
							this.beanFactory.registerSingleton("string", "test");
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
			String bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
								String bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(String.class);
 | 
								assertThat(bean).isInstanceOf(String.class);
 | 
				
			||||||
			assertThat(bean).isEqualTo("42test");
 | 
								assertThat(bean).isEqualTo("42test");
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).contains("SampleFactory.create(");
 | 
								assertThat(compiled.getSourceFile()).contains("SampleFactory.create(");
 | 
				
			||||||
| 
						 | 
					@ -257,11 +249,10 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
				.rootBeanDefinition(Integer.class)
 | 
									.rootBeanDefinition(Integer.class)
 | 
				
			||||||
				.setFactoryMethodOnBean("throwingIntegerBean", "config")
 | 
									.setFactoryMethodOnBean("throwingIntegerBean", "config")
 | 
				
			||||||
				.getBeanDefinition();
 | 
									.getBeanDefinition();
 | 
				
			||||||
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
 | 
							this.beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
				
			||||||
		beanFactory.registerBeanDefinition("config", BeanDefinitionBuilder
 | 
					 | 
				
			||||||
				.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
									.genericBeanDefinition(SimpleConfiguration.class).getBeanDefinition());
 | 
				
			||||||
		compile(beanFactory, beanDefinition, (instanceSupplier, compiled) -> {
 | 
							compile(beanDefinition, (instanceSupplier, compiled) -> {
 | 
				
			||||||
			Integer bean = getBean(beanFactory, beanDefinition, instanceSupplier);
 | 
								Integer bean = getBean(beanDefinition, instanceSupplier);
 | 
				
			||||||
			assertThat(bean).isInstanceOf(Integer.class);
 | 
								assertThat(bean).isInstanceOf(Integer.class);
 | 
				
			||||||
			assertThat(bean).isEqualTo(42);
 | 
								assertThat(bean).isEqualTo(42);
 | 
				
			||||||
			assertThat(compiled.getSourceFile()).doesNotContain(") throws Exception {");
 | 
								assertThat(compiled.getSourceFile()).doesNotContain(") throws Exception {");
 | 
				
			||||||
| 
						 | 
					@ -287,17 +278,15 @@ class InstanceSupplierCodeGeneratorTests {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
	private <T> T getBean(DefaultListableBeanFactory beanFactory,
 | 
						private <T> T getBean(BeanDefinition beanDefinition, InstanceSupplier<?> instanceSupplier) {
 | 
				
			||||||
			BeanDefinition beanDefinition, InstanceSupplier<?> instanceSupplier) {
 | 
					 | 
				
			||||||
		((RootBeanDefinition) beanDefinition).setInstanceSupplier(instanceSupplier);
 | 
							((RootBeanDefinition) beanDefinition).setInstanceSupplier(instanceSupplier);
 | 
				
			||||||
		beanFactory.registerBeanDefinition("testBean", beanDefinition);
 | 
							this.beanFactory.registerBeanDefinition("testBean", beanDefinition);
 | 
				
			||||||
		return (T) beanFactory.getBean("testBean");
 | 
							return (T) this.beanFactory.getBean("testBean");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void compile(DefaultListableBeanFactory beanFactory, BeanDefinition beanDefinition,
 | 
						private void compile(BeanDefinition beanDefinition, BiConsumer<InstanceSupplier<?>, Compiled> result) {
 | 
				
			||||||
			BiConsumer<InstanceSupplier<?>, Compiled> result) {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory(beanFactory);
 | 
							DefaultListableBeanFactory freshBeanFactory = new DefaultListableBeanFactory(this.beanFactory);
 | 
				
			||||||
		freshBeanFactory.registerBeanDefinition("testBean", beanDefinition);
 | 
							freshBeanFactory.registerBeanDefinition("testBean", beanDefinition);
 | 
				
			||||||
		RegisteredBean registeredBean = RegisteredBean.of(freshBeanFactory, "testBean");
 | 
							RegisteredBean registeredBean = RegisteredBean.of(freshBeanFactory, "testBean");
 | 
				
			||||||
		DeferredTypeBuilder typeBuilder = new DeferredTypeBuilder();
 | 
							DeferredTypeBuilder typeBuilder = new DeferredTypeBuilder();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue