OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Classes and methods for executing tests. | 6 * Classes and methods for executing tests. |
7 * | 7 * |
8 * This module includes: | 8 * This module includes: |
9 * - Managing parallel execution of tests, including timeout checks. | 9 * - Managing parallel execution of tests, including timeout checks. |
10 * - Evaluating the output of each test as pass/fail/crash/timeout. | 10 * - Evaluating the output of each test as pass/fail/crash/timeout. |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 configurationDir, | 265 configurationDir, |
266 _getEnvironment(dartFlags)); | 266 _getEnvironment(dartFlags)); |
267 | 267 |
268 static Map _getEnvironment(List<String> dartFlags) { | 268 static Map _getEnvironment(List<String> dartFlags) { |
269 var needDartFlags = dartFlags != null && dartFlags.length > 0; | 269 var needDartFlags = dartFlags != null && dartFlags.length > 0; |
270 | 270 |
271 var env = null; | 271 var env = null; |
272 if (needDartFlags) { | 272 if (needDartFlags) { |
273 env = new Map<String, String>(); | 273 env = new Map<String, String>(); |
274 env['DART_FLAGS'] = dartFlags.join(" "); | 274 env['DART_FLAGS'] = dartFlags.join(" "); |
| 275 env['DART_FORWARDING_PRINT'] = '1'; |
275 } | 276 } |
276 | 277 |
277 return env; | 278 return env; |
278 } | 279 } |
279 | 280 |
280 static List<String> _getArguments(List<String> options, String htmlFile) { | 281 static List<String> _getArguments(List<String> options, String htmlFile) { |
281 var arguments = new List.from(options); | 282 var arguments = new List.from(options); |
282 arguments.add(htmlFile); | 283 arguments.add(htmlFile); |
283 return arguments; | 284 return arguments; |
284 } | 285 } |
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 if (hasCrashed) return Expectation.CRASH; | 795 if (hasCrashed) return Expectation.CRASH; |
795 if (hasTimedOut) return Expectation.TIMEOUT; | 796 if (hasTimedOut) return Expectation.TIMEOUT; |
796 | 797 |
797 var outcome = _getOutcome(); | 798 var outcome = _getOutcome(); |
798 | 799 |
799 if (testCase.info != null && testCase.info.hasRuntimeError) { | 800 if (testCase.info != null && testCase.info.hasRuntimeError) { |
800 if (!outcome.canBeOutcomeOf(Expectation.RUNTIME_ERROR)) { | 801 if (!outcome.canBeOutcomeOf(Expectation.RUNTIME_ERROR)) { |
801 return Expectation.MISSING_RUNTIME_ERROR; | 802 return Expectation.MISSING_RUNTIME_ERROR; |
802 } | 803 } |
803 } | 804 } |
804 | |
805 if (testCase.isNegative) { | 805 if (testCase.isNegative) { |
806 if (outcome.canBeOutcomeOf(Expectation.FAIL)) return Expectation.PASS; | 806 if (outcome.canBeOutcomeOf(Expectation.FAIL)) return Expectation.PASS; |
807 return Expectation.FAIL; | 807 return Expectation.FAIL; |
808 } | 808 } |
809 return outcome; | 809 return outcome; |
810 } | 810 } |
811 | 811 |
812 bool get successful => canRunDependendCommands; | 812 bool get successful => canRunDependendCommands; |
813 | 813 |
814 bool get canRunDependendCommands { | 814 bool get canRunDependendCommands { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 stdout, 0, | 907 stdout, 0, |
908 stdout.length); | 908 stdout.length); |
909 } | 909 } |
910 } | 910 } |
911 return true; | 911 return true; |
912 } | 912 } |
913 | 913 |
914 bool get _browserTestFailure { | 914 bool get _browserTestFailure { |
915 // Browser tests fail unless stdout contains | 915 // Browser tests fail unless stdout contains |
916 // 'Content-Type: text/plain' followed by 'PASS'. | 916 // 'Content-Type: text/plain' followed by 'PASS'. |
917 bool has_content_type = false; | 917 bool hasContentType = false; |
918 var stdoutLines = decodeUtf8(super.stdout).split("\n"); | 918 var stdoutLines = decodeUtf8(super.stdout).split("\n"); |
| 919 var containsFail = false; |
| 920 var containsPass = false; |
919 for (String line in stdoutLines) { | 921 for (String line in stdoutLines) { |
920 switch (line) { | 922 switch (line) { |
921 case 'Content-Type: text/plain': | 923 case 'Content-Type: text/plain': |
922 has_content_type = true; | 924 hasContentType = true; |
| 925 break; |
| 926 case 'FAIL': |
| 927 if (hasContentType) { |
| 928 containsFail = true; |
| 929 } |
923 break; | 930 break; |
924 case 'PASS': | 931 case 'PASS': |
925 if (has_content_type) { | 932 if (hasContentType) { |
926 if (exitCode != 0) { | 933 containsPass = true; |
927 print("Warning: All tests passed, but exitCode != 0 ($this)"); | |
928 } | |
929 return (exitCode != 0 && !hasCrashed); | |
930 } | 934 } |
931 break; | 935 break; |
932 } | 936 } |
933 } | 937 } |
| 938 if (hasContentType) { |
| 939 if (containsFail && containsPass) { |
| 940 DebugLogger.warning("Test had 'FAIL' and 'PASS' in stdout. ($command)"); |
| 941 } |
| 942 if (!containsFail && !containsPass) { |
| 943 DebugLogger.warning("Test had neither 'FAIL' nor 'PASS' in stdout. " |
| 944 "($command)"); |
| 945 return true; |
| 946 } |
| 947 if (containsFail) { |
| 948 return true; |
| 949 } |
| 950 assert(containsPass); |
| 951 if (exitCode != 0) { |
| 952 DebugLogger.warning("All tests passed, but exitCode != 0. " |
| 953 "($command)"); |
| 954 } |
| 955 return (exitCode != 0 && !hasCrashed); |
| 956 } |
| 957 DebugLogger.warning("Couldn't find 'Content-Type: text/plain' in output. " |
| 958 "($command)."); |
934 return true; | 959 return true; |
935 } | 960 } |
936 } | 961 } |
937 | 962 |
938 class HTMLBrowserCommandOutputImpl extends BrowserCommandOutputImpl { | 963 class HTMLBrowserCommandOutputImpl extends BrowserCommandOutputImpl { |
939 HTMLBrowserCommandOutputImpl( | 964 HTMLBrowserCommandOutputImpl( |
940 command, | 965 command, |
941 exitCode, | 966 exitCode, |
942 timedOut, | 967 timedOut, |
943 stdout, | 968 stdout, |
(...skipping 1430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2374 } | 2399 } |
2375 } | 2400 } |
2376 | 2401 |
2377 void eventAllTestsDone() { | 2402 void eventAllTestsDone() { |
2378 for (var listener in _eventListener) { | 2403 for (var listener in _eventListener) { |
2379 listener.allDone(); | 2404 listener.allDone(); |
2380 } | 2405 } |
2381 _allDone(); | 2406 _allDone(); |
2382 } | 2407 } |
2383 } | 2408 } |
OLD | NEW |