asunit4 4.2.2.pre → 4.2.3.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/Gemfile.lock +26 -0
  2. data/bin/AsUnit-4.1.2.swc +0 -0
  3. data/bin/AsUnit-4.2.3.pre.swc +0 -0
  4. data/bin/AsUnitRunner.swf +0 -0
  5. data/bin/Flex4AsUnitRunner.swf +0 -0
  6. data/build.xml +42 -2
  7. data/lib/SwiftSuspenders-v1.5.1.swc +0 -0
  8. data/lib/flexUnitTasks.jar +0 -0
  9. data/pkg/sprout-asunit4-library-4.1.2.gem +0 -0
  10. data/rakefile.rb +4 -1
  11. data/sprout/lib/asunit4.rb +1 -1
  12. data/src/asunit/asserts/assertMatches.as +6 -0
  13. data/src/asunit/asserts/assertThrowsWithMessage.as +5 -0
  14. data/src/asunit/core/AsUnitCore.as +42 -88
  15. data/src/asunit/core/FlashBuilderCore.as +2 -2
  16. data/src/asunit/core/FlashDevelopCore.as +1 -1
  17. data/src/asunit/core/FlexUnitCICore.as +17 -0
  18. data/src/asunit/core/TextCore.as +36 -54
  19. data/src/asunit/framework/Assert.as +76 -11
  20. data/src/asunit/framework/Async.as +1 -1
  21. data/src/asunit/framework/IResult.as +1 -6
  22. data/src/asunit/framework/IRunListener.as +0 -3
  23. data/src/asunit/framework/IRunner.as +0 -3
  24. data/src/asunit/framework/IRunnerFactory.as +3 -3
  25. data/src/asunit/framework/ITestListener.as +1 -2
  26. data/src/asunit/framework/Method.as +82 -80
  27. data/src/asunit/framework/Result.as +3 -24
  28. data/src/asunit/framework/RunnerFactory.as +13 -34
  29. data/src/asunit/framework/SuiteIterator.as +28 -22
  30. data/src/asunit/framework/TestCase.as +8 -3
  31. data/src/asunit/printers/FlashBuilderPrinter.as +25 -83
  32. data/src/asunit/printers/FlashDevelopPrinter.as +1 -2
  33. data/src/asunit/printers/FlexUnitCIPrinter.as +181 -0
  34. data/src/asunit/printers/TextPrinter.as +17 -46
  35. data/src/asunit/printers/XMLPrinter.as +127 -0
  36. data/src/asunit/runners/LegacyRunner.as +6 -1
  37. data/src/asunit/runners/SuiteRunner.as +30 -66
  38. data/src/asunit/runners/TestRunner.as +90 -255
  39. data/test/AllTests.as +9 -4
  40. data/test/AsUnitCIRunner.as +18 -0
  41. data/test/AsUnitRunner.as +2 -0
  42. data/test/AsUnitRunnerCS3.fla +0 -0
  43. data/test/asunit/core/AsUnitCoreTest.as +33 -15
  44. data/test/asunit/framework/AssertEqualsArraysIgnoringOrderTest.as +14 -0
  45. data/test/asunit/framework/AssertThrowsWithMessageTest.as +50 -0
  46. data/test/asunit/framework/AsyncTest.as +0 -4
  47. data/test/asunit/framework/ProceedOnEventTest.as +1 -2
  48. data/test/asunit/framework/ResultObserverTest.as +61 -0
  49. data/test/asunit/framework/RunnerFactoryTest.as +7 -9
  50. data/test/asunit/framework/VisualTestCaseTest.as +2 -26
  51. data/test/asunit/printers/FlashBuilderPrinterTest.as +18 -0
  52. data/test/asunit/printers/XMLPrinterTest.as +131 -0
  53. data/test/asunit/runners/LegacyRunnerTest.as +4 -4
  54. data/test/asunit/runners/SuiteRunnerTest.as +10 -7
  55. data/test/asunit/runners/TestRunnerAsyncMethodTest.as +9 -7
  56. data/test/asunit/runners/TestRunnerErrorMethodTest.as +1 -1
  57. data/test/asunit/runners/TestRunnerExpectsErrorTest.as +2 -2
  58. data/test/asunit/runners/TestRunnerExpectsErrorWithMessageTest.as +125 -0
  59. data/test/asunit/runners/TestRunnerIgnoredMethodTest.as +2 -3
  60. data/test/asunit/runners/TestRunnerTest.as +4 -27
  61. data/test/asunit/support/{CustomTestRunner.as → CustomSuiteRunner.as} +7 -3
  62. data/test/asunit/support/InjectionVerification.as +2 -30
  63. data/test/asunit/support/SuiteWithCustomRunner.as +1 -1
  64. data/vendor/as3injection/org/swiftsuspenders/InjectionConfig.as +78 -0
  65. data/vendor/as3injection/org/swiftsuspenders/InjectionType.as +16 -0
  66. data/vendor/as3injection/org/swiftsuspenders/Injector.as +376 -0
  67. data/vendor/as3injection/org/swiftsuspenders/InjectorError.as +17 -0
  68. data/vendor/as3injection/org/swiftsuspenders/Reflector.as +95 -0
  69. data/vendor/as3injection/org/swiftsuspenders/getConstructor.as +33 -0
  70. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/ConstructorInjectionPoint.as +94 -0
  71. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/InjectionPoint.as +35 -0
  72. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/MethodInjectionPoint.as +122 -0
  73. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/NoParamsConstructorInjectionPoint.as +24 -0
  74. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/PostConstructInjectionPoint.as +52 -0
  75. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/PropertyInjectionPoint.as +62 -0
  76. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectClassResult.as +33 -0
  77. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectOtherRuleResult.as +34 -0
  78. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectSingletonResult.as +43 -0
  79. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectValueResult.as +33 -0
  80. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectionResult.as +26 -0
  81. metadata +44 -19
  82. data/bin/AsUnit-4.2.1.pre.swc +0 -0
  83. data/bin/AsUnit-4.2.2.pre.swc +0 -0
  84. data/src/asunit/framework/CallbackBridge.as +0 -175
  85. data/src/asunit/framework/ITestResult.as +0 -21
  86. data/src/asunit/framework/InjectionDelegate.as +0 -96
  87. data/src/asunit/framework/MessageBridge.as +0 -24
  88. data/src/asunit/framework/TestObserver.as +0 -12
  89. data/test/asunit/framework/CallbackBridgeTest.as +0 -73
  90. data/test/asunit/framework/InjectionDelegateTest.as +0 -79
  91. data/test/asunit/support/AnnotatedSubClass.as +0 -18
  92. data/test/asunit/support/AnnotatedSuperClass.as +0 -15
  93. data/test/asunit/support/FakeRunner.as +0 -32
  94. data/test/asunit/support/InjectTimeoutOnAsync.as +0 -14
  95. data/test/asunit/support/TestForFakeRunner.as +0 -14
