//
// MonoTests.System.Runtime.Remoting.SyncCalls.cs
//
// Author: Lluis Sanchez Gual (lluis@ximian.com)
//
// 2003 (C) Copyright, Ximian, Inc.
//

using System;
using System.Collections;
using NUnit.Framework;
using System.Text;
using System.Runtime.InteropServices;

namespace MonoTests.System.Runtime.Remoting
{
	public abstract class SyncCallTest : BaseCallTest
	{
		public override InstanceSurrogate GetInstanceSurrogate () { return new SyncInstanceSurrogate (); }
		public override AbstractSurrogate GetAbstractSurrogate () { return new SyncAbstractSurrogate (); }
		public override InterfaceSurrogate GetInterfaceSurrogate () { return new SyncInterfaceSurrogate (); }
	}

	public class SyncInstanceSurrogate : InstanceSurrogate
	{
		public override int Simple ()
		{
			return RemoteObject.Simple ();
		}

		public override string PrimitiveParams (int a, uint b, char c, string d)
		{
			return RemoteObject.PrimitiveParams (a, b, c, d);
		}

		public override string PrimitiveParamsInOut (ref int a1, out int a2, ref float b1, out float b2, ref char c1, out char c2, ref string d1, out string d2)
		{
			return RemoteObject.PrimitiveParamsInOut (ref a1, out a2, ref b1, out b2, ref c1, out c2, ref d1, out d2);
		}

		public override Complex ComplexParams (ArrayList a, Complex b, string c)
		{
			return RemoteObject.ComplexParams (a, b, c);
		}

		public override Complex ComplexParamsInOut (ref ArrayList a, out Complex b, [In,Out] byte[] bytes, [In,Out] StringBuilder sb, string c)
		{
			return RemoteObject.ComplexParamsInOut (ref a, out b, bytes, sb, c);
		}

		public override void ProcessContextData ()
		{
			RemoteObject.ProcessContextData ();
		}
	}

	public class SyncAbstractSurrogate : AbstractSurrogate
	{
		public override int Simple ()
		{
			return RemoteObject.Simple ();
		}

		public override string PrimitiveParams (int a, uint b, char c, string d)
		{
			return RemoteObject.PrimitiveParams (a, b, c, d);
		}

		public override string PrimitiveParamsInOut (ref int a1, out int a2, ref float b1, out float b2, ref char c1, out char c2, ref string d1, out string d2)
		{
			return RemoteObject.PrimitiveParamsInOut (ref a1, out a2, ref b1, out b2, ref c1, out c2, ref d1, out d2);
		}

		public override Complex ComplexParams (ArrayList a, Complex b, string c)
		{
			return RemoteObject.ComplexParams (a, b, c);
		}

		public override Complex ComplexParamsInOut (ref ArrayList a, out Complex b, [In,Out] byte[] bytes, [In,Out] StringBuilder sb, string c)
		{
			return RemoteObject.ComplexParamsInOut (ref a, out b, bytes, sb, c);
		}

		public override void ProcessContextData ()
		{
			RemoteObject.ProcessContextData ();
		}
	}

	public class SyncInterfaceSurrogate : InterfaceSurrogate
	{
		public override int Simple ()
		{
			return RemoteObject.Simple ();
		}

		public override string PrimitiveParams (int a, uint b, char c, string d)
		{
			return RemoteObject.PrimitiveParams (a, b, c, d);
		}

		public override string PrimitiveParamsInOut (ref int a1, out int a2, ref float b1, out float b2, ref char c1, out char c2, ref string d1, out string d2)
		{
			return RemoteObject.PrimitiveParamsInOut (ref a1, out a2, ref b1, out b2, ref c1, out c2, ref d1, out d2);
		}

		public override Complex ComplexParams (ArrayList a, Complex b, string c)
		{
			return RemoteObject.ComplexParams (a, b, c);
		}

		public override Complex ComplexParamsInOut (ref ArrayList a, out Complex b, [In,Out] byte[] bytes, [In,Out] StringBuilder sb, string c)
		{
			return RemoteObject.ComplexParamsInOut (ref a, out b, bytes, sb, c);
		}

		public override void ProcessContextData ()
		{
			RemoteObject.ProcessContextData ();
		}
	}
}
