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


import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ICheckable;


public abstract class StructuredItemViewerTest extends StructuredViewerTest {

	public StructuredItemViewerTest(String name) {
		super(name);
	}
public void testCheckElement() {

	if (fViewer instanceof ICheckable) {
		TestElement first = fRootElement.getFirstChild();
		TestElement firstfirst = first.getFirstChild();

		ICheckable ctv = (ICheckable) fViewer;
		ctv.setChecked(first, true);
		assertTrue(ctv.getChecked(first));

		// checking an invisible element
		if (fViewer instanceof AbstractTreeViewer) {
			// The first child of the first child can only be resolved in a tree
			assertTrue(ctv.setChecked(firstfirst, true));
			assertTrue(ctv.getChecked(firstfirst));
		} else {
			assertTrue(!ctv.setChecked(firstfirst, true));
			assertTrue(!ctv.getChecked(firstfirst));
		}

		ctv.setChecked(first, false);
		assertTrue(!ctv.getChecked(first));
	}
}
}
