/*******************************************************************************
 * Copyright (c) 2002, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.debug.tests.eval;

import org.eclipse.debug.core.model.IValue;
import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;

public class BooleanAssignmentOperatorsTests extends Tests {

	public BooleanAssignmentOperatorsTests(String arg) {
		super(arg);
	}

	protected void init() throws Exception {
		initializeFrame("EvalSimpleTests",37,1);
	}

	protected void end() throws Exception {
		destroyFrame();
	}

	// boolean |= boolean

	public void testBooleanOrAssignmentBoolean() throws Throwable {
		try {
		init();
		boolean tmpxVar = xVarBooleanValue;
		tmpxVar |= xBooleanValue;
		IValue value = eval(xVarBoolean + orAssignmentOp + xBoolean);
		String typeName = value.getReferenceTypeName();
		assertEquals("boolean orAssignment boolean : wrong type : ", "boolean", typeName);
		boolean booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean orAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		tmpxVar |= yBooleanValue;
		value = eval(xVarBoolean + orAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean orAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean orAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		boolean tmpyVar = yVarBooleanValue;
		tmpyVar |= xBooleanValue;
		value = eval(yVarBoolean + orAssignmentOp + xBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean orAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean orAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);

		tmpyVar |= yBooleanValue;
		value = eval(yVarBoolean + orAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean orAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean orAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);
		} finally {
		end();
		}
	}

	// boolean &= boolean

	public void testBooleanAndAssignmentBoolean() throws Throwable {
		try {
		init();
		boolean tmpxVar = xVarBooleanValue;
		tmpxVar &= xBooleanValue;
		IValue value = eval(xVarBoolean + andAssignmentOp + xBoolean);
		String typeName = value.getReferenceTypeName();
		assertEquals("boolean andAssignment boolean : wrong type : ", "boolean", typeName);
		boolean booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean andAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		tmpxVar &= yBooleanValue;
		value = eval(xVarBoolean + andAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean andAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean andAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		boolean tmpyVar = yVarBooleanValue;
		tmpyVar &= xBooleanValue;
		value = eval(yVarBoolean + andAssignmentOp + xBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean andAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean andAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);

		tmpyVar &= yBooleanValue;
		value = eval(yVarBoolean + andAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean andAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean andAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);
		} finally {
		end();
		}
	}

	// boolean ^= boolean

	public void testBooleanXorAssignmentBoolean() throws Throwable {
		try {
		init();
		boolean tmpxVar = xVarBooleanValue;
		tmpxVar ^= xBooleanValue;
		IValue value = eval(xVarBoolean + xorAssignmentOp + xBoolean);
		String typeName = value.getReferenceTypeName();
		assertEquals("boolean xorAssignment boolean : wrong type : ", "boolean", typeName);
		boolean booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean xorAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		tmpxVar ^= yBooleanValue;
		value = eval(xVarBoolean + xorAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean xorAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean xorAssignment boolean : wrong result : ", tmpxVar, booleanValue);
		value = eval(xVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpxVar, booleanValue);

		boolean tmpyVar = yVarBooleanValue;
		tmpyVar ^= xBooleanValue;
		value = eval(yVarBoolean + xorAssignmentOp + xBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean xorAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean xorAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);

		tmpyVar ^= yBooleanValue;
		value = eval(yVarBoolean + xorAssignmentOp + yBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean xorAssignment boolean : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean xorAssignment boolean : wrong result : ", tmpyVar, booleanValue);
		value = eval(yVarBoolean);
		typeName = value.getReferenceTypeName();
		assertEquals("boolean local variable value : wrong type : ", "boolean", typeName);
		booleanValue = ((IJavaPrimitiveValue)value).getBooleanValue();
		assertEquals("boolean local variable value : wrong result : ", tmpyVar, booleanValue);
		} finally {
		end();
		}
	}


}
