* AsyncCalls.cs, BaseCalls.cs, HttpCalls.cs, ReflectionCalls.cs, SyncCalls.cs,
[mono.git] / mcs / class / System.Runtime.Remoting / Test / CallSeq.cs
1 //\r
2 // MonoTests.System.Runtime.Remoting.CallSeq.cs\r
3 //\r
4 // Author: Lluis Sanchez Gual (lluis@ximian.com)\r
5 //\r
6 // 2003 (C) Copyright, Ximian, Inc.\r
7 //\r
8 \r
9 using System;\r
10 using System.Threading;\r
11 using System.Collections;\r
12 using NUnit.Framework;\r
13 \r
14 namespace MonoTests.System.Runtime.Remoting\r
15 {\r
16         public class CallSeq\r
17         {\r
18                 static ArrayList calls = new ArrayList();\r
19                 static int checkPos = 0;\r
20                 static int writePos = 0;\r
21                 static string name = "";\r
22                 static ArrayList contexts = new ArrayList ();\r
23 \r
24                 public static void Add (string msg)\r
25                 {\r
26                         writePos++;\r
27 \r
28                         msg = writePos.ToString ("000") + " (d" + CommonDomainId + ",c" + CommonContextId + ") " + msg;\r
29                         calls.Add (msg);\r
30                 }\r
31 \r
32                 public static int CommonContextId\r
33                 {\r
34                         get\r
35                         {\r
36                                 int id = Thread.CurrentContext.ContextID;\r
37                                 int idc = contexts.IndexOf (id);\r
38                                 if (idc == -1)\r
39                                 {\r
40                                         idc = contexts.Count;\r
41                                         contexts.Add (id);\r
42                                 }\r
43                                 return idc;\r
44                         }\r
45                 }\r
46 \r
47                 public static int CommonDomainId\r
48                 {\r
49                         get\r
50                         {\r
51                                 if (Thread.GetDomainID() != 1) return 2;\r
52                                 else return 1;\r
53                         }\r
54                 }\r
55 \r
56                 public static void Init (string str)\r
57                 {\r
58                         calls = new ArrayList();\r
59                         contexts = new ArrayList ();\r
60                         name = str;\r
61                         checkPos = 0;\r
62                         writePos = 0;\r
63                 }\r
64 \r
65                 public static void Check (string msg, int domain)\r
66                 {\r
67                         bool optional = false;\r
68                         if (msg.StartsWith ("#"))\r
69                         {\r
70                                 optional = true;\r
71                                 msg = msg.Substring (1);\r
72                         }\r
73 \r
74                         if (msg[6].ToString() != domain.ToString()) return;\r
75 \r
76                         if (checkPos >= calls.Count)\r
77                         {\r
78                                 if (!optional) Assertion.Fail ("[" + name + "] Call check failed. Expected call not made: \"" + msg + "\"");\r
79                                 else return;\r
80                         }\r
81 \r
82                         string call = (string) calls[checkPos++];\r
83 \r
84                         if (msg.Substring (3) != call.Substring (3))\r
85                         {\r
86                                 if (optional) checkPos--;\r
87                                 else Assertion.Fail ("[" + name + "] Call check failed in step " + (checkPos+1) + ". Expected \"" + msg + "\" found \"" + call + "\"");\r
88                         }\r
89                 }\r
90 \r
91                 public static void Check (string[] msgs, int domain)\r
92                 {\r
93                         foreach (string msg in msgs)\r
94                                 Check (msg, domain);\r
95                 }\r
96 \r
97                 public static ArrayList Seq\r
98                 {\r
99                         get { return calls; }\r
100                         set { calls = value; }\r
101                 }\r
102         }\r
103 }\r