
package com.googlecode.jmxtrans.model;

import lombok.EqualsAndHashCode;
import org.junit.Test;

import javax.annotation.Nonnull;

import static org.assertj.core.api.Assertions.assertThat;

public class SingletonOutputWriterFactoryTest {

	@Test
	public void sameInstanceIsAlwaysReturned() {
		SingletonOutputWriterFactory outputWriterFactory = new SingletonOutputWriterFactory(new DummyOutputWriterFactory());

		OutputWriter outputWriter1 = outputWriterFactory.create();
		OutputWriter outputWriter2 = outputWriterFactory.create();

		assertThat(outputWriter1).isSameAs(outputWriter2);
	}

	@Test
	public void twoSingletonFactoriesAreEqualIfTheyWrapTheSameFactory() {
		SingletonOutputWriterFactory outputWriterFactory1 = new SingletonOutputWriterFactory(new DummyOutputWriterFactory());
		SingletonOutputWriterFactory outputWriterFactory2 = new SingletonOutputWriterFactory(new DummyOutputWriterFactory());

		assertThat(outputWriterFactory1).isEqualTo(outputWriterFactory2);
	}

	@EqualsAndHashCode
	private static final class DummyOutputWriterFactory implements OutputWriterFactory {

		@Nonnull
		@Override
		public OutputWriter create() {
			return new OutputWriterAdapter() {
				@Override
				public void doWrite(Server server, Query query, Iterable<Result> results) throws Exception {

				}
			};
		}
	}

}
