/*******************************************************************************
 * Copyright (c) 2009 by SAP AG, Walldorf. 
 * 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:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence;

import org.eclipse.jdt.core.IType;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IServiceEndpointInterface;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebMethod;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebParam;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.SOAPBindingParameterStyle;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.SOAPBindingStyle;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.SOAPBindingUse;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.JaxWsDefaultsCalculator;
import org.eclipse.jst.ws.jaxws.testutils.jmock.Mock;
import org.eclipse.jst.ws.jaxws.testutils.jmock.MockObjectTestCase;
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotation;

public class JaxWsDefaultsCalculatorTest extends MockObjectTestCase 
{
	private static final String METHOD_NAME = "method";
	
	private Mock<IWebMethod> webMethod;
	private JaxWsDefaultsCalculator defCalc = new JaxWsDefaultsCalculator();
	
	@Override
	public void setUp()
	{
		webMethod = mock(IWebMethod.class);
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.DOCUMENT));
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.BARE));
		webMethod.stubs().method("getName").will(returnValue(METHOD_NAME));
	}
	
	public void testDefineSBStyleDefaultValue() 
	{
		assertEquals(SOAPBindingStyle.DOCUMENT, defCalc.defineSBStyle(null));

		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue(null));
		assertEquals(SOAPBindingStyle.DOCUMENT, defCalc.defineSBStyle(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("Style.DOCUMENT"));
		assertEquals(SOAPBindingStyle.DOCUMENT, defCalc.defineSBStyle(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.Style.DOCUMENT"));
		assertEquals(SOAPBindingStyle.DOCUMENT, defCalc.defineSBStyle(ann.proxy()));		
	}
	
	public void testDefineSBStyle() 
	{
		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue("Style.RPC"));
		assertEquals(SOAPBindingStyle.RPC, defCalc.defineSBStyle(ann.proxy()));

		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.Style.RPC"));
		assertEquals(SOAPBindingStyle.RPC, defCalc.defineSBStyle(ann.proxy()));
	}
	
	public void testDefineSBUseDefaultValue() 
	{
		assertEquals(SOAPBindingUse.LITERAL, defCalc.defineSBUse(null));

		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue(null));
		assertEquals(SOAPBindingUse.LITERAL, defCalc.defineSBUse(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("Style.LITERAL"));
		assertEquals(SOAPBindingUse.LITERAL, defCalc.defineSBUse(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.Style.LITERAL"));
		assertEquals(SOAPBindingUse.LITERAL, defCalc.defineSBUse(ann.proxy()));
	}
	
	public void testDefineSBUse()
	{
		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue("Use.ENCODED"));
		assertEquals(SOAPBindingUse.ENCODED, defCalc.defineSBUse(ann.proxy()));

		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.Use.ENCODED"));
		assertEquals(SOAPBindingUse.ENCODED, defCalc.defineSBUse(ann.proxy()));
	}

	public void testDefineSBParameterStyleDefaultValue() 
	{
		assertEquals(SOAPBindingParameterStyle.WRAPPED, defCalc.defineSBParameterStyle(null));

		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue(null));
		assertEquals(SOAPBindingParameterStyle.WRAPPED, defCalc.defineSBParameterStyle(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("ParameterStyle.WRAPPED"));
		assertEquals(SOAPBindingParameterStyle.WRAPPED, defCalc.defineSBParameterStyle(ann.proxy()));
		
		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.ParameterStyle.WRAPPED"));
		assertEquals(SOAPBindingParameterStyle.WRAPPED, defCalc.defineSBParameterStyle(ann.proxy()));
	}
	
	public void testDefineSBParameterStyle() 
	{
		Mock<IAnnotation<IType>> ann = mock(IAnnotation.class);
		ann.stubs().method("getPropertyValue").will(returnValue("ParameterStyle.BARE"));
		assertEquals(SOAPBindingParameterStyle.BARE, defCalc.defineSBParameterStyle(ann.proxy()));

		ann.stubs().method("getPropertyValue").will(returnValue("SOAPBinding.ParameterStyle.BARE"));
		assertEquals(SOAPBindingParameterStyle.BARE, defCalc.defineSBParameterStyle(ann.proxy()));	
	}	
	
	public void testCalcWebParamDefaultName() 
	{
		assertEquals(METHOD_NAME, defCalc.calcWebParamDefaultName(webMethod.proxy(), 0));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.RPC));
		assertEquals("arg0", defCalc.calcWebParamDefaultName(webMethod.proxy(), 0));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.DOCUMENT));
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.WRAPPED));
		assertEquals("arg1", defCalc.calcWebParamDefaultName(webMethod.proxy(), 1));		
	}

	public void testCalcWebParamDefaultTargetNS() 
	{
		Mock<IWebParam> webParam = mock(IWebParam.class);
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.WRAPPED));		
		webParam.stubs().method("isHeader").will(returnValue(false));
		
		Mock<IServiceEndpointInterface> sei = mock(IServiceEndpointInterface.class);
		sei.stubs().method("getTargetNamespace").will(returnValue("http://com.sap.test"));		
		webMethod.stubs().method("eContainer").will(returnValue(sei.proxy()));
		
		assertEquals("", defCalc.calcWebParamDefaultTargetNS(webMethod.proxy(), webParam.proxy()));

		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.RPC));		
		assertEquals("http://com.sap.test", defCalc.calcWebParamDefaultTargetNS(webMethod.proxy(), webParam.proxy()));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.DOCUMENT));	
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.BARE));		
		assertEquals("http://com.sap.test", defCalc.calcWebParamDefaultTargetNS(webMethod.proxy(), webParam.proxy()));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.DOCUMENT));	
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.WRAPPED));
		webParam.stubs().method("isHeader").will(returnValue(true));
		
		assertEquals("http://com.sap.test", defCalc.calcWebParamDefaultTargetNS(webMethod.proxy(), webParam.proxy()));		
	}

	public void testCalcWebResultDefaultName() 
	{
		assertEquals(METHOD_NAME + "Response", defCalc.calcWebResultDefaultName(webMethod.proxy()));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.RPC));
		assertEquals("return", defCalc.calcWebResultDefaultName(webMethod.proxy()));
		
		webMethod.stubs().method("getSoapBindingStyle").will(returnValue(SOAPBindingStyle.DOCUMENT));
		webMethod.stubs().method("getSoapBindingParameterStyle").will(returnValue(SOAPBindingParameterStyle.WRAPPED));
		assertEquals("return", defCalc.calcWebResultDefaultName(webMethod.proxy()));			
	}
}
