/********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/
package org.eclipse.mdm.businessobjects.utils;

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

import org.junit.Test;

public class ReflectUtilTest {

	@Test
	public void testApplyValueBoolean() throws Exception {
		assertThat(ReflectUtil.isAssignable(Boolean.class, boolean.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(boolean.class, Boolean.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(boolean.class, boolean.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Boolean.class, Boolean.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Boolean.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Boolean.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(boolean.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, boolean.class)).isFalse();
	}

	@Test
	public void testApplyValueByte() throws Exception {
		assertThat(ReflectUtil.isAssignable(Byte.class, byte.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(byte.class, Byte.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(byte.class, byte.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Byte.class, Byte.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Byte.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Byte.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(byte.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, byte.class)).isFalse();
	}

	@Test
	public void testApplyValueShort() throws Exception {
		assertThat(ReflectUtil.isAssignable(Short.class, short.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(short.class, Short.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(short.class, short.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Short.class, Short.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Short.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Short.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(short.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, short.class)).isFalse();
	}

	@Test
	public void testApplyValueInt() throws Exception {
		assertThat(ReflectUtil.isAssignable(Integer.class, int.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(int.class, Integer.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(int.class, int.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Integer.class, Integer.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Integer.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Integer.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(int.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, int.class)).isFalse();
	}

	@Test
	public void testApplyValueLong() throws Exception {
		assertThat(ReflectUtil.isAssignable(Long.class, long.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(long.class, Long.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(long.class, long.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Long.class, Long.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Long.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Long.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(long.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, long.class)).isFalse();
	}

	@Test
	public void testApplyValueFloat() throws Exception {
		assertThat(ReflectUtil.isAssignable(Float.class, float.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(float.class, Float.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(float.class, float.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Float.class, Float.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Float.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Float.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(float.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, float.class)).isFalse();
	}

	@Test
	public void testApplyValueDouble() throws Exception {
		assertThat(ReflectUtil.isAssignable(Double.class, double.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(double.class, Double.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(double.class, double.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Double.class, Double.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Double.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Double.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(double.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, double.class)).isFalse();
	}

	@Test
	public void testApplyValueChar() throws Exception {
		assertThat(ReflectUtil.isAssignable(Character.class, char.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(char.class, Character.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(char.class, char.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(Character.class, Character.class)).isTrue();
		assertThat(ReflectUtil.isAssignable(String.class, Character.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(Character.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(char.class, String.class)).isFalse();
		assertThat(ReflectUtil.isAssignable(String.class, char.class)).isFalse();
	}
}