@@ -1,26 +1,22 @@
1
- package asunit.framework {
2
-
3
- import asunit.util.Iterator;
4
-
5
- import flash.utils.getDefinitionByName;
6
-
7
- import p2.reflect.Reflection;
8
- import p2.reflect.ReflectionVariable;
9
- import p2.reflect.ReflectionMetaData;
1
+ package asunit.framework {
2
+ import asunit.util.Iterator;
3
+
4
+ import p2.reflect.Reflection;
5
+ import p2.reflect.ReflectionVariable;
6
+
7
+ import flash.utils.getDefinitionByName;
10
8
 
11
9
  public class SuiteIterator implements Iterator {
12
10
 
13
11
  protected var index:int;
14
12
  protected var list:Array;
15
13
 
16
- public function SuiteIterator(Suite:Class, bridge:CallbackBridge=null) {
17
- list = getTestClasses(Suite, bridge);
14
+ public function SuiteIterator(Suite:Class) {
15
+ list = getTestClasses(Suite);
18
16
  }
19
17
 
20
- private function getTestClasses(Suite:Class, bridge:CallbackBridge=null):Array {
21
- if(bridge == null) bridge = new CallbackBridge();
22
-
23
- var reflection:Reflection = Reflection.create(Suite);
18
+ private function getTestClasses(Suite:Class):Array {
19
+ var reflection:Reflection = Reflection.create(Suite);
24
20
 
25
21
  if(!isSuite(reflection) && isTest(reflection)) {
26
22
  return [Suite];
@@ -31,16 +27,24 @@ package asunit.framework {
31
27
  var response:Array = [];
32
28
  for each(variable in reflection.variables) {
33
29
  TestConstructor = Class(getDefinitionByName(variable.type));
34
- if(isSuite(Reflection.create(TestConstructor))) {
35
- response = response.concat( getTestClasses(TestConstructor, bridge) );
36
- }
37
- else if(bridge.shouldRunTest(TestConstructor)) {
38
- response.push(TestConstructor);
30
+ if(isSuite(Reflection.create(TestConstructor))) {
31
+ var testClasses:Array = getTestClasses(TestConstructor);
32
+ for each(var testClass:Class in testClasses) {
33
+ pushIfNotInArray(testClass, response);
34
+ }
35
+ }
36
+ else {
37
+ pushIfNotInArray(TestConstructor, response)
39
38
  }
40
39
  }
41
40
  response.sort();
42
41
  return response;
43
- }
42
+ }
43
+
44
+ private function pushIfNotInArray(item:Object, array:Array):void {
45
+ if (array.indexOf(item) >= 0) return;
46
+ array[array.length] = item;
47
+ }
44
48
 
45
49
  public function get length():uint {
46
50
  return list.length;
@@ -58,7 +62,9 @@ package asunit.framework {
58
62
  return list[index] != null;
59
63
  }
60
64
 
61
- // Returns a Class reference:
65
+ /**
66
+ * Returns a test Class.
67
+ */
62
68
  public function next():* {
63
69
  return list[index++];
64
70
  }
@@ -44,8 +44,7 @@ package asunit.framework {
44
44
  }
45
45
 
46
46
  protected function addChild(child:DisplayObject):DisplayObject {
47
- context.addChild(child);
48
- return child;
47
+ return context.addChild(child);
49
48
  }
50
49
 
51
50
  protected function removeChild(child:DisplayObject):DisplayObject {
@@ -71,6 +70,12 @@ package asunit.framework {
71
70
  Assert.assertThrows(errorType, block);
72
71
  }
73
72
 
73
+ protected function assertThrowsWithMessage(errorType:Class,
74
+ errorMessage:String,
75
+ block:Function):void {
76
+ Assert.assertThrowsWithMessage(errorType, errorMessage, block);
77
+ }
78
+
74
79
  protected function assertEquals(...args:Array):void {
75
80
  Assert.assertEquals.apply(null, args);
76
81
  }
@@ -92,7 +97,7 @@ package asunit.framework {
92
97
  }
93
98
 
94
99
  protected function assertEqualsFloat(...args:Array):void {
95
- Assert.assertEquals.apply(null, args);
100
+ Assert.assertEqualsFloat.apply(null, args);
96
101
  }
97
102
 
98
103
  protected function assertEqualsArrays(...args:Array):void {
@@ -1,29 +1,34 @@
1
1
  package asunit.printers {
2
2
  import asunit.framework.ITestFailure;
3
3
  import asunit.framework.ITestWarning;
4
-
5
4
  import asunit.framework.IResult;
6
5
  import asunit.framework.IRunListener;
7
6
  import asunit.framework.ITestSuccess;
8
7
  import asunit.framework.Method;
9
- import asunit.framework.TestObserver;
10
8
 
11
9
  import flash.events.Event;
12
10
  import flash.events.IOErrorEvent;
13
11
  import flash.events.SecurityErrorEvent;
14
- import flash.net.XMLSocket;
15
12
  import flash.utils.getQualifiedClassName;
13
+ import flash.net.XMLSocket;
16
14
 
17
- public class FlashBuilderPrinter implements IRunListener, TestObserver {
18
- protected var projectName:String;
19
- protected var contextName:String;
20
- protected var messageQueue:Array;
15
+ /**
16
+ * FlashBuilderPrinter should connect to the running Flash Builder test result
17
+ * view over an XMLSocket and send it test results as they accumulate.
18
+ */
19
+ public class FlashBuilderPrinter extends XMLPrinter {
20
+
21
21
  protected var socket:XMLSocket;
22
-
22
+
23
23
  public function FlashBuilderPrinter(projectName:String = '', contextName:String = '') {
24
- this.projectName = projectName;
25
- this.contextName = contextName;
26
- messageQueue = [];
24
+ testPrefix = null;
25
+ testSuffix = null;
26
+ traceResults = false;
27
+ super(projectName, contextName);
28
+ connectToSocket();
29
+ }
30
+
31
+ protected function connectToSocket():void {
27
32
  socket = new XMLSocket();
28
33
  socket.addEventListener(Event.CONNECT, onConnect);
29
34
  socket.addEventListener(IOErrorEvent.IO_ERROR, onErrorEvent);
@@ -32,41 +37,8 @@ package asunit.printers {
32
37
  connect();
33
38
  }
34
39
 
35
- public function onRunStarted():void {
36
- sendMessage("<startTestRun totalTestCount='0' projectName='" + projectName
37
- + "' contextName='" + contextName +"' />");
38
- }
39
-
40
- public function onTestStarted(test:Object):void {
41
- }
42
-
43
- public function onTestCompleted(test:Object):void {
44
- }
45
-
46
- // works for both errors and failures
47
- public function onTestFailure(failure:ITestFailure):void {
48
- sendMessage(getFailureMessage(failure));
49
- }
50
-
51
- public function onTestSuccess(success:ITestSuccess):void {
52
- var xmlMessageSuccess:String = "<testCase name='" + success.method
53
- + "' testSuite='" + getQualifiedClassName(success.test) + "' status='success'/>";
54
- sendMessage(xmlMessageSuccess);
55
- }
56
-
57
- public function onTestIgnored(method:Method):void {
58
- var xmlMessageIgnore:String = "<testCase name='" + method.name
59
- + "' testSuite='" + getQualifiedClassName(method.scope) + "' status='ignore'/>";
60
- sendMessage(xmlMessageIgnore);
61
- }
62
-
63
- public function onWarning(warning:ITestWarning):void {
64
- //TODO: is there any way to send a warning to Flash Builder?
65
- }
66
-
67
- public function onRunCompleted(result:IResult):void {
68
- sendMessage('<endOfTestRun/>');
69
- socket.close();
40
+ protected function onErrorEvent(event:Event):void {
41
+ trace('FlashBuilderPrinter::onErrorEvent() - event: ' + event);
70
42
  }
71
43
 
72
44
  protected function connect(ip:String = '127.0.0.1', port:uint = 8765):void {
@@ -77,6 +49,11 @@ package asunit.printers {
77
49
  trace('## Error connecting to Flash Builder socket: ' + e.message);
78
50
  }
79
51
  }
52
+
53
+ override public function onRunCompleted(result:IResult):void {
54
+ super.onRunCompleted(result);
55
+ socket.close();
56
+ }
80
57
 
81
58
  protected function onConnect(event:Event):void {
82
59
  sendQueuedMessages();
@@ -88,47 +65,12 @@ package asunit.printers {
88
65
  }
89
66
  }
90
67
 
91
- protected function sendMessage(message:String):void {
68
+ override protected function sendMessage(message:String):void {
92
69
  if (!socket.connected) {
93
70
  messageQueue.push(message);
94
71
  return;
95
72
  }
96
73
  socket.send(message);
97
- //trace('+++++++++ sendMessage() - \n' + message + '\n');
98
74
  }
99
-
100
- protected function getFailureMessage(failure:ITestFailure):String {
101
- var status:String = failure.isFailure ? 'failure' : 'error';
102
- var xml:String =
103
- "<testCase name='" + failure.failedMethod
104
- + "' testSuite='" + getQualifiedClassName(failure.failedTest)
105
- + "' status='" + status + "'>"
106
- + "<failure type='" + getQualifiedClassName(failure.thrownException) + "' >"
107
-
108
- + "<messageInfo>" + xmlEscapeMessage(failure.exceptionMessage)
109
- + "</messageInfo>"
110
-
111
- + "<stackTraceInfo>" + xmlEscapeMessage(failure.thrownException.getStackTrace())
112
- + "</stackTraceInfo>"
113
-
114
- + "</failure>"
115
- + "</testCase>";
116
-
117
- return xml;
118
- }
119
-
120
- protected function onErrorEvent(event:Event):void {
121
- trace('FlashBuilderPrinter::onErrorEvent() - event: ' + event);
122
- //throw new Error('FlashBuilderPrinter::onErrorEvent() - event: ' + event);
123
- }
124
-
125
- protected static function xmlEscapeMessage(message:String):String {
126
- if (!message) return '';
127
-
128
- var escape:XML = <escape/>;
129
- escape.setChildren( message );
130
- return escape.children()[0].toXMLString();
131
- }
132
-
133
- }
75
+ }
134
76
  }
@@ -6,9 +6,8 @@ package asunit.printers {
6
6
  import asunit.framework.IRunListener;
7
7
  import asunit.framework.ITestSuccess;
8
8
  import asunit.framework.Method;
9
- import asunit.framework.TestObserver;
10
9
 
11
- public class FlashDevelopPrinter implements IRunListener, TestObserver {
10
+ public class FlashDevelopPrinter implements IRunListener {
12
11
  protected static const localPathPattern:RegExp =
13
12
  /([A-Z]:\\[^\/:\*\?<>\|]+\.\w{2,6})|(\\{2}[^\/:\*\?<>\|]+\.\w{2,6})/g;
14
13
 
@@ -0,0 +1,181 @@
1
+ package asunit.printers {
2
+ import asunit.framework.IResult;
3
+ import asunit.framework.IRunListener;
4
+ import asunit.framework.ITestFailure;
5
+ import asunit.framework.ITestSuccess;
6
+ import asunit.framework.ITestWarning;
7
+ import asunit.framework.Method;
8
+
9
+ import flash.events.DataEvent;
10
+ import flash.events.Event;
11
+ import flash.events.EventDispatcher;
12
+ import flash.events.IOErrorEvent;
13
+ import flash.events.SecurityErrorEvent;
14
+ import flash.events.TimerEvent;
15
+ import flash.net.XMLSocket;
16
+ import flash.system.fscommand;
17
+ import flash.utils.Timer;
18
+ import flash.utils.getQualifiedClassName;
19
+ import flash.utils.getTimer;
20
+
21
+ public class FlexUnitCIPrinter extends EventDispatcher implements IRunListener
22
+ {
23
+ protected static const DEFAULT_SERVER:String = "127.0.0.1";
24
+ protected static const DEFAULT_PORT:uint = 1024;
25
+
26
+ public var port:uint;
27
+ public var server:String; //this is local host. same machine
28
+
29
+ private static const SUCCESS:String = "success";
30
+ private static const ERROR:String = "error";
31
+ private static const FAILURE:String = "failure";
32
+ private static const IGNORE:String = "ignore";
33
+
34
+ private static const START_OF_TEST_RUN_ACK : String = "<startOfTestRunAck/>";
35
+ private static const END_OF_TEST_ACK : String ="<endOfTestRunAck/>";
36
+ private static const END_OF_TEST_RUN : String = "<endOfTestRun/>";
37
+
38
+ private var socket:XMLSocket;
39
+ private var connectTimeout:Timer;
40
+
41
+ protected var messageQueue:Array;
42
+
43
+ private var startTime : int;
44
+
45
+ public function FlexUnitCIPrinter()
46
+ {
47
+ this.port = port;
48
+ this.server = server;
49
+ messageQueue = [];
50
+
51
+ socket = new XMLSocket();
52
+ socket.addEventListener(Event.CONNECT, onConnect);
53
+ socket.addEventListener(DataEvent.DATA, onData);
54
+ socket.addEventListener(IOErrorEvent.IO_ERROR, onErrorEvent);
55
+ socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onErrorEvent);
56
+ socket.addEventListener(Event.CLOSE, onErrorEvent);
57
+
58
+ connectTimeout = new Timer(5000, 1);
59
+ connectTimeout.addEventListener(TimerEvent.TIMER_COMPLETE, onConnectTimeout);
60
+ connectTimeout.start();
61
+
62
+ connect();
63
+ }
64
+
65
+ protected function connect(ip:String = DEFAULT_SERVER, port:uint = DEFAULT_PORT):void {
66
+ try {
67
+ socket.connect(ip, port);
68
+ }
69
+ catch (e:Error) {
70
+ trace('## Error connecting to socket: ' + e.message);
71
+ }
72
+ }
73
+
74
+ private function onConnectTimeout(event:TimerEvent):void {
75
+ throw new Error('Timed out waiting to connect to socket.');
76
+ }
77
+
78
+ public function onTestIgnored(method:Method):void {
79
+ var xmlMessageIgnore:String = "<testcase classname='" + getQualifiedClassName(method.scope)
80
+ + "' name='" + method.name + "' status='"+IGNORE+"'>"
81
+ + "<skipped />"
82
+ + "</testcase>";
83
+ sendMessage(xmlMessageIgnore);
84
+ }
85
+
86
+ protected static function xmlEscapeMessage(message:String):String {
87
+ if (!message) return '';
88
+
89
+ var escape:XML = <escape/>;
90
+ escape.setChildren( message );
91
+ return escape.children()[0].toXMLString();
92
+ }
93
+
94
+ public function onTestFailure(failure:ITestFailure):void {
95
+ sendMessage(getFailureMessage(failure));
96
+ }
97
+
98
+ protected function getFailureMessage(failure:ITestFailure):String {
99
+ var status:String = failure.isFailure ? FAILURE : ERROR;
100
+ // var stackTrace:String = xmlEscapeMessage(failure.thrownException.getStackTrace());
101
+ var stackTrace:String = failure.thrownException.getStackTrace();
102
+ var xml:String =
103
+ "<testcase classname='" + getQualifiedClassName(failure.failedTest)
104
+ + "' name='" + failure.failedMethod
105
+ + "' time='0.000' status='" + status + "'>"
106
+
107
+ + "<error message='" + xmlEscapeMessage(failure.exceptionMessage)
108
+ + "' type='"+ getQualifiedClassName(failure.thrownException) +"' >"
109
+ + "<![CDATA[" + stackTrace + "]]>"
110
+ + "</error>"
111
+
112
+ + "</testcase>";
113
+
114
+ return xml;
115
+ }
116
+
117
+ protected function sendMessage(message:String):void {
118
+ if (!socket.connected) {
119
+ messageQueue.push(message);
120
+ return;
121
+ }
122
+ socket.send(message);
123
+ }
124
+
125
+ protected function onConnect(event:Event):void {
126
+ connectTimeout.stop();
127
+ sendQueuedMessages();
128
+ }
129
+
130
+ protected function sendQueuedMessages():void {
131
+ while (messageQueue.length) {
132
+ sendMessage(messageQueue.shift());
133
+ }
134
+ }
135
+
136
+ private function onData( event : DataEvent ) : void
137
+ {
138
+ if (event.data == END_OF_TEST_ACK) {
139
+ exit();
140
+ }
141
+ }
142
+
143
+ protected function onErrorEvent(event:Event):void {
144
+ trace('FlexUnitCIPrinter::onErrorEvent() - event: ' + event);
145
+ //throw new Error('FlashBuilderPrinter::onErrorEvent() - event: ' + event);
146
+ }
147
+
148
+ public function onRunStarted():void {
149
+ }
150
+
151
+ public function onTestStarted(test:Object):void {
152
+ startTime = getTimer();
153
+ }
154
+
155
+ public function onTestCompleted(test:Object):void {
156
+ // testTimes.push({test:test, duration:duration});
157
+ }
158
+
159
+ public function onTestSuccess(success:ITestSuccess):void
160
+ {
161
+ //TODO: move test time into ITestSuccess
162
+ var duration:Number = (getTimer() - startTime) / 1000;
163
+ var xmlMessageSuccess:String = "<testcase classname='" + getQualifiedClassName(success.test)
164
+ + "' name='" + success.method + "' time='0.000' status='"+SUCCESS+"'/>";
165
+ sendMessage(xmlMessageSuccess);
166
+ }
167
+
168
+ public function onRunCompleted(result:IResult):void {
169
+ sendMessage(END_OF_TEST_RUN);
170
+ }
171
+
172
+ protected function exit():void
173
+ {
174
+ socket.close();
175
+ fscommand("quit");
176
+ }
177
+
178
+ public function onWarning(warning:ITestWarning) : void {
179
+ }
180
+ }
181
+ }