/* * Copyright (c) 2012 Diamond Light Source Ltd. * * 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 */ package uk.ac.diamond.scisoft.analysis.rpc.flattening; import org.junit.Assert; import org.junit.BeforeClass; import uk.ac.diamond.scisoft.analysis.rpc.flattening.IFlattener.FlattenedFormChecker; abstract public class ExplicitFlatteningTestAbstract extends FlatteningTestAbstract { private static FlattenedFormChecker flattenedFormChecker; @BeforeClass public static void createChecker() { flattenedFormChecker = new FlattenedFormChecker(); } /** * Make sure the flattened object contains only legal types for XML RPC transmission. * * @param flat */ protected void checkFlattenedState(Object flat) { Assert.assertTrue("Unexpected object type: " + flat.getClass().toString(), flattenedFormChecker.legal(flat)); } protected Object flattenAndCheck(Object toFlatten) { Object flat = flattener.flatten(toFlatten); checkFlattenedState(flat); return flat; } protected abstract Object doAdditionalWorkOnFlattendForm(Object flat); @Override protected Object doActualFlattenAndUnflatten(Object inObj) { Assert.assertTrue(flattener.canFlatten(inObj)); Object flat = flattenAndCheck(inObj); flat = doAdditionalWorkOnFlattendForm(flat); Assert.assertTrue(flattener.canUnFlatten(flat)); return flattener.unflatten(flat); } }