Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

102 lines
2.1 KiB
C#

//
// MonoTests.Remoting.CallSeq.cs
//
// Author: Lluis Sanchez Gual (lluis@ximian.com)
//
// 2003 (C) Copyright, Ximian, Inc.
//
using System;
using System.Threading;
using System.Collections;
using NUnit.Framework;
namespace MonoTests.Remoting
{
public class CallSeq
{
static ArrayList calls = new ArrayList();
static int checkPos = 0;
static int writePos = 0;
static string name = "";
static ArrayList contexts = new ArrayList ();
static int domId = 1;
public static void Add (string msg)
{
writePos++;
msg = writePos.ToString ("000") + " (d" + CommonDomainId + ",c" + CommonContextId + ") " + msg;
calls.Add (msg);
}
public static int CommonContextId
{
get
{
int id = Thread.CurrentContext.ContextID;
int idc = contexts.IndexOf (id);
if (idc == -1)
{
idc = contexts.Count;
contexts.Add (id);
}
return idc;
}
}
public static int CommonDomainId
{
get { return domId; }
set { domId = value; }
}
public static void Init (string str)
{
calls = new ArrayList();
contexts = new ArrayList ();
name = str;
checkPos = 0;
writePos = 0;
}
public static void Check (string msg, int domain)
{
bool optional = false;
if (msg.StartsWith ("#"))
{
optional = true;
msg = msg.Substring (1);
}
if (msg[6].ToString() != domain.ToString()) return;
if (checkPos >= calls.Count)
{
if (!optional) Assert.Fail ("[" + name + "] Call check failed. Expected call not made: \"" + msg + "\"");
else return;
}
string call = (string) calls[checkPos++];
if (msg.Substring (3) != call.Substring (3))
{
if (optional) checkPos--;
else Assert.Fail ("[" + name + "] Call check failed in step " + (checkPos+1) + ". Expected \"" + msg + "\" found \"" + call + "\"");
}
}
public static void Check (string[] msgs, int domain)
{
foreach (string msg in msgs)
Check (msg, domain);
}
public static ArrayList Seq
{
get { return calls; }
set { calls = value; }
}
}
}