3
using System.Collections;
11
public class TestEvents: TestBase
18
Counter[] counters = new Counter [3];
22
public int notifyCount;
24
public int removeCount;
25
public int eventCount;
35
public void Check (string test, int notifyCount, int addCount, int removeCount, int eventCount)
37
Assert.AreEqual (notifyCount, this.notifyCount, test + " (notifyCount)");
38
Assert.AreEqual (addCount, this.addCount, test + " (addCount)");
39
Assert.AreEqual (removeCount, this.removeCount, test + " (removeCount)");
40
Assert.AreEqual (eventCount, this.eventCount, test + " (eventCount)");
44
public void Update (ExtensionNodeEventArgs args)
47
if (args.Change == ExtensionChange.Add)
53
public void Update (ExtensionEventArgs args)
62
public void TestLoadEvents()
65
notifyCount = addCount = removeCount = eventCount = 0;
67
Assert.AreEqual (4, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 1");
69
AddinManager.Registry.DisableAddin ("SimpleApp.HelloWorldExtension,0.1.0");
70
AddinManager.Registry.DisableAddin ("SimpleApp.FileContentExtension,0.1.0");
72
Assert.AreEqual (2, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 2");
74
string[] addinExtensions = new string[] {
76
"/SimpleApp.Core/TypeExtensions/SimpleApp.ISampleExtender",
77
"/SimpleApp.Core/TypeExtensions/SimpleApp.IWriterWithMetadata",
78
"/SimpleApp/NodesWithAttribute",
79
"/SimpleApp/DataExtensionWithAttribute",
82
InitChangedExtensionEvent (addinExtensions);
84
AddinManager.ExtensionChanged += OnExtensionChangedHandler;
85
AddinManager.AddExtensionNodeHandler ("/SimpleApp/Writers", OnExtensionChange);
87
Assert.IsTrue (errorTag == "", errorTag);
88
Assert.AreEqual (2, notifyCount, "notifyCount 1");
89
Assert.AreEqual (2, addCount, "addCount 1");
90
Assert.AreEqual (0, removeCount, "removeCount 1");
91
Assert.AreEqual (0, eventCount, "eventCount 1");
93
notifyCount = addCount = removeCount = eventCount = 0;
94
AddinManager.Registry.EnableAddin ("SimpleApp.HelloWorldExtension,0.1.0");
96
Assert.AreEqual (3, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 3");
98
CheckChangedExtensionEvent ("events check 3");
99
Assert.IsTrue (errorTag == "", errorTag);
100
Assert.AreEqual (1, notifyCount, "notifyCount 2");
101
Assert.AreEqual (1, addCount, "addCount 2");
102
Assert.AreEqual (0, removeCount, "removeCount 2");
103
Assert.AreEqual (addinExtensions.Length, eventCount, "eventCount 2"); // 1 for each extension of HelloWorldExtension, not only /SimpleApp/Writers
107
notifyCount = addCount = removeCount = eventCount = 0;
108
AddinManager.ExtensionChanged -= OnExtensionChangedHandler;
109
AddinManager.RemoveExtensionNodeHandler ("/SimpleApp/Writers", OnExtensionChange);
111
AddinManager.Registry.EnableAddin ("SimpleApp.FileContentExtension,0.1.0");
113
Assert.IsTrue (errorTag == "", errorTag);
114
Assert.AreEqual (0, notifyCount, "notifyCount 3");
115
Assert.AreEqual (0, addCount, "addCount 3");
116
Assert.AreEqual (0, removeCount, "removeCount 3");
117
Assert.AreEqual (0, eventCount, "eventCount 3");
119
Assert.AreEqual (4, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 4");
122
void OnExtensionChange (object s, ExtensionNodeEventArgs args)
126
TypeExtensionNode nod = args.ExtensionNode as TypeExtensionNode;
130
if (args.Change == ExtensionChange.Add) {
133
IWriter w = ((TypeExtensionNode)args.ExtensionNode).CreateInstance () as IWriter;
137
if (args.Change == ExtensionChange.Remove) {
142
ArrayList expectedPathsEvent = new ArrayList ();
143
void OnExtensionChangedHandler (object s, ExtensionEventArgs args)
146
if (expectedPathsEvent.Contains (args.Path))
147
expectedPathsEvent.Remove (args.Path);
149
errorTag += "t4 (" + args.Path + ") ";
152
void InitChangedExtensionEvent (params string[] expectedPaths)
154
expectedPathsEvent.Clear ();
155
expectedPathsEvent.AddRange (expectedPaths);
158
void CheckChangedExtensionEvent (string tag)
160
Assert.IsTrue (expectedPathsEvent.Count == 0, tag + ": Event not fired for paths: " + string.Join (", ", (string[])expectedPathsEvent.ToArray (typeof(string))));
165
public void TestUnloadEvents()
168
notifyCount = addCount = removeCount = eventCount = 0;
170
// All addins are enabled
172
Assert.AreEqual (4, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 1");
174
string[] addinExtensions = new string[] {
175
"/SimpleApp/Writers",
176
"/SimpleApp.Core/TypeExtensions/SimpleApp.ISampleExtender",
177
"/SimpleApp.Core/TypeExtensions/SimpleApp.IWriterWithMetadata",
178
"/SimpleApp/NodesWithAttribute",
179
"/SimpleApp/DataExtensionWithAttribute",
182
InitChangedExtensionEvent (addinExtensions);
184
AddinManager.ExtensionChanged += OnExtensionChangedHandler;
185
AddinManager.AddExtensionNodeHandler ("/SimpleApp/Writers", OnExtensionChange);
187
Assert.IsTrue (errorTag == "", errorTag);
188
Assert.AreEqual (4, notifyCount, "notifyCount 1");
189
Assert.AreEqual (4, addCount, "addCount 1");
190
Assert.AreEqual (0, removeCount, "removeCount 1");
191
Assert.AreEqual (0, eventCount, "eventCount 1");
193
notifyCount = addCount = removeCount = eventCount = 0;
194
AddinManager.Registry.DisableAddin ("SimpleApp.HelloWorldExtension,0.1.0");
196
Assert.AreEqual (3, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 2");
198
CheckChangedExtensionEvent ("events check 2");
199
Assert.IsTrue (errorTag == "", errorTag);
200
Assert.AreEqual (1, notifyCount, "notifyCount 2");
201
Assert.AreEqual (0, addCount, "addCount 2");
202
Assert.AreEqual (1, removeCount, "removeCount 2");
203
Assert.AreEqual (addinExtensions.Length, eventCount, "eventCount 2"); // 1 for each extension of HelloWorldExtension, not only /SimpleApp/Writers
205
InitChangedExtensionEvent ("/SimpleApp/Writers",
206
"/SimpleApp.Core/TypeExtensions/SimpleApp.ISampleExtender",
207
"/SimpleApp/NodeWithChildren",
208
"/SystemInformation/Modules");
209
notifyCount = addCount = removeCount = eventCount = 0;
210
AddinManager.Registry.DisableAddin ("SimpleApp.FileContentExtension,0.1.0");
212
Assert.AreEqual (2, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 3");
214
CheckChangedExtensionEvent ("events check 3");
215
Assert.IsTrue (errorTag == "", errorTag);
216
Assert.AreEqual (1, notifyCount, "notifyCount 3");
217
Assert.AreEqual (0, addCount, "addCount 3");
218
Assert.AreEqual (1, removeCount, "removeCount 3");
219
Assert.AreEqual (4, eventCount, "eventCount 3");
223
AddinManager.ExtensionChanged -= OnExtensionChangedHandler;
224
AddinManager.RemoveExtensionNodeHandler ("/SimpleApp/Writers", OnExtensionChange);
226
notifyCount = addCount = removeCount = eventCount = 0;
227
AddinManager.Registry.DisableAddin ("SimpleApp.CommandExtension,0.1.0");
229
Assert.AreEqual (0, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 4");
231
Assert.IsTrue (errorTag == "", errorTag);
232
Assert.AreEqual (0, notifyCount, "notifyCount 4");
233
Assert.AreEqual (0, addCount, "addCount 4");
234
Assert.AreEqual (0, removeCount, "removeCount 4");
235
Assert.AreEqual (0, eventCount, "eventCount 4");
239
public void TestExtensionContextEvents ()
241
AddinManager.Registry.EnableAddin ("SimpleApp.SystemInfoExtension,0.1.0");
243
counters [0] = new Counter ();
244
counters [1] = new Counter ();
245
counters [2] = new Counter ();
247
GlobalInfoCondition.Value = "";
249
ExtensionContext c1 = AddinManager.CreateExtensionContext ();
250
ExtensionContext c2 = AddinManager.CreateExtensionContext ();
252
ParameterInfoCondition pinfo1 = new ParameterInfoCondition ();
253
ParameterInfoCondition pinfo2 = new ParameterInfoCondition ();
258
c1.RegisterCondition ("InputParameter", pinfo1);
259
c2.RegisterCondition ("InputParameter", pinfo2);
263
c1.GetExtensionNode ("/SimpleApp/ExtraWriters").ExtensionNodeChanged += NodeListener_1;
264
c2.AddExtensionNodeHandler ("/SimpleApp/ExtraWriters", NodeListener_2);
265
AddinManager.AddExtensionNodeHandler ("/SimpleApp/Writers2", NodeListener_g);
267
counters[0].Check ("t1.0", 2, 2, 0, 0);
268
counters[1].Check ("t1.1", 2, 2, 0, 0);
269
counters[2].Check ("t1.2", 2, 2, 0, 0);
271
c1.AddExtensionNodeHandler ("/SimpleApp/Writers2", NodeListener_1);
272
c2.AddExtensionNodeHandler ("/SimpleApp/Writers2", NodeListener_2);
274
counters[1].Check ("t2.1", 2, 2, 0, 0);
275
counters[2].Check ("t2.2", 2, 2, 0, 0);
277
c1.ExtensionChanged += ExtensionListener_1;
278
c2.ExtensionChanged += ExtensionListener_2;
279
AddinManager.ExtensionChanged += ExtensionListener_g;
281
counters[0].Check ("t3.0", 0, 0, 0, 0);
282
counters[1].Check ("t3.1", 0, 0, 0, 0);
283
counters[2].Check ("t3.2", 0, 0, 0, 0);
285
CheckWriters ("t4.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
286
CheckWriters ("t4.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
287
CheckWriters ("t4.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
288
CheckWriters ("t4.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
289
CheckWriters ("t4.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
291
// Test change global var
293
GlobalInfoCondition.Value = "yes2";
295
counters[0].Check ("t5.0", 2, 2, 0, 1);
296
counters[1].Check ("t5.1", 2, 2, 0, 1);
297
counters[2].Check ("t5.2", 2, 2, 0, 1);
299
CheckWriters ("t6.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2", "cmd:cw1", "cmd:cw2");
300
CheckWriters ("t6.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2", "cmd:cw1", "cmd:cw2");
301
CheckWriters ("t6.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2", "cmd:cw1", "cmd:cw2");
302
CheckWriters ("t6.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
303
CheckWriters ("t6.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
305
// Test change global var
307
GlobalInfoCondition.Value = "no";
309
counters[0].Check ("t7.0", 2, 0, 2, 1);
310
counters[1].Check ("t7.1", 5, 3, 2, 2);
311
counters[2].Check ("t7.2", 5, 3, 2, 2);
313
CheckWriters ("t7.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
314
CheckWriters ("t7.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
315
CheckWriters ("t7.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
316
CheckWriters ("t7.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:cn1", "cmd:cn2", "cmd:cn3");
317
CheckWriters ("t7.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:cn1", "cmd:cn2", "cmd:cn3");
319
// Test reset global var
321
GlobalInfoCondition.Value = "";
323
counters[0].Check ("t8.0", 0, 0, 0, 0);
324
counters[1].Check ("t8.1", 3, 0, 3, 1);
325
counters[2].Check ("t8.2", 3, 0, 3, 1);
327
CheckWriters ("t8.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
328
CheckWriters ("t8.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
329
CheckWriters ("t8.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
330
CheckWriters ("t8.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
331
CheckWriters ("t8.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
335
pinfo1.Value = "simple";
337
counters[0].Check ("t9.0", 0, 0, 0, 0);
338
counters[1].Check ("t9.1", 2, 2, 0, 1);
339
counters[2].Check ("t9.2", 0, 0, 0, 0);
341
CheckWriters ("t9.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
342
CheckWriters ("t9.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
343
CheckWriters ("t9.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
344
CheckWriters ("t9.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:sim1", "cmd:sim2");
345
CheckWriters ("t9.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
349
pinfo2.Value = "simple";
351
counters[0].Check ("t10.0", 0, 0, 0, 0);
352
counters[1].Check ("t10.1", 0, 0, 0, 0);
353
counters[2].Check ("t10.2", 2, 2, 0, 1);
355
CheckWriters ("t10.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
356
CheckWriters ("t10.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
357
CheckWriters ("t10.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
358
CheckWriters ("t10.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:sim1", "cmd:sim2");
359
CheckWriters ("t10.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:sim1", "cmd:sim2");
361
// Test unset local var
365
counters[0].Check ("t10.0", 0, 0, 0, 0);
366
counters[1].Check ("t10.1", 0, 0, 0, 0);
367
counters[2].Check ("t10.2", 2, 0, 2, 1);
369
CheckWriters ("t10.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
370
CheckWriters ("t10.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
371
CheckWriters ("t10.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
372
CheckWriters ("t10.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:sim1", "cmd:sim2");
373
CheckWriters ("t10.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2");
375
// Combined global/local var change
377
GlobalInfoCondition.Value = "yes1";
380
counters[0].Check ("t11.0", 0, 0, 0, 0);
381
counters[1].Check ("t11.1", 0, 0, 0, 0);
382
counters[2].Check ("t11.2", 2, 2, 0, 1);
384
CheckWriters ("t11.1", null, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
385
CheckWriters ("t11.2", c1, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
386
CheckWriters ("t11.3", c2, "/SimpleApp/Writers2", "cmd:w1", "cmd:w2");
387
CheckWriters ("t11.4", c1, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:sim1", "cmd:sim2");
388
CheckWriters ("t11.5", c2, "/SimpleApp/ExtraWriters", "cmd:ca1", "cmd:ca2", "cmd:c3 x1 and yes1", "cmd:c4 x1 and yes1");
390
GlobalInfoCondition.Value = "";
393
void CheckWriters (string test, ExtensionContext ctx, string path, params string[] values)
397
nodes = (IWriter[]) ctx.GetExtensionObjects (path, typeof(IWriter));
399
nodes = (IWriter[]) AddinManager.GetExtensionObjects (path, typeof(IWriter));
401
Assert.AreEqual (nodes.Length, values.Length, test + " (count)");
402
for (int n=0; n<values.Length; n++) {
403
Assert.AreEqual (values[n], nodes[n].Write(), test + " (result #" + n + ")");
407
void NodeListener_1 (object s, ExtensionNodeEventArgs args)
409
counters[1].Update (args);
412
void NodeListener_2 (object s, ExtensionNodeEventArgs args)
414
counters[2].Update (args);
417
void NodeListener_g (object s, ExtensionNodeEventArgs args)
419
counters[0].Update (args);
422
void ExtensionListener_1 (object s, ExtensionEventArgs args)
424
counters[1].Update (args);
427
void ExtensionListener_2 (object s, ExtensionEventArgs args)
429
counters[2].Update (args);
432
void ExtensionListener_g (object s, ExtensionEventArgs args)
434
counters[0].Update (args);