From 8bcf6f5ef9353591e4113b5ac155d5c393ce625b Mon Sep 17 00:00:00 2001 From: ricklon Date: Thu, 30 Sep 2010 21:56:17 -0400 Subject: [PATCH 01/37] minor commit for test --- hardware/arduino/cores/arduino/HardwareSerial.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardware/arduino/cores/arduino/HardwareSerial.h b/hardware/arduino/cores/arduino/HardwareSerial.h index 29898b9535a..c308e71ec76 100755 --- a/hardware/arduino/cores/arduino/HardwareSerial.h +++ b/hardware/arduino/cores/arduino/HardwareSerial.h @@ -2,6 +2,8 @@ HardwareSerial.h - Hardware serial library for Wiring Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either From 2159442259d878b02f619bb49913eab32f9036c4 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 3 Oct 2010 15:16:32 -0400 Subject: [PATCH 02/37] Test samples added. --- test/examples/ex1.txt | 10 ++++++++ test/examples/ex2.txt | 15 ++++++++++++ test/examples/ex3.txt | 10 ++++++++ test/examples/ex4.txt | 30 ++++++++++++++++++++++++ test/examples/ex5.txt | 24 ++++++++++++++++++++ test/examples/tmp.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 142 insertions(+) create mode 100644 test/examples/ex1.txt create mode 100644 test/examples/ex2.txt create mode 100644 test/examples/ex3.txt create mode 100644 test/examples/ex4.txt create mode 100644 test/examples/ex5.txt create mode 100644 test/examples/tmp.txt diff --git a/test/examples/ex1.txt b/test/examples/ex1.txt new file mode 100644 index 00000000000..38c6b6a0578 --- /dev/null +++ b/test/examples/ex1.txt @@ -0,0 +1,10 @@ +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok +test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok +test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok +test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok + +---------------------------------------------------------------------- +Ran 4 tests in 0.016s + +OK + diff --git a/test/examples/ex2.txt b/test/examples/ex2.txt new file mode 100644 index 00000000000..9b0a32359f0 --- /dev/null +++ b/test/examples/ex2.txt @@ -0,0 +1,15 @@ +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok +test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... FAIL +====================================================================== +FAIL: to_roman should fail with large input +---------------------------------------------------------------------- +Traceback (most recent call last): + File "romantest2.py", line 78, in test_too_large + self.assertRaises(roman2.OutOfRangeError, roman2.to_roman, 4000) +AssertionError: OutOfRangeError not raised by to_roman + +---------------------------------------------------------------------- +Ran 2 tests in 0.016s + +FAILED (failures=1) + diff --git a/test/examples/ex3.txt b/test/examples/ex3.txt new file mode 100644 index 00000000000..17ca822662c --- /dev/null +++ b/test/examples/ex3.txt @@ -0,0 +1,10 @@ +test_to_roman_known_values (__main__.KnownValues) +to_roman should give known result with known input ... ok +test_too_large (__main__.ToRomanBadInput) +to_roman should fail with large input ... ok + +---------------------------------------------------------------------- +Ran 2 tests in 0.000s + +OK + diff --git a/test/examples/ex4.txt b/test/examples/ex4.txt new file mode 100644 index 00000000000..dcebaca5964 --- /dev/null +++ b/test/examples/ex4.txt @@ -0,0 +1,30 @@ +test_to_roman_known_values (__main__.KnownValues) +to_roman should give known result with known input ... ok +test_negative (__main__.ToRomanBadInput) +to_roman should fail with negative input ... FAIL +test_too_large (__main__.ToRomanBadInput) +to_roman should fail with large input ... ok +test_zero (__main__.ToRomanBadInput) +to_roman should fail with 0 input ... FAIL + +====================================================================== +FAIL: to_roman should fail with negative input +---------------------------------------------------------------------- +Traceback (most recent call last): + File "romantest3.py", line 86, in test_negative + self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, -1) +AssertionError: OutOfRangeError not raised by to_roman + +====================================================================== +FAIL: to_roman should fail with 0 input +---------------------------------------------------------------------- +Traceback (most recent call last): + File "romantest3.py", line 82, in test_zero + self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, 0) +AssertionError: OutOfRangeError not raised by to_roman + +---------------------------------------------------------------------- +Ran 4 tests in 0.000s + +FAILED (failures=2) + diff --git a/test/examples/ex5.txt b/test/examples/ex5.txt new file mode 100644 index 00000000000..34c2c1b3123 --- /dev/null +++ b/test/examples/ex5.txt @@ -0,0 +1,24 @@ +test_to_roman_known_values (__main__.KnownValues) +to_roman should give known result with known input ... ok +test_negative (__main__.ToRomanBadInput) +to_roman should fail with negative input ... ok +test_non_integer (__main__.ToRomanBadInput) +to_roman should fail with non-integer input ... FAIL +test_too_large (__main__.ToRomanBadInput) +to_roman should fail with large input ... ok +test_zero (__main__.ToRomanBadInput) +to_roman should fail with 0 input ... ok + +====================================================================== +FAIL: to_roman should fail with non-integer input +---------------------------------------------------------------------- +Traceback (most recent call last): + File "romantest4.py", line 90, in test_non_integer + self.assertRaises(roman4.NotIntegerError, roman4.to_roman, 0.5) +AssertionError: NotIntegerError not raised by to_roman + +---------------------------------------------------------------------- +Ran 5 tests in 0.000s + +FAILED (failures=1) + diff --git a/test/examples/tmp.txt b/test/examples/tmp.txt new file mode 100644 index 00000000000..17b817d8039 --- /dev/null +++ b/test/examples/tmp.txt @@ -0,0 +1,53 @@ +Mark, + +Long story short. The format that you described, and the one I think is best matches our goal is the Python Unittest format. I think it's easily readable and parseable. The following summary comes from the Doug Hellman: http://www.doughellmann.com/PyMOTW/unittest/, Dive Into Python3 Unit Testing: http://diveintopython3.org/unit-testing.html, and UnitTest docs: http://docs.python.org/library/unittest.html + +Tests have 3 possible outcomes: + +ok +The test passes. +FAIL +The test does not pass, and raises an AssertionError exception. +ERROR +The test raises an exception other than AssertionError. +There is no explicit way to cause a test to “pass”, so a test’s status depends on the presence (or absence) of an exception. + +//**Examples of each kind of variation: All use the verbose format which is better for us******* +A test case is, space seperated: +Name of test, Sub Routine invoked, Description, ..., [ok|fail|error] +//******************example of success cases*********** + +you@localhost:~/diveintopython3/examples$ python3 romantest3.py -v +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok ---------------------------------------------------------------------- Ran 4 tests in 0.016s OK + + +//******One success, One Failure********************* + +you@localhost:~/diveintopython3/examples$ python3 romantest2.py -v +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... FAIL ====================================================================== FAIL: to_roman should fail with large input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest2.py", line 78, in test_too_large self.assertRaises(roman2.OutOfRangeError, roman2.to_roman, 4000) AssertionError: OutOfRangeError not raised by to_roman ---------------------------------------------------------------------- Ran 2 tests in 0.016s FAILED (failures=1) + +//***2 Successes************* +you@localhost:~/diveintopython3/examples$ python3 romantest2.py -v +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK + +//****************4 tests, 2 failures** +you@localhost:~/diveintopython3/examples$ python3 romantest3.py -v +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... FAIL test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... FAIL ====================================================================== FAIL: to_roman should fail with negative input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest3.py", line 86, in test_negative self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, -1) AssertionError: OutOfRangeError not raised by to_roman ====================================================================== FAIL: to_roman should fail with 0 input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest3.py", line 82, in test_zero self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, 0) AssertionError: OutOfRangeError not raised by to_roman ---------------------------------------------------------------------- Ran 4 tests in 0.000s FAILED (failures=2) + + +************************ + +you@localhost:~/diveintopython3/examples$ python3 romantest4.py -v +test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok test_non_integer (__main__.ToRomanBadInput) to_roman should fail with non-integer input ... FAIL test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok ====================================================================== FAIL: to_roman should fail with non-integer input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest4.py", line 90, in test_non_integer self.assertRaises(roman4.NotIntegerError, roman4.to_roman, 0.5) AssertionError: NotIntegerError not raised by to_roman ---------------------------------------------------------------------- Ran 5 tests in 0.000s FAILED (failures=1) + +****Done with examples. **************** +Testing definitions: +test fixture +A test fixture represents the preparation needed to perform one or more tests, and any associate cleanup actions. This may involve, for example, creating temporary or proxy databases, directories, or starting a server process. +test case +A test case is the smallest unit of testing. It checks for a specific response to a particular set of inputs. unittest provides a base class, TestCase, which may be used to create new test cases. +test suite +A test suite is a collection of test cases, test suites, or both. It is used to aggregate tests that should be executed together. +test runner +A test runner is a component which orchestrates the execution of tests and provides the outcome to the user. The runner may use a graphical interface, a textual interface, or return a special value to indicate the results of executing the tests. +:wq! From 223f300bf578523a703140acac81cf42e0ed5c58 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 3 Oct 2010 23:19:26 -0400 Subject: [PATCH 03/37] Added sample result of Arduino test. --- test/examples/arduino.test | 36 ++++++++++++++++++++++++++ test/examples/tmp.txt | 53 -------------------------------------- 2 files changed, 36 insertions(+), 53 deletions(-) create mode 100644 test/examples/arduino.test delete mode 100644 test/examples/tmp.txt diff --git a/test/examples/arduino.test b/test/examples/arduino.test new file mode 100644 index 00000000000..41baca1438d --- /dev/null +++ b/test/examples/arduino.test @@ -0,0 +1,36 @@ +info.MANUFACTURER = Arduino ... ok +info.CPU-NAME = ATmega2560 ... ok +info.GCC-Version = 4.3.2 ... ok +info.AVR-LibC-Ver = 1.6.4 ... ok +info.Compiled-date = Oct 3 2010 ... ok +Serial1 ... ok +Serial2 ... ok +Serial3 ... ok +PIN_IN_OUT 2/3 1-PWM 2-PWM ... ok +PIN_IN_OUT 4/5 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 6/7 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 8/9 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 10/11 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 12/13 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 14/15 ... ok +PIN_IN_OUT 16/17 ... ok +PIN_IN_OUT 18/19 ... ok +PIN_IN_OUT 20/21 ... FAIL +PIN_IN_OUT 22/23 ... FAIL +PIN_IN_OUT 24/25 ... FAIL +PIN_IN_OUT 26/27 ... FAIL +PIN_IN_OUT 28/29 ... FAIL +PIN_IN_OUT 30/31 ... FAIL +PIN_IN_OUT 32/33 ... FAIL +PIN_IN_OUT 34/35 ... FAIL +PIN_IN_OUT 36/37 ... FAIL +PIN_IN_OUT 38/39 ... FAIL +PIN_IN_OUT 40/41 ... FAIL +PIN_IN_OUT 42/43 ... FAIL +PIN_IN_OUT 44/45 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 46/47 1-PWM ... ok +PIN_IN_OUT 48/49 ... FAIL +---------------------------- +Ran 27 tests in 22.170s + +FALIED (failures=19) diff --git a/test/examples/tmp.txt b/test/examples/tmp.txt deleted file mode 100644 index 17b817d8039..00000000000 --- a/test/examples/tmp.txt +++ /dev/null @@ -1,53 +0,0 @@ -Mark, - -Long story short. The format that you described, and the one I think is best matches our goal is the Python Unittest format. I think it's easily readable and parseable. The following summary comes from the Doug Hellman: http://www.doughellmann.com/PyMOTW/unittest/, Dive Into Python3 Unit Testing: http://diveintopython3.org/unit-testing.html, and UnitTest docs: http://docs.python.org/library/unittest.html - -Tests have 3 possible outcomes: - -ok -The test passes. -FAIL -The test does not pass, and raises an AssertionError exception. -ERROR -The test raises an exception other than AssertionError. -There is no explicit way to cause a test to “pass”, so a test’s status depends on the presence (or absence) of an exception. - -//**Examples of each kind of variation: All use the verbose format which is better for us******* -A test case is, space seperated: -Name of test, Sub Routine invoked, Description, ..., [ok|fail|error] -//******************example of success cases*********** - -you@localhost:~/diveintopython3/examples$ python3 romantest3.py -v -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok ---------------------------------------------------------------------- Ran 4 tests in 0.016s OK - - -//******One success, One Failure********************* - -you@localhost:~/diveintopython3/examples$ python3 romantest2.py -v -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... FAIL ====================================================================== FAIL: to_roman should fail with large input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest2.py", line 78, in test_too_large self.assertRaises(roman2.OutOfRangeError, roman2.to_roman, 4000) AssertionError: OutOfRangeError not raised by to_roman ---------------------------------------------------------------------- Ran 2 tests in 0.016s FAILED (failures=1) - -//***2 Successes************* -you@localhost:~/diveintopython3/examples$ python3 romantest2.py -v -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK - -//****************4 tests, 2 failures** -you@localhost:~/diveintopython3/examples$ python3 romantest3.py -v -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... FAIL test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... FAIL ====================================================================== FAIL: to_roman should fail with negative input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest3.py", line 86, in test_negative self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, -1) AssertionError: OutOfRangeError not raised by to_roman ====================================================================== FAIL: to_roman should fail with 0 input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest3.py", line 82, in test_zero self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, 0) AssertionError: OutOfRangeError not raised by to_roman ---------------------------------------------------------------------- Ran 4 tests in 0.000s FAILED (failures=2) - - -************************ - -you@localhost:~/diveintopython3/examples$ python3 romantest4.py -v -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok test_non_integer (__main__.ToRomanBadInput) to_roman should fail with non-integer input ... FAIL test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok ====================================================================== FAIL: to_roman should fail with non-integer input ---------------------------------------------------------------------- Traceback (most recent call last): File "romantest4.py", line 90, in test_non_integer self.assertRaises(roman4.NotIntegerError, roman4.to_roman, 0.5) AssertionError: NotIntegerError not raised by to_roman ---------------------------------------------------------------------- Ran 5 tests in 0.000s FAILED (failures=1) - -****Done with examples. **************** -Testing definitions: -test fixture -A test fixture represents the preparation needed to perform one or more tests, and any associate cleanup actions. This may involve, for example, creating temporary or proxy databases, directories, or starting a server process. -test case -A test case is the smallest unit of testing. It checks for a specific response to a particular set of inputs. unittest provides a base class, TestCase, which may be used to create new test cases. -test suite -A test suite is a collection of test cases, test suites, or both. It is used to aggregate tests that should be executed together. -test runner -A test runner is a component which orchestrates the execution of tests and provides the outcome to the user. The runner may use a graphical interface, a textual interface, or return a special value to indicate the results of executing the tests. -:wq! From 49cf22d41837bbf0c08da7dd9f05b1e59c51df89 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Mon, 4 Oct 2010 01:20:45 -0400 Subject: [PATCH 04/37] Output fake testresults via Makefile for testing output with Buildbot. --- test/examples/Makefile | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/examples/Makefile diff --git a/test/examples/Makefile b/test/examples/Makefile new file mode 100644 index 00000000000..36179df5e6f --- /dev/null +++ b/test/examples/Makefile @@ -0,0 +1,22 @@ +#Makefile stub for test output simulation for testing the Buildbot make test fesature + +all: test + +test: test1 test2 test3 + +test1: + cat ex1.txt + +test2: + cat ex2.txt + +test3: + cat ex3.txt + +arduinotest: + cat arduino.test + + + + + From 7f56700a1a2e3c5b23b4a220f911fc1051f39886 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Mon, 4 Oct 2010 12:39:55 -0400 Subject: [PATCH 05/37] More test samples for buildbot. --- test/examples/Makefile | 6 + test/examples/ex6.txt | 53 + test/examples/ex7.txt | 2188 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2247 insertions(+) create mode 100644 test/examples/ex6.txt create mode 100644 test/examples/ex7.txt diff --git a/test/examples/Makefile b/test/examples/Makefile index 36179df5e6f..8d2d24f6b33 100644 --- a/test/examples/Makefile +++ b/test/examples/Makefile @@ -13,6 +13,12 @@ test2: test3: cat ex3.txt +test4: + cat ex6.txt + +test5: + cat ex7.txt + arduinotest: cat arduino.test diff --git a/test/examples/ex6.txt b/test/examples/ex6.txt new file mode 100644 index 00000000000..a6cffa00a16 --- /dev/null +++ b/test/examples/ex6.txt @@ -0,0 +1,53 @@ +=============================================================================== +[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testAsciiChange + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testNonUnicodeChange + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testUTF16Change + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testUnicodeChange + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_current_version + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_db_version_empty + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_db_version_int + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_is_current_empty + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_is_current_empty_upgrade + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_scheduler_name_uniqueness + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_upgrade_empty + +MySQLdb not installed +=============================================================================== +[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_upgrade_full + +MySQLdb not installed +------------------------------------------------------------------------------- +Ran 268 tests in 25.371s + +PASSED (skips=12, successes=256) + diff --git a/test/examples/ex7.txt b/test/examples/ex7.txt new file mode 100644 index 00000000000..ea687488bd8 --- /dev/null +++ b/test/examples/ex7.txt @@ -0,0 +1,2188 @@ +Running test-ztk-zope.testrunner +test-ztk-zope.testrunner failed with: +Running zope.testing.testrunner.layer.UnitTests tests: + Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds. + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-debugging-layer-setup.test + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 94, in testrunner-debugging-layer-setup.test +Failed example: + try: + zope.testrunner.run_internal( + ['--path', dir, '-Dvv', '--tests-pattern', 'tests2']) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +REPORT_NDIFF +Differences (ndiff with -expected +actual): + Running tests at level 1 + Running tests2.Layer1 tests: + Set up tests2.Layer1 in N.NNN seconds. + Running: + a_test (tests2) + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Running tests2.Layer2 tests: + Tear down tests2.Layer1 ... not supported + Running in a subprocess. + Set up tests2.Layer2 + ********************************************************************** + + Can't post-mortem debug when running a layer as a subprocess! + Try running layer 'tests2.Layer2' by itself. + + ********************************************************************** + + Traceback (most recent call last): + - ... + + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in run_layer + + setup_layer(options, layer, setup_layers) + + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in setup_layer + + layer.setUp() + + File "c:/temp/tmp96jkfi/TESTS-DIR/tests2.py", Line NNN, in setUp + raise ValueError + ValueError + + + Tests with errors: + - Layer: tests2.Layer2 + + runTest (zope.testing.testrunner.runner.SetUpLayerFailure) + Total: 1 tests, 0 failures, 1 errors in N.NNN seconds. + True + + +> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(22)test_set_trace1() +-> y = x +(Pdb) p x +1 +(Pdb) c + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-debugging.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 32, in testrunner-debugging.txt +Failed example: + try: testrunner.run_internal(defaults) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +Expected: + Running zope.testrunner.layer.UnitTests tests: + ... + > testrunner-ex/sample3/sampletests_d.py(NNN)test_set_trace1() + -> y = x + (Pdb) p x + 1 + (Pdb) c + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + ... + False +Got: + Running zope.testrunner.layer.UnitTests tests: + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + False + + +> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(42)f() +-> y = x +(Pdb) p x +1 +(Pdb) c + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-edge-cases.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 91, in testrunner-edge-cases.txt +Failed example: + try: testrunner.run_internal(defaults) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +Expected: + Running zope.testrunner.layer.UnitTests tests:... + > testrunner-ex/sample3/sampletests_d.py(NNN)f() + -> y = x + (Pdb) p x + 1 + (Pdb) c + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + ... + False +Got: + Running zope.testrunner.layer.UnitTests tests: + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-layers.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 130, in testrunner-layers.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running samplelayers.Layer1 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. + Running samplelayers.Layer11 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer111 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer111 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer111 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer112 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer112 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer112 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer12 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer121 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer121 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer121 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer122 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running zope.testrunner.layer.UnitTests tests: + Running in a subprocess. + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 156 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer1 in N.NNN seconds. + Total: 321 tests, 0 failures, 0 errors in N.NNN seconds. + False +Got: + Running samplelayers.Layer1 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. + Running samplelayers.Layer11 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer111 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer111 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer111 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer112 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer112 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer112 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer12 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer121 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer121 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer121 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer122 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer1 in N.NNN seconds. + Total: 165 tests, 0 failures, 0 errors in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-progress.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 18, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) + + 2/26 (7.7%) + + 3/26 (11.5%) + + 4/26 (15.4%) + + 5/26 (19.2%) + + 6/26 (23.1%) + + 7/26 (26.9%) + + 8/26 (30.8%) + + 9/26 (34.6%) + + 10/26 (38.5%) + + 11/26 (42.3%) + + 12/26 (46.2%) + + 13/26 (50.0%) + + 14/26 (53.8%) + + 15/26 (57.7%) + + 16/26 (61.5%) + + 17/26 (65.4%) + + 18/26 (69.2%) + + 19/26 (73.1%) + + 20/26 (76.9%) + + 21/26 (80.8%) + + 22/26 (84.6%) + + 23/26 (88.5%) + + 24/26 (92.3%) + + 25/26 (96.2%) + + 26/26 (100.0%) + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) 2/26 (7.7%) 3/26 (11.5%) 4/26 (15.4%) 5/26 (19.2%) 6/26 (23.1%) 7/26 (26.9%) 8/26 (30.8%) 9/26 (34.6%) 10/26 (38.5%) 11/26 (42.3%) 12/26 (46.2%) 13/26 (50.0%) 14/26 (53.8%) 15/26 (57.7%) 16/26 (61.5%) 17/26 (65.4%) 18/26 (69.2%) 19/26 (73.1%) 20/26 (76.9%) 21/26 (80.8%) 22/26 (84.6%) 23/26 (88.5%) 24/26 (92.3%) 25/26 (96.2%) 26/26 (100.0%) + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 93, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + testrunner-ex/sampletests/../sampletestsl.txt + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + testrunner-ex/sampletests/../sampletestsl.txt + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 173, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) + + 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) + + 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) + + 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) + + 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) + + 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) + + 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) + + 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) + + 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) + + 10/26 (38.5%) test_x0 (sample1.sampletests.test122) + + 11/26 (42.3%) test_y0 (sample1.sampletests.test122) + + 12/26 (46.2%) test_z1 (sample1.sampletests.test122) + + 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt + + 14/26 (53.8%) test_x1 (sampletests.test122.TestA) + + 15/26 (57.7%) test_y0 (sampletests.test122.TestA) + + 16/26 (61.5%) test_z0 (sampletests.test122.TestA) + + 17/26 (65.4%) test_x0 (sampletests.test122.TestB) + + 18/26 (69.2%) test_y1 (sampletests.test122.TestB) + + 19/26 (73.1%) test_z0 (sampletests.test122.TestB) + + 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) + + 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) + + 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) + + 23/26 (88.5%) test_x0 (sampletests.test122) + + 24/26 (92.3%) test_y0 (sampletests.test122) + + 25/26 (96.2%) test_z1 (sampletests.test122) + + 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) 10/26 (38.5%) test_x0 (sample1.sampletests.test122) 11/26 (42.3%) test_y0 (sample1.sampletests.test122) 12/26 (46.2%) test_z1 (sample1.sampletests.test122) 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt 14/26 (53.8%) test_x1 (sampletests.test122.TestA) 15/26 (57.7%) test_y0 (sampletests.test122.TestA) 16/26 (61.5%) test_z0 (sampletests.test122.TestA) 17/26 (65.4%) test_x0 (sampletests.test122.TestB) 18/26 (69.2%) test_y1 (sampletests.test122.TestB) 19/26 (73.1%) test_z0 (sampletests.test122.TestB) 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) 23/26 (88.5%) test_x0 (sampletests.test122) 24/26 (92.3%) test_y0 (sampletests.test122) 25/26 (96.2%) test_z1 (sampletests.test122) 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-subunit.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 379, in testrunner-subunit.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something_else + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +Got: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + test: sample2.sampletests_ntd.TestSomething.test_something + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + test: sample3.sampletests_ntd.TestSomething.test_error1 + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_error2 + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_fail1 + failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_fail2 + failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_something + successful: sample3.sampletests_ntd.TestSomething.test_something + test: sample3.sampletests_ntd.TestSomething.test_something_else + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 510, in testrunner-subunit.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something_else + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +Got: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + test: sample2.sampletests_ntd.TestSomething.test_something + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + test: sample3.sampletests_ntd.TestSomething.test_error1 + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_error2 + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_fail1 + error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_fail2 + error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_something + successful: sample3.sampletests_ntd.TestSomething.test_something + test: sample3.sampletests_ntd.TestSomething.test_something_else + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True + + + + +Failure in test test_print_failure_containing_latin1_bytestrings (zope.testrunner.test_subunit.TestSubunitTracebackPrinting) +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\test_subunit.py", line 59, in test_print_failure_containing_latin1_bytestrings + assert "AssertionError: \xef\xbf\xbd0" in self.output.getvalue() +AssertionError + + Ran 31 tests with 7 failures and 0 errors in 35.422 seconds. +Tearing down left over layers: + Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds. +c:\buildslave\ztk_dev_py_265_win32\build\bin\test-ztk-zope.testrunner-script.py:19: DeprecationWarning: zope.testing.testrunner is deprecated in favour of zope.testrunner. + import zope.testing.testrunner +c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testing\src\zope\testing\testrunner\formatter.py:28: DeprecationWarning: zope.testing.exceptions is deprecated in favour of zope.testrunner.exceptions + from zope.testing.exceptions import DocTestFailureException + +Running test-ztk-zope.testing +Running test-ztk-zope.server +Running test-ztk-zope.sendmail +Running test-ztk-zope.formlib +Running test-ztk-zope.component +Running test-ztk-zope.i18n +Running test-ztk-zope.traversing +Running test-ztk-zope.pagetemplate +Running test-ztk-zope.ramcache +Running test-ztk-zope.session +Running test-ztk-zope.publisher +Running test-ztk-zope.container +Running test-ztk-zope.browserpage +Running test-ztk-zope.browserresource +Running test-ztk-zope.index +Running test-ztk-zope.security +Running test-ztk-zope.pluggableauth +Running test-ztk-zope.mimetype +Running test-ztk-zope.viewlet +Running test-ztk-zope.dublincore +Running test-ztk-zope.browsermenu +Running test-ztk-zope.schema +Running test-ztk-zope.site +Running test-ztk-zope.configuration +Running test-ztk-zope.copypastemove +Running test-ztk-zope.interface +Running test-ztk-zope.tal +Running test-ztk-zope.contentprovider +Running test-ztk-zope.catalog +Running test-ztk-zope.ptresource +Running test-ztk-zope.principalannotation +Running test-ztk-zope.securitypolicy +Running test-ztk-zope.intid +Running test-ztk-zope.applicationcontrol +Running test-ztk-zope.login +Running test-ztk-zope.principalregistry +Running test-ztk-zope.structuredtext +Running test-ztk-zope.lifecycleevent +Running test-ztk-zope.keyreference +Running test-ztk-zope.authentication +Running test-ztk-zope.annotation +Running test-ztk-zope.password +Running test-ztk-zope.location +Running test-ztk-zope.componentvocabulary +Running test-ztk-zope.hookable +Running test-ztk-zope.error +Running test-ztk-zope.copy +Running test-ztk-zope.deprecation +Running test-ztk-zope.tales +Running test-ztk-zope.deferredimport +Running test-ztk-zope.minmax +Running test-ztk-zope.i18nmessageid +Running test-ztk-zope.proxy +Running test-ztk-zope.cachedescriptors +Running test-ztk-zope.dottedname +Running test-ztk-zope.sequencesort +Running test-ztk-zope.processlifetime +Running test-ztk-zope.datetime +Running test-ztk-zope.event +Running test-ztk-zope.exceptions +Running test-ztk-zope.contenttype +Running test-ztk-zope.size +Running test-ztk-zope.browser +Running test-ztk-zope.broken +Running test-ztk-zope.filerepresentation +1 failure(s). +- test-ztk-zope.testrunnerRunning test-ztk-zope.testrunner +test-ztk-zope.testrunner failed with: +Running zope.testing.testrunner.layer.UnitTests tests: + Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds. + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-debugging-layer-setup.test + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 94, in testrunner-debugging-layer-setup.test +Failed example: + try: + zope.testrunner.run_internal( + ['--path', dir, '-Dvv', '--tests-pattern', 'tests2']) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +REPORT_NDIFF +Differences (ndiff with -expected +actual): + Running tests at level 1 + Running tests2.Layer1 tests: + Set up tests2.Layer1 in N.NNN seconds. + Running: + a_test (tests2) + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Running tests2.Layer2 tests: + Tear down tests2.Layer1 ... not supported + Running in a subprocess. + Set up tests2.Layer2 + ********************************************************************** + + Can't post-mortem debug when running a layer as a subprocess! + Try running layer 'tests2.Layer2' by itself. + + ********************************************************************** + + Traceback (most recent call last): + - ... + + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in run_layer + + setup_layer(options, layer, setup_layers) + + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in setup_layer + + layer.setUp() + + File "c:/temp/tmp96jkfi/TESTS-DIR/tests2.py", Line NNN, in setUp + raise ValueError + ValueError + + + Tests with errors: + - Layer: tests2.Layer2 + + runTest (zope.testing.testrunner.runner.SetUpLayerFailure) + Total: 1 tests, 0 failures, 1 errors in N.NNN seconds. + True + + +> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(22)test_set_trace1() +-> y = x +(Pdb) p x +1 +(Pdb) c + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-debugging.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 32, in testrunner-debugging.txt +Failed example: + try: testrunner.run_internal(defaults) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +Expected: + Running zope.testrunner.layer.UnitTests tests: + ... + > testrunner-ex/sample3/sampletests_d.py(NNN)test_set_trace1() + -> y = x + (Pdb) p x + 1 + (Pdb) c + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + ... + False +Got: + Running zope.testrunner.layer.UnitTests tests: + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + False + + +> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(42)f() +-> y = x +(Pdb) p x +1 +(Pdb) c + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-edge-cases.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 91, in testrunner-edge-cases.txt +Failed example: + try: testrunner.run_internal(defaults) + finally: sys.stdin = real_stdin + # doctest: +ELLIPSIS +Expected: + Running zope.testrunner.layer.UnitTests tests:... + > testrunner-ex/sample3/sampletests_d.py(NNN)f() + -> y = x + (Pdb) p x + 1 + (Pdb) c + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + ... + False +Got: + Running zope.testrunner.layer.UnitTests tests: + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-layers.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 130, in testrunner-layers.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running samplelayers.Layer1 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. + Running samplelayers.Layer11 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer111 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer111 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer111 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer112 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer112 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer112 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer12 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer121 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer121 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer121 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer122 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running zope.testrunner.layer.UnitTests tests: + Running in a subprocess. + Set up zope.testrunner.layer.UnitTests in N.NNN seconds. + Ran 156 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer1 in N.NNN seconds. + Total: 321 tests, 0 failures, 0 errors in N.NNN seconds. + False +Got: + Running samplelayers.Layer1 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. + Running samplelayers.Layer11 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer111 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer111 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer111 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer112 tests: + Running in a subprocess. + Set up samplelayers.Layerx in N.NNN seconds. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer11 in N.NNN seconds. + Set up samplelayers.Layer112 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer112 in N.NNN seconds. + Tear down samplelayers.Layerx in N.NNN seconds. + Tear down samplelayers.Layer11 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer12 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer121 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer121 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer121 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Running samplelayers.Layer122 tests: + Running in a subprocess. + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer1 in N.NNN seconds. + Total: 165 tests, 0 failures, 0 errors in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-progress.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 18, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) + + 2/26 (7.7%) + + 3/26 (11.5%) + + 4/26 (15.4%) + + 5/26 (19.2%) + + 6/26 (23.1%) + + 7/26 (26.9%) + + 8/26 (30.8%) + + 9/26 (34.6%) + + 10/26 (38.5%) + + 11/26 (42.3%) + + 12/26 (46.2%) + + 13/26 (50.0%) + + 14/26 (53.8%) + + 15/26 (57.7%) + + 16/26 (61.5%) + + 17/26 (65.4%) + + 18/26 (69.2%) + + 19/26 (73.1%) + + 20/26 (76.9%) + + 21/26 (80.8%) + + 22/26 (84.6%) + + 23/26 (88.5%) + + 24/26 (92.3%) + + 25/26 (96.2%) + + 26/26 (100.0%) + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) 2/26 (7.7%) 3/26 (11.5%) 4/26 (15.4%) 5/26 (19.2%) 6/26 (23.1%) 7/26 (26.9%) 8/26 (30.8%) 9/26 (34.6%) 10/26 (38.5%) 11/26 (42.3%) 12/26 (46.2%) 13/26 (50.0%) 14/26 (53.8%) 15/26 (57.7%) 16/26 (61.5%) 17/26 (65.4%) 18/26 (69.2%) 19/26 (73.1%) 20/26 (76.9%) 21/26 (80.8%) 22/26 (84.6%) 23/26 (88.5%) 24/26 (92.3%) 25/26 (96.2%) 26/26 (100.0%) + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 93, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + testrunner-ex/sampletests/../sampletestsl.txt + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + testrunner-ex/sampletests/../sampletestsl.txt + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 173, in testrunner-progress.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) + + 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) + + 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) + + 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) + + 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) + + 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) + + 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) + + 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) + + 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) + + 10/26 (38.5%) test_x0 (sample1.sampletests.test122) + + 11/26 (42.3%) test_y0 (sample1.sampletests.test122) + + 12/26 (46.2%) test_z1 (sample1.sampletests.test122) + + 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt + + 14/26 (53.8%) test_x1 (sampletests.test122.TestA) + + 15/26 (57.7%) test_y0 (sampletests.test122.TestA) + + 16/26 (61.5%) test_z0 (sampletests.test122.TestA) + + 17/26 (65.4%) test_x0 (sampletests.test122.TestB) + + 18/26 (69.2%) test_y1 (sampletests.test122.TestB) + + 19/26 (73.1%) test_z0 (sampletests.test122.TestB) + + 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) + + 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) + + 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) + + 23/26 (88.5%) test_x0 (sampletests.test122) + + 24/26 (92.3%) test_y0 (sampletests.test122) + + 25/26 (96.2%) test_z1 (sampletests.test122) + + 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt + + + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False +Got: + Running tests at level 1 + Running samplelayers.Layer122 tests: + Set up samplelayers.Layer1 in N.NNN seconds. + Set up samplelayers.Layer12 in N.NNN seconds. + Set up samplelayers.Layer122 in N.NNN seconds. + Running: + 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) 10/26 (38.5%) test_x0 (sample1.sampletests.test122) 11/26 (42.3%) test_y0 (sample1.sampletests.test122) 12/26 (46.2%) test_z1 (sample1.sampletests.test122) 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt 14/26 (53.8%) test_x1 (sampletests.test122.TestA) 15/26 (57.7%) test_y0 (sampletests.test122.TestA) 16/26 (61.5%) test_z0 (sampletests.test122.TestA) 17/26 (65.4%) test_x0 (sampletests.test122.TestB) 18/26 (69.2%) test_y1 (sampletests.test122.TestB) 19/26 (73.1%) test_z0 (sampletests.test122.TestB) 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) 23/26 (88.5%) test_x0 (sampletests.test122) 24/26 (92.3%) test_y0 (sampletests.test122) 25/26 (96.2%) test_z1 (sampletests.test122) 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt + Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. + Tearing down left over layers: + Tear down samplelayers.Layer122 in N.NNN seconds. + Tear down samplelayers.Layer12 in N.NNN seconds. + Tear down samplelayers.Layer1 in N.NNN seconds. + False + + + + +Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\Python26_32\lib\doctest.py", line 2163, in runTest + raise self.failureException(self.format_failure(new.getvalue())) +DocTestFailureException: Failed doctest test for testrunner-subunit.txt + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 0 + +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 379, in testrunner-subunit.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + + ] + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something_else + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +Got: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + test: sample2.sampletests_ntd.TestSomething.test_something + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + test: sample3.sampletests_ntd.TestSomething.test_error1 + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_error2 + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_fail1 + failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_fail2 + failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + ] + test: sample3.sampletests_ntd.TestSomething.test_something + successful: sample3.sampletests_ntd.TestSomething.test_something + test: sample3.sampletests_ntd.TestSomething.test_something_else + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +---------------------------------------------------------------------- +File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 510, in testrunner-subunit.txt +Failed example: + testrunner.run_internal(defaults) +Expected: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_error2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail1 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_fail2 + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.TestSomething.test_something_else + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True +Got: + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.Layer:setUp + tags: zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.TestSomething.test_something + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample1.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample1.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample1.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample1.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample2.sampletests_ntd.Layer:setUp + tags: zope:layer:sample2.sampletests_ntd.Layer + test: sample2.sampletests_ntd.TestSomething.test_something + successful: sample2.sampletests_ntd.TestSomething.test_something + tags: -zope:layer:sample2.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample2.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample2.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + test: Running in a subprocess. + tags: zope:info_suboptimal + successful: Running in a subprocess. + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + successful: sample3.sampletests_ntd.Layer:setUp + tags: zope:layer:sample3.sampletests_ntd.Layer + test: sample3.sampletests_ntd.TestSomething.test_error1 + error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 + raise TypeError("Can we see errors") + TypeError: Can we see errors + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_error2 + error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 + raise TypeError("I hope so") + TypeError: I hope so + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_fail1 + error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 + self.assertEqual(1, 2) + AssertionError: 1 != 2 + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_fail2 + error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart + Content-Type: text/x-traceback;charset=utf8,language=python + traceback + NNN + Traceback (most recent call last): + testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 + self.assertEqual(1, 3) + AssertionError: 1 != 3 + 0 + ] + test: Can't post-mortem debug when running a layer as a subprocess! + tags: zope:error_with_banner + successful: Can't post-mortem debug when running a layer as a subprocess! + test: sample3.sampletests_ntd.TestSomething.test_something + successful: sample3.sampletests_ntd.TestSomething.test_something + test: sample3.sampletests_ntd.TestSomething.test_something_else + successful: sample3.sampletests_ntd.TestSomething.test_something_else + tags: -zope:layer:sample3.sampletests_ntd.Layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + test: sample3.sampletests_ntd.Layer:tearDown + tags: zope:layer + time: YYYY-MM-DD HH:MM:SS.mmmmmmZ + skip: sample3.sampletests_ntd.Layer:tearDown [ + tearDown not supported + ] + True + + + + +Failure in test test_print_failure_containing_latin1_bytestrings (zope.testrunner.test_subunit.TestSubunitTracebackPrinting) +Traceback (most recent call last): + File "c:\Python26_32\lib\unittest.py", line 279, in run + testMethod() + File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\test_subunit.py", line 59, in test_print_failure_containing_latin1_bytestrings + assert "AssertionError: \xef\xbf\xbd0" in self.output.getvalue() +AssertionError + + Ran 31 tests with 7 failures and 0 errors in 35.422 seconds. +Tearing down left over layers: + Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds. +c:\buildslave\ztk_dev_py_265_win32\build\bin\test-ztk-zope.testrunner-script.py:19: DeprecationWarning: zope.testing.testrunner is deprecated in favour of zope.testrunner. + import zope.testing.testrunner +c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testing\src\zope\testing\testrunner\formatter.py:28: DeprecationWarning: zope.testing.exceptions is deprecated in favour of zope.testrunner.exceptions + from zope.testing.exceptions import DocTestFailureException + +Running test-ztk-zope.testing +Running test-ztk-zope.server +Running test-ztk-zope.sendmail +Running test-ztk-zope.formlib +Running test-ztk-zope.component +Running test-ztk-zope.i18n +Running test-ztk-zope.traversing +Running test-ztk-zope.pagetemplate +Running test-ztk-zope.ramcache +Running test-ztk-zope.session +Running test-ztk-zope.publisher +Running test-ztk-zope.container +Running test-ztk-zope.browserpage +Running test-ztk-zope.browserresource +Running test-ztk-zope.index +Running test-ztk-zope.security +Running test-ztk-zope.pluggableauth +Running test-ztk-zope.mimetype +Running test-ztk-zope.viewlet +Running test-ztk-zope.dublincore +Running test-ztk-zope.browsermenu +Running test-ztk-zope.schema +Running test-ztk-zope.site +Running test-ztk-zope.configuration +Running test-ztk-zope.copypastemove +Running test-ztk-zope.interface +Running test-ztk-zope.tal +Running test-ztk-zope.contentprovider +Running test-ztk-zope.catalog +Running test-ztk-zope.ptresource +Running test-ztk-zope.principalannotation +Running test-ztk-zope.securitypolicy +Running test-ztk-zope.intid +Running test-ztk-zope.applicationcontrol +Running test-ztk-zope.login +Running test-ztk-zope.principalregistry +Running test-ztk-zope.structuredtext +Running test-ztk-zope.lifecycleevent +Running test-ztk-zope.keyreference +Running test-ztk-zope.authentication +Running test-ztk-zope.annotation +Running test-ztk-zope.password +Running test-ztk-zope.location +Running test-ztk-zope.componentvocabulary +Running test-ztk-zope.hookable +Running test-ztk-zope.error +Running test-ztk-zope.copy +Running test-ztk-zope.deprecation +Running test-ztk-zope.tales +Running test-ztk-zope.deferredimport +Running test-ztk-zope.minmax +Running test-ztk-zope.i18nmessageid +Running test-ztk-zope.proxy +Running test-ztk-zope.cachedescriptors +Running test-ztk-zope.dottedname +Running test-ztk-zope.sequencesort +Running test-ztk-zope.processlifetime +Running test-ztk-zope.datetime +Running test-ztk-zope.event +Running test-ztk-zope.exceptions +Running test-ztk-zope.contenttype +Running test-ztk-zope.size +Running test-ztk-zope.browser +Running test-ztk-zope.broken +Running test-ztk-zope.filerepresentation +1 failure(s). +- test-ztk-zope.testrunner + + + + + + + From 4300261405c6aa4d61bacaaced222ba5351e61da Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 5 Oct 2010 00:24:26 -0400 Subject: [PATCH 06/37] Arduino test format information --- test/examples/README | 84 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/examples/README diff --git a/test/examples/README b/test/examples/README new file mode 100644 index 00000000000..95908da7b10 --- /dev/null +++ b/test/examples/README @@ -0,0 +1,84 @@ +Arduino test result format + + +The Arduino test result format is based on the need for a result that can be streamed, sumary data is at the end of the test, and is human readable. + +Test result format description. + +The file begins with info data. It's indicated by having "info." at the begging of the line. +Common info fields: +info.MANUFACTURER = Arduino +info.CPU-NAME = ATmega328P +info.GCC-Version = 4.3.2 +info.AVR-LibC-Ver = 1.6.4 +info.Compiled-date = Oct 4 2010 +info.Test-Suite-Name = general + + +Followed by test run results. + +Test run results format: +name of test (information about test) ... test result condition + +A test has the following test result conditions: +ok +FAIL +ERROR + +Test result summary is last and seperated from the test by dashes: +-------------------------- + +Summary will say: +Ran n test in Secs + +Test suite final condition: +OK +FAILED (failures=n) + + + +Example test Results: + +info.MANUFACTURER = Arduino +info.CPU-NAME = ATmega328P +info.GCC-Version = 4.3.2 +info.AVR-LibC-Ver = 1.6.4 +info.Compiled-date = Oct 4 2010 +info.Test-Suite-Name = general +DigitalReadWrite_02 ... ok +DigitalReadWrite_03 ... ok +DigitalReadWrite_04 ... ok +DigitalReadWrite_05 ... ok +DigitalReadWrite_06 ... ok +DigitalReadWrite_07 ... ok +DigitalReadWrite_08 ... ok +DigitalReadWrite_09 ... ok +DigitalReadWrite_10 ... ok +DigitalReadWrite_11 ... ok +DigitalReadWrite_12 ... ok +DigitalReadWrite_13 ... ok +DigitalReadWrite_14 ... ok +DigitalReadWrite_15 ... ok +DigitalReadWrite_16 ... ok +DigitalReadWrite_17 ... ok +DigitalReadWrite_18 ... ok +DigitalReadWrite_19 ... ok +PWMoutput_03 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_05 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_06 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_09 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_10 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_11 (PWM=128 50% LOW 49% HIGH) ... ok +AnalogInput_00 (Low= 0 High= 472 helper pin=15) ... FAIL +AnalogInput_01 (Low= 477 High=1023 helper pin=14) ... FAIL +AnalogInput_02 (Low= 0 High= 474 helper pin=17) ... FAIL +AnalogInput_03 (Low= 479 High=1023 helper pin=16) ... FAIL +AnalogInput_04 (Low= 0 High= 470 helper pin=19) ... FAIL +AnalogInput_05 (Low= 475 High=1023 helper pin=18) ... FAIL +-------------------------- +Ran 30 tests in 7.326s + +FAILED (failures=6) + + + From 406556e94edcbc39f7dfb4474bf405a4328e1f40 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 5 Oct 2010 00:28:26 -0400 Subject: [PATCH 07/37] Arduino test example added --- test/examples/arduino.test | 74 ++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/test/examples/arduino.test b/test/examples/arduino.test index 41baca1438d..8a365b123f6 100644 --- a/test/examples/arduino.test +++ b/test/examples/arduino.test @@ -1,36 +1,40 @@ -info.MANUFACTURER = Arduino ... ok -info.CPU-NAME = ATmega2560 ... ok -info.GCC-Version = 4.3.2 ... ok -info.AVR-LibC-Ver = 1.6.4 ... ok -info.Compiled-date = Oct 3 2010 ... ok -Serial1 ... ok -Serial2 ... ok -Serial3 ... ok -PIN_IN_OUT 2/3 1-PWM 2-PWM ... ok -PIN_IN_OUT 4/5 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 6/7 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 8/9 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 10/11 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 12/13 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 14/15 ... ok -PIN_IN_OUT 16/17 ... ok -PIN_IN_OUT 18/19 ... ok -PIN_IN_OUT 20/21 ... FAIL -PIN_IN_OUT 22/23 ... FAIL -PIN_IN_OUT 24/25 ... FAIL -PIN_IN_OUT 26/27 ... FAIL -PIN_IN_OUT 28/29 ... FAIL -PIN_IN_OUT 30/31 ... FAIL -PIN_IN_OUT 32/33 ... FAIL -PIN_IN_OUT 34/35 ... FAIL -PIN_IN_OUT 36/37 ... FAIL -PIN_IN_OUT 38/39 ... FAIL -PIN_IN_OUT 40/41 ... FAIL -PIN_IN_OUT 42/43 ... FAIL -PIN_IN_OUT 44/45 1-PWM 2-PWM ... FAIL -PIN_IN_OUT 46/47 1-PWM ... ok -PIN_IN_OUT 48/49 ... FAIL ----------------------------- -Ran 27 tests in 22.170s +info.MANUFACTURER = Arduino +info.CPU-NAME = ATmega328P +info.GCC-Version = 4.3.2 +info.AVR-LibC-Ver = 1.6.4 +info.Compiled-date = Oct 4 2010 +info.Test-Suite-Name = general +DigitalReadWrite_02 ... ok +DigitalReadWrite_03 ... ok +DigitalReadWrite_04 ... ok +DigitalReadWrite_05 ... ok +DigitalReadWrite_06 ... ok +DigitalReadWrite_07 ... ok +DigitalReadWrite_08 ... ok +DigitalReadWrite_09 ... ok +DigitalReadWrite_10 ... ok +DigitalReadWrite_11 ... ok +DigitalReadWrite_12 ... ok +DigitalReadWrite_13 ... ok +DigitalReadWrite_14 ... ok +DigitalReadWrite_15 ... ok +DigitalReadWrite_16 ... ok +DigitalReadWrite_17 ... ok +DigitalReadWrite_18 ... ok +DigitalReadWrite_19 ... ok +PWMoutput_03 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_05 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_06 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_09 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_10 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_11 (PWM=128 50% LOW 49% HIGH) ... ok +AnalogInput_00 (Low= 0 High= 472 helper pin=15) ... FAIL +AnalogInput_01 (Low= 477 High=1023 helper pin=14) ... FAIL +AnalogInput_02 (Low= 0 High= 474 helper pin=17) ... FAIL +AnalogInput_03 (Low= 479 High=1023 helper pin=16) ... FAIL +AnalogInput_04 (Low= 0 High= 470 helper pin=19) ... FAIL +AnalogInput_05 (Low= 475 High=1023 helper pin=18) ... FAIL +-------------------------- +Ran 30 tests in 7.326s -FALIED (failures=19) +FAILED (failures=6) From 3356f8c386734133dd01521fc3564ce8d88de499 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 5 Oct 2010 16:47:57 -0400 Subject: [PATCH 08/37] Cleaned up old examples, and added success, and failure tests results. --- test/examples/Makefile | 17 +- .../{arduino.test => arduino-mixed.test} | 0 test/examples/arduino-succes.test | 42 + test/examples/arduino1.test | 36 + test/examples/ex1.txt | 10 - test/examples/ex2.txt | 15 - test/examples/ex3.txt | 10 - test/examples/ex4.txt | 30 - test/examples/ex5.txt | 24 - test/examples/ex6.txt | 53 - test/examples/ex7.txt | 2188 ----------------- 11 files changed, 82 insertions(+), 2343 deletions(-) rename test/examples/{arduino.test => arduino-mixed.test} (100%) create mode 100644 test/examples/arduino-succes.test create mode 100644 test/examples/arduino1.test delete mode 100644 test/examples/ex1.txt delete mode 100644 test/examples/ex2.txt delete mode 100644 test/examples/ex3.txt delete mode 100644 test/examples/ex4.txt delete mode 100644 test/examples/ex5.txt delete mode 100644 test/examples/ex6.txt delete mode 100644 test/examples/ex7.txt diff --git a/test/examples/Makefile b/test/examples/Makefile index 8d2d24f6b33..625527ef589 100644 --- a/test/examples/Makefile +++ b/test/examples/Makefile @@ -2,25 +2,16 @@ all: test -test: test1 test2 test3 +test: test1 test2 arduinotest test1: - cat ex1.txt + cat arduino-success.test test2: - cat ex2.txt - -test3: - cat ex3.txt - -test4: - cat ex6.txt - -test5: - cat ex7.txt + cat arduino-mixed.test arduinotest: - cat arduino.test + cat arduino-success.test diff --git a/test/examples/arduino.test b/test/examples/arduino-mixed.test similarity index 100% rename from test/examples/arduino.test rename to test/examples/arduino-mixed.test diff --git a/test/examples/arduino-succes.test b/test/examples/arduino-succes.test new file mode 100644 index 00000000000..2376ef66923 --- /dev/null +++ b/test/examples/arduino-succes.test @@ -0,0 +1,42 @@ + + +info.MANUFACTURER = Arduino +info.CPU-NAME = ATmega328P +info.GCC-Version = 4.3.2 +info.AVR-LibC-Ver = 1.6.4 +info.Compiled-date = Oct 5 2010 +info.Test-Suite-Name = general +DigitalReadWrite_02 ... ok +DigitalReadWrite_03 ... ok +DigitalReadWrite_04 ... ok +DigitalReadWrite_05 ... ok +DigitalReadWrite_06 ... ok +DigitalReadWrite_07 ... ok +DigitalReadWrite_08 ... ok +DigitalReadWrite_09 ... ok +DigitalReadWrite_10 ... ok +DigitalReadWrite_11 ... ok +DigitalReadWrite_12 ... ok +DigitalReadWrite_13 ... ok +DigitalReadWrite_14 ... ok +DigitalReadWrite_15 ... ok +DigitalReadWrite_16 ... ok +DigitalReadWrite_17 ... ok +DigitalReadWrite_18 ... ok +DigitalReadWrite_19 ... ok +PWMoutput_03 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_05 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_06 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_09 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_10 (PWM=128 50% LOW 49% HIGH) ... ok +PWMoutput_11 (PWM=128 50% LOW 49% HIGH) ... ok +AnalogInput_00 (Low= 0 High=1023 helper pin=15) ... ok +AnalogInput_01 (Low= 15 High=1023 helper pin=14) ... ok +AnalogInput_02 (Low= 0 High=1023 helper pin=17) ... ok +AnalogInput_03 (Low= 15 High=1023 helper pin=16) ... ok +AnalogInput_04 (Low= 0 High=1023 helper pin=19) ... ok +AnalogInput_05 (Low= 14 High=1023 helper pin=18) ... ok +-------------------------- +Ran 30 tests in 6.362s + +OK diff --git a/test/examples/arduino1.test b/test/examples/arduino1.test new file mode 100644 index 00000000000..41baca1438d --- /dev/null +++ b/test/examples/arduino1.test @@ -0,0 +1,36 @@ +info.MANUFACTURER = Arduino ... ok +info.CPU-NAME = ATmega2560 ... ok +info.GCC-Version = 4.3.2 ... ok +info.AVR-LibC-Ver = 1.6.4 ... ok +info.Compiled-date = Oct 3 2010 ... ok +Serial1 ... ok +Serial2 ... ok +Serial3 ... ok +PIN_IN_OUT 2/3 1-PWM 2-PWM ... ok +PIN_IN_OUT 4/5 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 6/7 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 8/9 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 10/11 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 12/13 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 14/15 ... ok +PIN_IN_OUT 16/17 ... ok +PIN_IN_OUT 18/19 ... ok +PIN_IN_OUT 20/21 ... FAIL +PIN_IN_OUT 22/23 ... FAIL +PIN_IN_OUT 24/25 ... FAIL +PIN_IN_OUT 26/27 ... FAIL +PIN_IN_OUT 28/29 ... FAIL +PIN_IN_OUT 30/31 ... FAIL +PIN_IN_OUT 32/33 ... FAIL +PIN_IN_OUT 34/35 ... FAIL +PIN_IN_OUT 36/37 ... FAIL +PIN_IN_OUT 38/39 ... FAIL +PIN_IN_OUT 40/41 ... FAIL +PIN_IN_OUT 42/43 ... FAIL +PIN_IN_OUT 44/45 1-PWM 2-PWM ... FAIL +PIN_IN_OUT 46/47 1-PWM ... ok +PIN_IN_OUT 48/49 ... FAIL +---------------------------- +Ran 27 tests in 22.170s + +FALIED (failures=19) diff --git a/test/examples/ex1.txt b/test/examples/ex1.txt deleted file mode 100644 index 38c6b6a0578..00000000000 --- a/test/examples/ex1.txt +++ /dev/null @@ -1,10 +0,0 @@ -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok -test_negative (__main__.ToRomanBadInput) to_roman should fail with negative input ... ok -test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... ok -test_zero (__main__.ToRomanBadInput) to_roman should fail with 0 input ... ok - ----------------------------------------------------------------------- -Ran 4 tests in 0.016s - -OK - diff --git a/test/examples/ex2.txt b/test/examples/ex2.txt deleted file mode 100644 index 9b0a32359f0..00000000000 --- a/test/examples/ex2.txt +++ /dev/null @@ -1,15 +0,0 @@ -test_to_roman_known_values (__main__.KnownValues) to_roman should give known result with known input ... ok -test_too_large (__main__.ToRomanBadInput) to_roman should fail with large input ... FAIL -====================================================================== -FAIL: to_roman should fail with large input ----------------------------------------------------------------------- -Traceback (most recent call last): - File "romantest2.py", line 78, in test_too_large - self.assertRaises(roman2.OutOfRangeError, roman2.to_roman, 4000) -AssertionError: OutOfRangeError not raised by to_roman - ----------------------------------------------------------------------- -Ran 2 tests in 0.016s - -FAILED (failures=1) - diff --git a/test/examples/ex3.txt b/test/examples/ex3.txt deleted file mode 100644 index 17ca822662c..00000000000 --- a/test/examples/ex3.txt +++ /dev/null @@ -1,10 +0,0 @@ -test_to_roman_known_values (__main__.KnownValues) -to_roman should give known result with known input ... ok -test_too_large (__main__.ToRomanBadInput) -to_roman should fail with large input ... ok - ----------------------------------------------------------------------- -Ran 2 tests in 0.000s - -OK - diff --git a/test/examples/ex4.txt b/test/examples/ex4.txt deleted file mode 100644 index dcebaca5964..00000000000 --- a/test/examples/ex4.txt +++ /dev/null @@ -1,30 +0,0 @@ -test_to_roman_known_values (__main__.KnownValues) -to_roman should give known result with known input ... ok -test_negative (__main__.ToRomanBadInput) -to_roman should fail with negative input ... FAIL -test_too_large (__main__.ToRomanBadInput) -to_roman should fail with large input ... ok -test_zero (__main__.ToRomanBadInput) -to_roman should fail with 0 input ... FAIL - -====================================================================== -FAIL: to_roman should fail with negative input ----------------------------------------------------------------------- -Traceback (most recent call last): - File "romantest3.py", line 86, in test_negative - self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, -1) -AssertionError: OutOfRangeError not raised by to_roman - -====================================================================== -FAIL: to_roman should fail with 0 input ----------------------------------------------------------------------- -Traceback (most recent call last): - File "romantest3.py", line 82, in test_zero - self.assertRaises(roman3.OutOfRangeError, roman3.to_roman, 0) -AssertionError: OutOfRangeError not raised by to_roman - ----------------------------------------------------------------------- -Ran 4 tests in 0.000s - -FAILED (failures=2) - diff --git a/test/examples/ex5.txt b/test/examples/ex5.txt deleted file mode 100644 index 34c2c1b3123..00000000000 --- a/test/examples/ex5.txt +++ /dev/null @@ -1,24 +0,0 @@ -test_to_roman_known_values (__main__.KnownValues) -to_roman should give known result with known input ... ok -test_negative (__main__.ToRomanBadInput) -to_roman should fail with negative input ... ok -test_non_integer (__main__.ToRomanBadInput) -to_roman should fail with non-integer input ... FAIL -test_too_large (__main__.ToRomanBadInput) -to_roman should fail with large input ... ok -test_zero (__main__.ToRomanBadInput) -to_roman should fail with 0 input ... ok - -====================================================================== -FAIL: to_roman should fail with non-integer input ----------------------------------------------------------------------- -Traceback (most recent call last): - File "romantest4.py", line 90, in test_non_integer - self.assertRaises(roman4.NotIntegerError, roman4.to_roman, 0.5) -AssertionError: NotIntegerError not raised by to_roman - ----------------------------------------------------------------------- -Ran 5 tests in 0.000s - -FAILED (failures=1) - diff --git a/test/examples/ex6.txt b/test/examples/ex6.txt deleted file mode 100644 index a6cffa00a16..00000000000 --- a/test/examples/ex6.txt +++ /dev/null @@ -1,53 +0,0 @@ -=============================================================================== -[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testAsciiChange - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testNonUnicodeChange - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testUTF16Change - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.regressions.test_import_unicode_changes.TestMySQLDBUnicodeChanges.testUnicodeChange - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_current_version - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_db_version_empty - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_get_db_version_int - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_is_current_empty - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_is_current_empty_upgrade - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_scheduler_name_uniqueness - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_upgrade_empty - -MySQLdb not installed -=============================================================================== -[SKIPPED]: buildbot.test.unit.test_db_schema_master.MySQLDBSchemaManager.test_upgrade_full - -MySQLdb not installed -------------------------------------------------------------------------------- -Ran 268 tests in 25.371s - -PASSED (skips=12, successes=256) - diff --git a/test/examples/ex7.txt b/test/examples/ex7.txt deleted file mode 100644 index ea687488bd8..00000000000 --- a/test/examples/ex7.txt +++ /dev/null @@ -1,2188 +0,0 @@ -Running test-ztk-zope.testrunner -test-ztk-zope.testrunner failed with: -Running zope.testing.testrunner.layer.UnitTests tests: - Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds. - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-debugging-layer-setup.test - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 94, in testrunner-debugging-layer-setup.test -Failed example: - try: - zope.testrunner.run_internal( - ['--path', dir, '-Dvv', '--tests-pattern', 'tests2']) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS +REPORT_NDIFF -Differences (ndiff with -expected +actual): - Running tests at level 1 - Running tests2.Layer1 tests: - Set up tests2.Layer1 in N.NNN seconds. - Running: - a_test (tests2) - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Running tests2.Layer2 tests: - Tear down tests2.Layer1 ... not supported - Running in a subprocess. - Set up tests2.Layer2 - ********************************************************************** - - Can't post-mortem debug when running a layer as a subprocess! - Try running layer 'tests2.Layer2' by itself. - - ********************************************************************** - - Traceback (most recent call last): - - ... - + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in run_layer - + setup_layer(options, layer, setup_layers) - + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in setup_layer - + layer.setUp() - + File "c:/temp/tmp96jkfi/TESTS-DIR/tests2.py", Line NNN, in setUp - raise ValueError - ValueError - - - Tests with errors: - - Layer: tests2.Layer2 - + runTest (zope.testing.testrunner.runner.SetUpLayerFailure) - Total: 1 tests, 0 failures, 1 errors in N.NNN seconds. - True - - -> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(22)test_set_trace1() --> y = x -(Pdb) p x -1 -(Pdb) c - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-debugging.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 32, in testrunner-debugging.txt -Failed example: - try: testrunner.run_internal(defaults) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS -Expected: - Running zope.testrunner.layer.UnitTests tests: - ... - > testrunner-ex/sample3/sampletests_d.py(NNN)test_set_trace1() - -> y = x - (Pdb) p x - 1 - (Pdb) c - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - ... - False -Got: - Running zope.testrunner.layer.UnitTests tests: - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - False - - -> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(42)f() --> y = x -(Pdb) p x -1 -(Pdb) c - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-edge-cases.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 91, in testrunner-edge-cases.txt -Failed example: - try: testrunner.run_internal(defaults) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS -Expected: - Running zope.testrunner.layer.UnitTests tests:... - > testrunner-ex/sample3/sampletests_d.py(NNN)f() - -> y = x - (Pdb) p x - 1 - (Pdb) c - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - ... - False -Got: - Running zope.testrunner.layer.UnitTests tests: - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-layers.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 130, in testrunner-layers.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running samplelayers.Layer1 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. - Running samplelayers.Layer11 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer111 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer111 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer111 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer112 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer112 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer112 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer12 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer121 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer121 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer121 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer122 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running zope.testrunner.layer.UnitTests tests: - Running in a subprocess. - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 156 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer1 in N.NNN seconds. - Total: 321 tests, 0 failures, 0 errors in N.NNN seconds. - False -Got: - Running samplelayers.Layer1 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. - Running samplelayers.Layer11 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer111 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer111 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer111 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer112 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer112 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer112 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer12 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer121 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer121 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer121 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer122 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer1 in N.NNN seconds. - Total: 165 tests, 0 failures, 0 errors in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-progress.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 18, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) - - 2/26 (7.7%) - - 3/26 (11.5%) - - 4/26 (15.4%) - - 5/26 (19.2%) - - 6/26 (23.1%) - - 7/26 (26.9%) - - 8/26 (30.8%) - - 9/26 (34.6%) - - 10/26 (38.5%) - - 11/26 (42.3%) - - 12/26 (46.2%) - - 13/26 (50.0%) - - 14/26 (53.8%) - - 15/26 (57.7%) - - 16/26 (61.5%) - - 17/26 (65.4%) - - 18/26 (69.2%) - - 19/26 (73.1%) - - 20/26 (76.9%) - - 21/26 (80.8%) - - 22/26 (84.6%) - - 23/26 (88.5%) - - 24/26 (92.3%) - - 25/26 (96.2%) - - 26/26 (100.0%) - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) 2/26 (7.7%) 3/26 (11.5%) 4/26 (15.4%) 5/26 (19.2%) 6/26 (23.1%) 7/26 (26.9%) 8/26 (30.8%) 9/26 (34.6%) 10/26 (38.5%) 11/26 (42.3%) 12/26 (46.2%) 13/26 (50.0%) 14/26 (53.8%) 15/26 (57.7%) 16/26 (61.5%) 17/26 (65.4%) 18/26 (69.2%) 19/26 (73.1%) 20/26 (76.9%) 21/26 (80.8%) 22/26 (84.6%) 23/26 (88.5%) 24/26 (92.3%) 25/26 (96.2%) 26/26 (100.0%) - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 93, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - testrunner-ex/sampletests/../sampletestsl.txt - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - testrunner-ex/sampletests/../sampletestsl.txt - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 173, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) - - 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) - - 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) - - 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) - - 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) - - 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) - - 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) - - 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) - - 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) - - 10/26 (38.5%) test_x0 (sample1.sampletests.test122) - - 11/26 (42.3%) test_y0 (sample1.sampletests.test122) - - 12/26 (46.2%) test_z1 (sample1.sampletests.test122) - - 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt - - 14/26 (53.8%) test_x1 (sampletests.test122.TestA) - - 15/26 (57.7%) test_y0 (sampletests.test122.TestA) - - 16/26 (61.5%) test_z0 (sampletests.test122.TestA) - - 17/26 (65.4%) test_x0 (sampletests.test122.TestB) - - 18/26 (69.2%) test_y1 (sampletests.test122.TestB) - - 19/26 (73.1%) test_z0 (sampletests.test122.TestB) - - 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) - - 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) - - 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) - - 23/26 (88.5%) test_x0 (sampletests.test122) - - 24/26 (92.3%) test_y0 (sampletests.test122) - - 25/26 (96.2%) test_z1 (sampletests.test122) - - 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) 10/26 (38.5%) test_x0 (sample1.sampletests.test122) 11/26 (42.3%) test_y0 (sample1.sampletests.test122) 12/26 (46.2%) test_z1 (sample1.sampletests.test122) 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt 14/26 (53.8%) test_x1 (sampletests.test122.TestA) 15/26 (57.7%) test_y0 (sampletests.test122.TestA) 16/26 (61.5%) test_z0 (sampletests.test122.TestA) 17/26 (65.4%) test_x0 (sampletests.test122.TestB) 18/26 (69.2%) test_y1 (sampletests.test122.TestB) 19/26 (73.1%) test_z0 (sampletests.test122.TestB) 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) 23/26 (88.5%) test_x0 (sampletests.test122) 24/26 (92.3%) test_y0 (sampletests.test122) 25/26 (96.2%) test_z1 (sampletests.test122) 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-subunit.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 379, in testrunner-subunit.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something_else - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True -Got: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - test: sample2.sampletests_ntd.TestSomething.test_something - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - test: sample3.sampletests_ntd.TestSomething.test_error1 - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_error2 - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_fail1 - failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_fail2 - failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_something - successful: sample3.sampletests_ntd.TestSomething.test_something - test: sample3.sampletests_ntd.TestSomething.test_something_else - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 510, in testrunner-subunit.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something_else - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True -Got: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - test: sample2.sampletests_ntd.TestSomething.test_something - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - test: sample3.sampletests_ntd.TestSomething.test_error1 - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_error2 - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_fail1 - error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_fail2 - error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_something - successful: sample3.sampletests_ntd.TestSomething.test_something - test: sample3.sampletests_ntd.TestSomething.test_something_else - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True - - - - -Failure in test test_print_failure_containing_latin1_bytestrings (zope.testrunner.test_subunit.TestSubunitTracebackPrinting) -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\test_subunit.py", line 59, in test_print_failure_containing_latin1_bytestrings - assert "AssertionError: \xef\xbf\xbd0" in self.output.getvalue() -AssertionError - - Ran 31 tests with 7 failures and 0 errors in 35.422 seconds. -Tearing down left over layers: - Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds. -c:\buildslave\ztk_dev_py_265_win32\build\bin\test-ztk-zope.testrunner-script.py:19: DeprecationWarning: zope.testing.testrunner is deprecated in favour of zope.testrunner. - import zope.testing.testrunner -c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testing\src\zope\testing\testrunner\formatter.py:28: DeprecationWarning: zope.testing.exceptions is deprecated in favour of zope.testrunner.exceptions - from zope.testing.exceptions import DocTestFailureException - -Running test-ztk-zope.testing -Running test-ztk-zope.server -Running test-ztk-zope.sendmail -Running test-ztk-zope.formlib -Running test-ztk-zope.component -Running test-ztk-zope.i18n -Running test-ztk-zope.traversing -Running test-ztk-zope.pagetemplate -Running test-ztk-zope.ramcache -Running test-ztk-zope.session -Running test-ztk-zope.publisher -Running test-ztk-zope.container -Running test-ztk-zope.browserpage -Running test-ztk-zope.browserresource -Running test-ztk-zope.index -Running test-ztk-zope.security -Running test-ztk-zope.pluggableauth -Running test-ztk-zope.mimetype -Running test-ztk-zope.viewlet -Running test-ztk-zope.dublincore -Running test-ztk-zope.browsermenu -Running test-ztk-zope.schema -Running test-ztk-zope.site -Running test-ztk-zope.configuration -Running test-ztk-zope.copypastemove -Running test-ztk-zope.interface -Running test-ztk-zope.tal -Running test-ztk-zope.contentprovider -Running test-ztk-zope.catalog -Running test-ztk-zope.ptresource -Running test-ztk-zope.principalannotation -Running test-ztk-zope.securitypolicy -Running test-ztk-zope.intid -Running test-ztk-zope.applicationcontrol -Running test-ztk-zope.login -Running test-ztk-zope.principalregistry -Running test-ztk-zope.structuredtext -Running test-ztk-zope.lifecycleevent -Running test-ztk-zope.keyreference -Running test-ztk-zope.authentication -Running test-ztk-zope.annotation -Running test-ztk-zope.password -Running test-ztk-zope.location -Running test-ztk-zope.componentvocabulary -Running test-ztk-zope.hookable -Running test-ztk-zope.error -Running test-ztk-zope.copy -Running test-ztk-zope.deprecation -Running test-ztk-zope.tales -Running test-ztk-zope.deferredimport -Running test-ztk-zope.minmax -Running test-ztk-zope.i18nmessageid -Running test-ztk-zope.proxy -Running test-ztk-zope.cachedescriptors -Running test-ztk-zope.dottedname -Running test-ztk-zope.sequencesort -Running test-ztk-zope.processlifetime -Running test-ztk-zope.datetime -Running test-ztk-zope.event -Running test-ztk-zope.exceptions -Running test-ztk-zope.contenttype -Running test-ztk-zope.size -Running test-ztk-zope.browser -Running test-ztk-zope.broken -Running test-ztk-zope.filerepresentation -1 failure(s). -- test-ztk-zope.testrunnerRunning test-ztk-zope.testrunner -test-ztk-zope.testrunner failed with: -Running zope.testing.testrunner.layer.UnitTests tests: - Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds. - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-debugging-layer-setup.test - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging-layer-setup.test", line 94, in testrunner-debugging-layer-setup.test -Failed example: - try: - zope.testrunner.run_internal( - ['--path', dir, '-Dvv', '--tests-pattern', 'tests2']) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS +REPORT_NDIFF -Differences (ndiff with -expected +actual): - Running tests at level 1 - Running tests2.Layer1 tests: - Set up tests2.Layer1 in N.NNN seconds. - Running: - a_test (tests2) - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Running tests2.Layer2 tests: - Tear down tests2.Layer1 ... not supported - Running in a subprocess. - Set up tests2.Layer2 - ********************************************************************** - - Can't post-mortem debug when running a layer as a subprocess! - Try running layer 'tests2.Layer2' by itself. - - ********************************************************************** - - Traceback (most recent call last): - - ... - + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in run_layer - + setup_layer(options, layer, setup_layers) - + File "c:/buildslave/ztk_dev_py_265_win32/build/src/zope.testing/src/zope/testing/testrunnerunner.py", Line NNN, in setup_layer - + layer.setUp() - + File "c:/temp/tmp96jkfi/TESTS-DIR/tests2.py", Line NNN, in setUp - raise ValueError - ValueError - - - Tests with errors: - - Layer: tests2.Layer2 - + runTest (zope.testing.testrunner.runner.SetUpLayerFailure) - Total: 1 tests, 0 failures, 1 errors in N.NNN seconds. - True - - -> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(22)test_set_trace1() --> y = x -(Pdb) p x -1 -(Pdb) c - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-debugging.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-debugging.txt", line 32, in testrunner-debugging.txt -Failed example: - try: testrunner.run_internal(defaults) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS -Expected: - Running zope.testrunner.layer.UnitTests tests: - ... - > testrunner-ex/sample3/sampletests_d.py(NNN)test_set_trace1() - -> y = x - (Pdb) p x - 1 - (Pdb) c - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - ... - False -Got: - Running zope.testrunner.layer.UnitTests tests: - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - False - - -> c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-ex\sample3\sampletests_d.py(42)f() --> y = x -(Pdb) p x -1 -(Pdb) c - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-edge-cases.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-edge-cases.txt", line 91, in testrunner-edge-cases.txt -Failed example: - try: testrunner.run_internal(defaults) - finally: sys.stdin = real_stdin - # doctest: +ELLIPSIS -Expected: - Running zope.testrunner.layer.UnitTests tests:... - > testrunner-ex/sample3/sampletests_d.py(NNN)f() - -> y = x - (Pdb) p x - 1 - (Pdb) c - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - ... - False -Got: - Running zope.testrunner.layer.UnitTests tests: - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 1 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-layers.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-layers.txt", line 130, in testrunner-layers.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running samplelayers.Layer1 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. - Running samplelayers.Layer11 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer111 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer111 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer111 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer112 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer112 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer112 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer12 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer121 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer121 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer121 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer122 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running zope.testrunner.layer.UnitTests tests: - Running in a subprocess. - Set up zope.testrunner.layer.UnitTests in N.NNN seconds. - Ran 156 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down zope.testrunner.layer.UnitTests in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer1 in N.NNN seconds. - Total: 321 tests, 0 failures, 0 errors in N.NNN seconds. - False -Got: - Running samplelayers.Layer1 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Ran 9 tests with 0 failures and 0 errors in N.NNN seconds. - Running samplelayers.Layer11 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer111 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer111 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer111 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer112 tests: - Running in a subprocess. - Set up samplelayers.Layerx in N.NNN seconds. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer11 in N.NNN seconds. - Set up samplelayers.Layer112 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer112 in N.NNN seconds. - Tear down samplelayers.Layerx in N.NNN seconds. - Tear down samplelayers.Layer11 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer12 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer121 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer121 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer121 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Running samplelayers.Layer122 tests: - Running in a subprocess. - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer1 in N.NNN seconds. - Total: 165 tests, 0 failures, 0 errors in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-progress.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 18, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) - - 2/26 (7.7%) - - 3/26 (11.5%) - - 4/26 (15.4%) - - 5/26 (19.2%) - - 6/26 (23.1%) - - 7/26 (26.9%) - - 8/26 (30.8%) - - 9/26 (34.6%) - - 10/26 (38.5%) - - 11/26 (42.3%) - - 12/26 (46.2%) - - 13/26 (50.0%) - - 14/26 (53.8%) - - 15/26 (57.7%) - - 16/26 (61.5%) - - 17/26 (65.4%) - - 18/26 (69.2%) - - 19/26 (73.1%) - - 20/26 (76.9%) - - 21/26 (80.8%) - - 22/26 (84.6%) - - 23/26 (88.5%) - - 24/26 (92.3%) - - 25/26 (96.2%) - - 26/26 (100.0%) - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) 2/26 (7.7%) 3/26 (11.5%) 4/26 (15.4%) 5/26 (19.2%) 6/26 (23.1%) 7/26 (26.9%) 8/26 (30.8%) 9/26 (34.6%) 10/26 (38.5%) 11/26 (42.3%) 12/26 (46.2%) 13/26 (50.0%) 14/26 (53.8%) 15/26 (57.7%) 16/26 (61.5%) 17/26 (65.4%) 18/26 (69.2%) 19/26 (73.1%) 20/26 (76.9%) 21/26 (80.8%) 22/26 (84.6%) 23/26 (88.5%) 24/26 (92.3%) 25/26 (96.2%) 26/26 (100.0%) - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 93, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - testrunner-ex/sampletests/../sampletestsl.txt - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - testrunner-ex/sampletests/../sampletestsl.txt - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-progress.txt", line 173, in testrunner-progress.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) - - 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) - - 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) - - 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) - - 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) - - 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) - - 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) - - 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) - - 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) - - 10/26 (38.5%) test_x0 (sample1.sampletests.test122) - - 11/26 (42.3%) test_y0 (sample1.sampletests.test122) - - 12/26 (46.2%) test_z1 (sample1.sampletests.test122) - - 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt - - 14/26 (53.8%) test_x1 (sampletests.test122.TestA) - - 15/26 (57.7%) test_y0 (sampletests.test122.TestA) - - 16/26 (61.5%) test_z0 (sampletests.test122.TestA) - - 17/26 (65.4%) test_x0 (sampletests.test122.TestB) - - 18/26 (69.2%) test_y1 (sampletests.test122.TestB) - - 19/26 (73.1%) test_z0 (sampletests.test122.TestB) - - 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) - - 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) - - 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) - - 23/26 (88.5%) test_x0 (sampletests.test122) - - 24/26 (92.3%) test_y0 (sampletests.test122) - - 25/26 (96.2%) test_z1 (sampletests.test122) - - 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt - - - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False -Got: - Running tests at level 1 - Running samplelayers.Layer122 tests: - Set up samplelayers.Layer1 in N.NNN seconds. - Set up samplelayers.Layer12 in N.NNN seconds. - Set up samplelayers.Layer122 in N.NNN seconds. - Running: - 1/26 (3.8%) test_x1 (sample1.sampletests.test122.TestA) 2/26 (7.7%) test_y0 (sample1.sampletests.test122.TestA) 3/26 (11.5%) test_z0 (...le1.sampletests.test122.TestA) 4/26 (15.4%) test_x0 (...le1.sampletests.test122.TestB) 5/26 (19.2%) test_y1 (...le1.sampletests.test122.TestB) 6/26 (23.1%) test_z0 (...le1.sampletests.test122.TestB) 7/26 (26.9%) test_1 (...ampletests.test122.TestNotMuch) 8/26 (30.8%) test_2 (...ampletests.test122.TestNotMuch) 9/26 (34.6%) test_3 (...ampletests.test122.TestNotMuch) 10/26 (38.5%) test_x0 (sample1.sampletests.test122) 11/26 (42.3%) test_y0 (sample1.sampletests.test122) 12/26 (46.2%) test_z1 (sample1.sampletests.test122) 13/26 (50.0%) ... e1/sampletests/../../sampletestsl.txt 14/26 (53.8%) test_x1 (sampletests.test122.TestA) 15/26 (57.7%) test_y0 (sampletests.test122.TestA) 16/26 (61.5%) test_z0 (sampletests.test122.TestA) 17/26 (65.4%) test_x0 (sampletests.test122.TestB) 18/26 (69.2%) test_y1 (sampletests.test122.TestB) 19/26 (73.1%) test_z0 (sampletests.test122.TestB) 20/26 (76.9%) test_1 (sampletests.test122.TestNotMuch) 21/26 (80.8%) test_2 (sampletests.test122.TestNotMuch) 22/26 (84.6%) test_3 (sampletests.test122.TestNotMuch) 23/26 (88.5%) test_x0 (sampletests.test122) 24/26 (92.3%) test_y0 (sampletests.test122) 25/26 (96.2%) test_z1 (sampletests.test122) 26/26 (100.0%) ... r-ex/sampletests/../sampletestsl.txt - Ran 26 tests with 0 failures and 0 errors in N.NNN seconds. - Tearing down left over layers: - Tear down samplelayers.Layer122 in N.NNN seconds. - Tear down samplelayers.Layer12 in N.NNN seconds. - Tear down samplelayers.Layer1 in N.NNN seconds. - False - - - - -Failure in test c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\Python26_32\lib\doctest.py", line 2163, in runTest - raise self.failureException(self.format_failure(new.getvalue())) -DocTestFailureException: Failed doctest test for testrunner-subunit.txt - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 0 - ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 379, in testrunner-subunit.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - - ] - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something_else - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True -Got: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - test: sample2.sampletests_ntd.TestSomething.test_something - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - test: sample3.sampletests_ntd.TestSomething.test_error1 - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_error2 - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_fail1 - failure: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_fail2 - failure: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - ] - test: sample3.sampletests_ntd.TestSomething.test_something - successful: sample3.sampletests_ntd.TestSomething.test_something - test: sample3.sampletests_ntd.TestSomething.test_something_else - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True ----------------------------------------------------------------------- -File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\testrunner-subunit.txt", line 510, in testrunner-subunit.txt -Failed example: - testrunner.run_internal(defaults) -Expected: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_error2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail1 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_fail2 - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.TestSomething.test_something_else - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True -Got: - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.Layer:setUp - tags: zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.TestSomething.test_something - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample1.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample1.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample1.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample1.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample2.sampletests_ntd.Layer:setUp - tags: zope:layer:sample2.sampletests_ntd.Layer - test: sample2.sampletests_ntd.TestSomething.test_something - successful: sample2.sampletests_ntd.TestSomething.test_something - tags: -zope:layer:sample2.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample2.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample2.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - test: Running in a subprocess. - tags: zope:info_suboptimal - successful: Running in a subprocess. - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - successful: sample3.sampletests_ntd.Layer:setUp - tags: zope:layer:sample3.sampletests_ntd.Layer - test: sample3.sampletests_ntd.TestSomething.test_error1 - error: sample3.sampletests_ntd.TestSomething.test_error1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error1 - raise TypeError("Can we see errors") - TypeError: Can we see errors - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_error2 - error: sample3.sampletests_ntd.TestSomething.test_error2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_error2 - raise TypeError("I hope so") - TypeError: I hope so - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_fail1 - error: sample3.sampletests_ntd.TestSomething.test_fail1 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail1 - self.assertEqual(1, 2) - AssertionError: 1 != 2 - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_fail2 - error: sample3.sampletests_ntd.TestSomething.test_fail2 [ multipart - Content-Type: text/x-traceback;charset=utf8,language=python - traceback - NNN - Traceback (most recent call last): - testrunner-ex/sample3/sampletests_ntd.py", Line NNN, in test_fail2 - self.assertEqual(1, 3) - AssertionError: 1 != 3 - 0 - ] - test: Can't post-mortem debug when running a layer as a subprocess! - tags: zope:error_with_banner - successful: Can't post-mortem debug when running a layer as a subprocess! - test: sample3.sampletests_ntd.TestSomething.test_something - successful: sample3.sampletests_ntd.TestSomething.test_something - test: sample3.sampletests_ntd.TestSomething.test_something_else - successful: sample3.sampletests_ntd.TestSomething.test_something_else - tags: -zope:layer:sample3.sampletests_ntd.Layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - test: sample3.sampletests_ntd.Layer:tearDown - tags: zope:layer - time: YYYY-MM-DD HH:MM:SS.mmmmmmZ - skip: sample3.sampletests_ntd.Layer:tearDown [ - tearDown not supported - ] - True - - - - -Failure in test test_print_failure_containing_latin1_bytestrings (zope.testrunner.test_subunit.TestSubunitTracebackPrinting) -Traceback (most recent call last): - File "c:\Python26_32\lib\unittest.py", line 279, in run - testMethod() - File "c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testrunner\src\zope\testrunner\test_subunit.py", line 59, in test_print_failure_containing_latin1_bytestrings - assert "AssertionError: \xef\xbf\xbd0" in self.output.getvalue() -AssertionError - - Ran 31 tests with 7 failures and 0 errors in 35.422 seconds. -Tearing down left over layers: - Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds. -c:\buildslave\ztk_dev_py_265_win32\build\bin\test-ztk-zope.testrunner-script.py:19: DeprecationWarning: zope.testing.testrunner is deprecated in favour of zope.testrunner. - import zope.testing.testrunner -c:\buildslave\ztk_dev_py_265_win32\build\src\zope.testing\src\zope\testing\testrunner\formatter.py:28: DeprecationWarning: zope.testing.exceptions is deprecated in favour of zope.testrunner.exceptions - from zope.testing.exceptions import DocTestFailureException - -Running test-ztk-zope.testing -Running test-ztk-zope.server -Running test-ztk-zope.sendmail -Running test-ztk-zope.formlib -Running test-ztk-zope.component -Running test-ztk-zope.i18n -Running test-ztk-zope.traversing -Running test-ztk-zope.pagetemplate -Running test-ztk-zope.ramcache -Running test-ztk-zope.session -Running test-ztk-zope.publisher -Running test-ztk-zope.container -Running test-ztk-zope.browserpage -Running test-ztk-zope.browserresource -Running test-ztk-zope.index -Running test-ztk-zope.security -Running test-ztk-zope.pluggableauth -Running test-ztk-zope.mimetype -Running test-ztk-zope.viewlet -Running test-ztk-zope.dublincore -Running test-ztk-zope.browsermenu -Running test-ztk-zope.schema -Running test-ztk-zope.site -Running test-ztk-zope.configuration -Running test-ztk-zope.copypastemove -Running test-ztk-zope.interface -Running test-ztk-zope.tal -Running test-ztk-zope.contentprovider -Running test-ztk-zope.catalog -Running test-ztk-zope.ptresource -Running test-ztk-zope.principalannotation -Running test-ztk-zope.securitypolicy -Running test-ztk-zope.intid -Running test-ztk-zope.applicationcontrol -Running test-ztk-zope.login -Running test-ztk-zope.principalregistry -Running test-ztk-zope.structuredtext -Running test-ztk-zope.lifecycleevent -Running test-ztk-zope.keyreference -Running test-ztk-zope.authentication -Running test-ztk-zope.annotation -Running test-ztk-zope.password -Running test-ztk-zope.location -Running test-ztk-zope.componentvocabulary -Running test-ztk-zope.hookable -Running test-ztk-zope.error -Running test-ztk-zope.copy -Running test-ztk-zope.deprecation -Running test-ztk-zope.tales -Running test-ztk-zope.deferredimport -Running test-ztk-zope.minmax -Running test-ztk-zope.i18nmessageid -Running test-ztk-zope.proxy -Running test-ztk-zope.cachedescriptors -Running test-ztk-zope.dottedname -Running test-ztk-zope.sequencesort -Running test-ztk-zope.processlifetime -Running test-ztk-zope.datetime -Running test-ztk-zope.event -Running test-ztk-zope.exceptions -Running test-ztk-zope.contenttype -Running test-ztk-zope.size -Running test-ztk-zope.browser -Running test-ztk-zope.broken -Running test-ztk-zope.filerepresentation -1 failure(s). -- test-ztk-zope.testrunner - - - - - - - From 3b4c36816ffa3dedb3f76b09e397ea762a1d1d1f Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 5 Oct 2010 16:55:40 -0400 Subject: [PATCH 09/37] Fixed a misnamed file. --- test/buildbot/master.cfg | 248 ++++++++++++++++++ test/examples/Makefile | 3 + ...duino-succes.test => arduino-success.test} | 0 3 files changed, 251 insertions(+) create mode 100644 test/buildbot/master.cfg rename test/examples/{arduino-succes.test => arduino-success.test} (100%) diff --git a/test/buildbot/master.cfg b/test/buildbot/master.cfg new file mode 100644 index 00000000000..b2bd15764ea --- /dev/null +++ b/test/buildbot/master.cfg @@ -0,0 +1,248 @@ +# -*- python -*- +# ex: set syntax=python: + +# buildmaster config file. + +# This is the dictionary that the buildmaster pays attention to. We also use +# a shorter alias to save typing. +c = BuildmasterConfig = {} + +####### BUILDSLAVES + +# the 'slaves' list defines the set of allowable buildslaves. Each element is +# a BuildSlave object, which is created with bot-name, bot-password. These +# correspond to values given to the buildslave's mktap invocation. +from buildbot.buildslave import BuildSlave +c['slaves'] = [BuildSlave("ardutestbot1", "CHANGE_PASSWORD"), + BuildSlave("ardumacbot1", "CHANGE_PASSWORD"), + BuildSlave("arduwinbot1", "CHANGE_PASSWORD")] + +# 'slavePortnum' defines the TCP port to listen on. This must match the value +# configured into the buildslaves (with their --master option) + +c['slavePortnum'] = 9989 + +####### CHANGESOURCES + +# the 'change_source' setting tells the buildmaster how it should find out +# about source code changes. Any class which implements IChangeSource can be +# put here: there are several in buildbot/changes/*.py to choose from. + +from buildbot.changes.pb import PBChangeSource +c['change_source'] = PBChangeSource() + + +####### SCHEDULERS + +## configure the Schedulers + +from buildbot.scheduler import Scheduler +c['schedulers'] = [] +test_schedule = Scheduler(name="test", branch="master", treeStableTimer=0, builderNames=["arduino-buildbot-ubuntu-10.04", "arduino-buildbot-macosx-10.6.4", "arduino-buildbot-windowsX"]) +c['schedulers'].append(test_schedule) + +####### Custom LogParser for Arduino +from buildbot.steps.shell import ShellCommand +from buildbot.process.buildstep import LogLineObserver +from buildbot.status.builder import SUCCESS, FAILURE, WARNINGS +import re + +#class ArduinoTestCounter(LogLineObserver): +# numTests = 0 +# def outLineReceived(self, line): +# if "ok" in line: +# self.numTests += 1 +# self.step.setProgress('tests', self.numTests) + +#class ArduinoTest(ShellCommand): +# command = ["make", "arduinotest"] +# +# def __init__(self, **kwargs): +# ShellCommand.__init__(self, **kwargs) # always upcall! +# counter = ArduinoTestCounter() +# self.addLogObserver('stdio', counter) +# self.progressMetrics += ('tests',) + +# Information and code from +# http://blogs.igalia.com/itoral/2007/02/13/howto-integrate-unit-tests-with-buildbot/ +# + +class UnitTestsObserver(LogLineObserver): + regroupfailed = [] + regrouppassed = [] + reunittest = [] + unittests = [] + + def __init__(self): + LogLineObserver.__init__(self) + if len(self.regroupfailed) == 0: + self.regroupfailed.append((re.compile('^(.*)(FAIL)$'), 1)) + if len(self.regrouppassed) == 0: + self.regrouppassed.append((re.compile('^(.*)(ok)$'), 1)) + if len(self.reunittest) == 0: + self.reunittest.append((re.compile('^([^:]*):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*).*$'), 4, 5)) + + def outLineReceived(self, line): + matched = False + for r in self.regroupfailed: + result = r[0].search(line) + if result: + self.step.failedTestsCount += 1 + self.step.testsResults.append((result.groups()[r[1]].strip(), False, self.unittests)) + self.unittests = [] + matched = True + if not matched: + for r in self.regrouppassed: + result = r[0].search(line) + if result: + self.step.passedTestsCount += 1 + self.step.testsResults.append((result.groups()[r[1]].strip(), True, self.unittests)) + self.unittests = [] + matched = True + if not matched: + for r in self.reunittest: + result = r[0].search(line) + if result: + err_msg = result.groups()[r[2]].strip() + if err_msg == "Passed": + self.unittests.append((result.groups()[r[1]].strip(), True, err_msg)) + else: + self.unittests.append((result.groups()[r[1]].strip(), False, err_msg)) + matched = True + + + + +class ArduinoTestCmd(ShellCommand): + command=["make", "arduinotest"] + description="Testing" + descriptionDone="Tests" + failedTestsCount = 0 + passedTestsCount = 0 + testsResults = [] + + def __init__(self, stage=None,module=None, moduleset=None, **kwargs): + ShellCommand.__init__(self, **kwargs) + self.failedTestsCount = 0 + self.passedTestsCount = 0 + self.testsResults = [] + testFailuresObserver = UnitTestsObserver () + self.addLogObserver('stdio', testFailuresObserver) + + def createSummary(self, log): + if self.failedTestsCount > 0 or self.passedTestsCount > 0: + self.addHTMLLog ('tests summary', self.createTestsSummary()) + + def getText(self, cmd, results): + text = ShellCommand.getText(self, cmd, results) + if self.failedTestsCount > 0 or self.passedTestsCount > 0: + text.append("tests failed: " + str(self.failedTestsCount)) + text.append("tests passed: " + str(self.passedTestsCount)) + return text + + def evaluateCommand(self, cmd): + if self.failedTestsCount > 0: + return FAILURE + else: + return SUCCESS + + def createTestsSummary (self): + # Create a string with your html report and return it + return "
Test Date: Tue, 5 Oct 2010 17:05:20 -0400 Subject: [PATCH 10/37] Labeled test expectations. --- test/examples/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/examples/Makefile b/test/examples/Makefile index 7a46801a98d..6d06ac82876 100644 --- a/test/examples/Makefile +++ b/test/examples/Makefile @@ -2,12 +2,12 @@ all: test -test: test1 test2 arduinotest +test: success failure arduinotest -test1: +success: cat arduino-success.test -test2: +failure: cat arduino-mixed.test test3: From 4096c655d66d4cf7c6bb09dc1802572d4114cf4e Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 5 Oct 2010 17:09:45 -0400 Subject: [PATCH 11/37] First version of buildot added. Plenty of clean up needed. --- test/buildbot/master.cfg | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/buildbot/master.cfg b/test/buildbot/master.cfg index b2bd15764ea..f44087e3c82 100644 --- a/test/buildbot/master.cfg +++ b/test/buildbot/master.cfg @@ -15,7 +15,8 @@ c = BuildmasterConfig = {} from buildbot.buildslave import BuildSlave c['slaves'] = [BuildSlave("ardutestbot1", "CHANGE_PASSWORD"), BuildSlave("ardumacbot1", "CHANGE_PASSWORD"), - BuildSlave("arduwinbot1", "CHANGE_PASSWORD")] + BuildSlave("arduwinbot1", "CHANGE_PASSWORD"), + ] # 'slavePortnum' defines the TCP port to listen on. This must match the value # configured into the buildslaves (with their --master option) @@ -163,11 +164,11 @@ from buildbot.steps import source, shell test_factory = factory.BuildFactory() test_factory.addStep(source.Git(repourl='git://github.com/ricklon/Arduino.git', branch='master', shallow=True)) test_factory.addStep(shell.ShellCommand, command=['ant'], workdir='build/build') -test_factory.addStep(ArduinoTestCmd( command=["make", "arduinotest"], workdir='build/test/examples')) -test_factory.addStep(ArduinoTestCmd( command=["make", "test4"], workdir='build/test/examples')) -test_factory.addStep(ArduinoTestCmd( command=["make", "test5"], workdir='build/test/examples')) -test_factory.addStep(ArduinoTestCmd( workdir='build/test/examples')) - +test_factory.addStep(ArduinoTestCmd( command=["make", "arduinotest"], descriptionDone="Arduino Tests", workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd( command=["make", "test"], descriptionDone="Arduino Tests All", workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd( command=["make", "success"], descriptionDone="Arduino Tests Success", workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd( command=["make", "failure"], descriptionDone="Arduino Tests Failure",workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd( descriptionDone="Arduino Tests Default", workdir='build/test/examples')) From 10a0b7cdc22ff4fbb93099f6aa34b11abce9e08f Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 10 Oct 2010 19:35:59 -0400 Subject: [PATCH 12/37] Test suite name is pulled from the test results, and displayed. Test summar now shows the test results. --- license.txt | 1 + test/buildbot/master.cfg | 62 +++++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/license.txt b/license.txt index fe2dac072f2..6bef628eb65 100644 --- a/license.txt +++ b/license.txt @@ -1,5 +1,6 @@ this file includes licensing information for parts of arduino. + first, the gnu general public license, which covers the main body of the processing/arduino code (in general, all the stuff inside the 'app' and 'core' subfolders). diff --git a/test/buildbot/master.cfg b/test/buildbot/master.cfg index f44087e3c82..d15d5c67bfa 100644 --- a/test/buildbot/master.cfg +++ b/test/buildbot/master.cfg @@ -13,9 +13,9 @@ c = BuildmasterConfig = {} # a BuildSlave object, which is created with bot-name, bot-password. These # correspond to values given to the buildslave's mktap invocation. from buildbot.buildslave import BuildSlave -c['slaves'] = [BuildSlave("ardutestbot1", "CHANGE_PASSWORD"), - BuildSlave("ardumacbot1", "CHANGE_PASSWORD"), - BuildSlave("arduwinbot1", "CHANGE_PASSWORD"), +c['slaves'] = [BuildSlave("ardutestbot1", "ardtest123434"), + BuildSlave("ardumacbot1", "ardtest123434"), + BuildSlave("arduwinbot1", "ardtest123434"), ] # 'slavePortnum' defines the TCP port to listen on. This must match the value @@ -45,7 +45,7 @@ c['schedulers'].append(test_schedule) ####### Custom LogParser for Arduino from buildbot.steps.shell import ShellCommand from buildbot.process.buildstep import LogLineObserver -from buildbot.status.builder import SUCCESS, FAILURE, WARNINGS +from buildbot.status.builder import SUCCESS, FAILURE, WARNINGS, EXCEPTION import re #class ArduinoTestCounter(LogLineObserver): @@ -116,8 +116,8 @@ class UnitTestsObserver(LogLineObserver): class ArduinoTestCmd(ShellCommand): command=["make", "arduinotest"] - description="Testing" - descriptionDone="Tests" + description="Arduino Testing" + descriptionDone="Arduino Default Test Done" failedTestsCount = 0 passedTestsCount = 0 testsResults = [] @@ -132,7 +132,9 @@ class ArduinoTestCmd(ShellCommand): def createSummary(self, log): if self.failedTestsCount > 0 or self.passedTestsCount > 0: - self.addHTMLLog ('tests summary', self.createTestsSummary()) + #self.addHTMLLog ('tests summary', "
" + log.getText() + "
") + self.addHTMLLog ('tests summary', self.createTestsSummary(log)) + self.descriptionDone = [self.getTestName(log.getText())] def getText(self, cmd, results): text = ShellCommand.getText(self, cmd, results) @@ -141,21 +143,45 @@ class ArduinoTestCmd(ShellCommand): text.append("tests passed: " + str(self.passedTestsCount)) return text + def getTestName(self, log): + for line in log.splitlines(): + if line.startswith('info.Test-Suite-Name'): + testname = line.split('= ')[1] + return testname + return None + + def evaluateCommand(self, cmd): if self.failedTestsCount > 0: return FAILURE else: return SUCCESS - def createTestsSummary (self): - # Create a string with your html report and return it - return "
Test" + log.getText() + "" + +#class Nose(ShellCommand): +# def __init__(self, stage=None,module=None, moduleset=None, **kwargs): +# command = ['nosetests', '--with-coverage', '--cover-erase', '--cover-html'] +# +# def describe(self, done=False): +# if not done: +# return 'testing' +# else: +# return 'test done' +# +# def createSummary(self, log): +# buildnumber = self.getProperty('buildnumber') +# coverage_index = (self.coverage_path + '/index.html') % buildnumber +# f = open(coverage_index) +# m = re.search(r'Percent: (\d+) %', f.read()) +# f.close() +# self.addURL("coverage %s%%" % m.group(1), +# self.coverage_url % buildnumber) + + +######## BUILDERS from buildbot.process import factory from buildbot.steps import source, shell #from buildbot.steps.python_twisted import Trial @@ -163,12 +189,14 @@ from buildbot.steps import source, shell test_factory = factory.BuildFactory() test_factory.addStep(source.Git(repourl='git://github.com/ricklon/Arduino.git', branch='master', shallow=True)) +test_factory.addStep(shell.ShellCommand, command=['git','log','-1'], descriptionDone="Latest Change from Git Log") test_factory.addStep(shell.ShellCommand, command=['ant'], workdir='build/build') test_factory.addStep(ArduinoTestCmd( command=["make", "arduinotest"], descriptionDone="Arduino Tests", workdir='build/test/examples')) test_factory.addStep(ArduinoTestCmd( command=["make", "test"], descriptionDone="Arduino Tests All", workdir='build/test/examples')) test_factory.addStep(ArduinoTestCmd( command=["make", "success"], descriptionDone="Arduino Tests Success", workdir='build/test/examples')) -test_factory.addStep(ArduinoTestCmd( command=["make", "failure"], descriptionDone="Arduino Tests Failure",workdir='build/test/examples')) test_factory.addStep(ArduinoTestCmd( descriptionDone="Arduino Tests Default", workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd ( command=["make", "bogus"], descriptionDone="Arduino bogus make target", workdir='build/test/examples')) +test_factory.addStep(ArduinoTestCmd( command=["make", "failure"], descriptionDone="Shell Arduino Tests Failure",workdir='build/test/examples')) From 36b20af5f004f9ec1aa26e79471b14ca7afce479 Mon Sep 17 00:00:00 2001 From: ricklon Date: Sat, 16 Oct 2010 16:30:45 -0400 Subject: [PATCH 13/37] Initial test library added with initial examples. --- .../ArduinoTestSuite/ArduinoTestSuite.cpp | 678 ++++++++++++++++++ libraries/ArduinoTestSuite/ArduinoTestSuite.h | 51 ++ libraries/ArduinoTestSuite/avr_cpunames.h | 186 +++++ .../examples/ATS_Constants/ATS_Constants.pde | 95 +++ .../examples/ATS_General/ATS_General.pde | 105 +++ .../examples/ATS_General/Makefile | 125 ++++ .../examples/ATS_Skeleton/ATS_Skeleton.pde | 79 ++ .../ATS_StringTest/ATS_StringTest.pde | 157 ++++ 8 files changed, 1476 insertions(+) create mode 100644 libraries/ArduinoTestSuite/ArduinoTestSuite.cpp create mode 100644 libraries/ArduinoTestSuite/ArduinoTestSuite.h create mode 100644 libraries/ArduinoTestSuite/avr_cpunames.h create mode 100644 libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde create mode 100644 libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde create mode 100644 libraries/ArduinoTestSuite/examples/ATS_General/Makefile create mode 100644 libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde create mode 100644 libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp new file mode 100644 index 00000000000..025fa402c15 --- /dev/null +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp @@ -0,0 +1,678 @@ +//************************************************************************ +//* Arduino Test Suite +//* (C) 2010 by Mark Sproul +//* Open source as per standard Arduino code +//* +//* This library is free software; you can redistribute it and/or +//* modify it under the terms of the GNU Lesser General Public +//* License as published by the Free Software Foundation; either +//* version 2.1 of the License, or (at your option) any later version. +//* +//* This library is distributed in the hope that it will be useful, +//* but WITHOUT ANY WARRANTY; without even the implied warranty of +//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//* Lesser General Public License for more details. +//************************************************************************ +//* Aug 31, 2010 Started on TestArduino +//************************************************************************ + +#ifdef __MWERKS__ + #include "codewarrior.h" +// #include +#else + #include +#endif + +#include +#include + +#include + + +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" + + +#include "avr_cpunames.h" + +#if defined(USART3_RX_vect) + #define SERIAL_PORT_COUNT 4 +#elif defined(USART1_RX_vect) + #define SERIAL_PORT_COUNT 2 +#else + #define SERIAL_PORT_COUNT 1 +#endif + + + + +//************************************************************************ +enum +{ + ATS_Manufacturer = 1, + ATS_CPU, + ATS_GCC_version, + ATS_LIBC_version, + ATS_CompiledDate, + ATS_TestSuiteName, + ATS_ElapsedTime, + + +}; +unsigned long gTestStartTime; +short gTagIndent; +int gYotalErrors; +int gTestCount; + + + +prog_char gTextMsg_Manufacturer[] PROGMEM = "MANUFACTURER"; +prog_char gTextMsg_CPUname[] PROGMEM = "CPU-NAME"; +prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC-Version"; +prog_char gTextMsg_AVR_LIBC[] PROGMEM = "AVR-LibC-Ver"; +prog_char gTextMsg_COMPILED_DATE[] PROGMEM = "Compiled-date"; +prog_char gTextMsg_TEST_SUITE_NAME[] PROGMEM = "Test-Suite-Name"; +prog_char gTextMsg_ELAPSED_TIME[] PROGMEM = "Elapsed-time"; +prog_char gTextMsg_dotdotdot[] PROGMEM = "... "; +prog_char gTextMsg_ok[] PROGMEM = "ok"; +prog_char gTextMsg_FAIL[] PROGMEM = "FAIL"; +prog_char gTextMsg_spaceEqual[] PROGMEM = " = "; +prog_char gTextMsg_info[] PROGMEM = "info."; +prog_char gTextMsg_dashLine[] PROGMEM = "--------------------------"; +prog_char gTextMsg_DigitalRW[] PROGMEM = "DigitalReadWrite_"; +prog_char gTextMsg_PWMoutput[] PROGMEM = "PWMoutput_"; +prog_char gTextMsg_AnalogInput[] PROGMEM = "AnalogInput_"; + +//************************************************************************ +void Serial_print_P(prog_char *flashMemStr) +{ +char theChar; +int ii; + + ii = 0; +#if (FLASHEND > 0x10000) + while (theChar = pgm_read_byte_far(flashMemStr + ii++)) +#else + while (theChar = pgm_read_byte_near(flashMemStr + ii++)) +#endif + { + Serial.print(theChar); + } +} + +//************************************************************************ +void Serial_println_P(prog_char *flashMemStr) +{ + Serial_print_P(flashMemStr); + Serial.println(); +} + + +//************************************************************************ +void ATS_PrintTestStart(char *manufName, char *testSuiteName) +{ + Serial.println(); + Serial.println(); + Serial.println(); + + ATS_PrintProperty(ATS_Manufacturer, 0, manufName); + ATS_PrintProperty(ATS_CPU, 0, _AVR_CPU_NAME_); + ATS_PrintProperty(ATS_GCC_version, 0, __VERSION__); + ATS_PrintProperty(ATS_LIBC_version, 0, __AVR_LIBC_VERSION_STRING__); + ATS_PrintProperty(ATS_CompiledDate, 0, __DATE__); + ATS_PrintProperty(ATS_TestSuiteName, 0, testSuiteName); + + + randomSeed(analogRead(0)); + +} + +//************************************************************************ +void ATS_PrintTestEnd() +{ +long seconds; +long milliSecs; + + Serial_println_P(gTextMsg_dashLine); + + // Ran 4 tests in 0.000s + Serial.print("Ran "); + Serial.print(gTestCount); + Serial.print(" tests in "); + + seconds = millis() / 1000; + milliSecs = millis() % 1000; + Serial.print(seconds); + Serial.print('.'); + Serial.print(milliSecs); + Serial.print('s'); + Serial.println(); + Serial.println(); + + if (gYotalErrors == 0) + { + Serial.print("OK"); + } + else + { + Serial.print("FAILED (failures="); + Serial.print(gYotalErrors); + Serial.print(")"); + } + Serial.println(); + + //* send control D to terminate (End Of File) + Serial.write(0x1a); +} + + + +//************************************************************************ +void ATS_PrintTestStatus(char *testString, boolean passed) +{ +int sLen; + + Serial.print(testString); + sLen = strlen(testString); + while (sLen < 60) + { + Serial.print(' '); + sLen++; + } + Serial_print_P(gTextMsg_dotdotdot); + if (passed) + { + Serial_print_P(gTextMsg_ok); + } + else + { + Serial_print_P(gTextMsg_FAIL); + gYotalErrors++; + } + Serial.println(); + + gTestCount++; +} + + +//************************************************************************ +void ATS_PrintProperty( int propertyTagNum, + char *propertyName, + char *propertyValue) +{ +char lineBuffer[64]; + + strcpy_P(lineBuffer, gTextMsg_info); + switch(propertyTagNum) + { + case 0: + strcat(lineBuffer, propertyName); + break; + + case ATS_Manufacturer: + strcat_P(lineBuffer, gTextMsg_Manufacturer); + break; + + case ATS_CPU: + strcat_P(lineBuffer, gTextMsg_CPUname); + break; + + case ATS_GCC_version: + strcat_P(lineBuffer, gTextMsg_GCC_VERSION); + break; + + case ATS_LIBC_version: + strcat_P(lineBuffer, gTextMsg_AVR_LIBC); + break; + + case ATS_CompiledDate: + strcat_P(lineBuffer, gTextMsg_COMPILED_DATE); + break; + + case ATS_TestSuiteName: + strcat_P(lineBuffer, gTextMsg_TEST_SUITE_NAME); + break; + + case ATS_ElapsedTime: + strcat_P(lineBuffer, gTextMsg_ELAPSED_TIME); + break; + } + + while (strlen(lineBuffer) < 20) + { + strcat(lineBuffer, " "); + } + + strcat_P(lineBuffer, gTextMsg_spaceEqual); + if (propertyValue != 0) + { + strcat(lineBuffer, propertyValue); + } + Serial.println(lineBuffer); +// ATS_PrintTestStatus(lineBuffer, PASSED); + +} + + + +//************************************************************************ +//* returns true if no errors, false if there is an error +int ATS_Test_DigitalPinWithHelper(uint8_t digitalPinToTest, uint8_t helperpin) +{ +boolean passedOK; +int pinValue; +char testName[64]; +char numString[32]; + + strcpy_P(testName, gTextMsg_DigitalRW); + sprintf(numString, "%02d", digitalPinToTest); + strcat(testName, numString); + + passedOK = true; + + //* test senario 1 + pinMode(digitalPinToTest, OUTPUT); + pinMode(helperpin, INPUT); + + digitalWrite(digitalPinToTest, HIGH); + pinValue = digitalRead(helperpin); + if (pinValue != HIGH) + { + passedOK = false; + } + + digitalWrite(digitalPinToTest, LOW); + pinValue = digitalRead(helperpin); + if (pinValue != LOW) + { + passedOK = false; + } + + + //* now reverse the input/output + pinMode(digitalPinToTest, INPUT); + pinMode(helperpin, OUTPUT); + + digitalWrite(helperpin, HIGH); + pinValue = digitalRead(digitalPinToTest); + if (pinValue != HIGH) + { + passedOK = false; + } + + digitalWrite(helperpin, LOW); + pinValue = digitalRead(digitalPinToTest); + if (pinValue != LOW) + { + passedOK = false; + } + + + if (! passedOK) + { + sprintf(numString, " (helper pin=%02d)", helperpin); + strcat(testName, numString); + } + ATS_PrintTestStatus(testName, passedOK); + return(passedOK); +} + +//************************************************************************ +boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest) +{ +boolean passedOK; +uint8_t helperpin; + + if ((digitalPinToTest % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = digitalPinToTest + 1; + } + else + { + //* if its ODD + helperpin = digitalPinToTest - 1; + } + passedOK = ATS_Test_DigitalPinWithHelper(digitalPinToTest, helperpin); + return(passedOK); +} + + + +//************************************************************************ +//* returns true if no errors, false if there is an error +int ATS_TestTimer( uint8_t timerPinNumber, + uint8_t inputPin, + char *statusString, + char *errorString) +{ +boolean passedOK; +unsigned long loopCounter; +unsigned long lowCount; +unsigned long highCount; +unsigned long startTime; +int percentLow; +int percentHigh; +int pinValue; +char numString[48]; +int pwmValue; + + pwmValue = 128; + loopCounter = 0; + lowCount = 0; + highCount = 0; + passedOK = true; + + startTime = millis(); + pinMode(inputPin, INPUT); + analogWrite(timerPinNumber, pwmValue); + while ((millis() - startTime) < 500) + { + pinValue = digitalRead(inputPin); + if (pinValue == HIGH) + { + highCount++; + } + else + { + lowCount++; + } + } + analogWrite(timerPinNumber, 0); + + //* the difference should be about 50% + percentLow = lowCount / ((lowCount + highCount) / 100); + percentHigh = highCount / ((lowCount + highCount) / 100); + if ((percentLow > 45) && (percentLow < 55)) + { + passedOK = true; + } + else + { + passedOK = false; + strcat(errorString, " PWM ERROR"); + } + sprintf(numString, " (PWM=%02d %d%% LOW %d%% HIGH)", pwmValue, percentLow, percentHigh); + strcat(statusString, numString); + + return(passedOK); +} + + +//************************************************************************ +//* returns true if no errors, false if there is an error +boolean ATS_Test_PWMPinWithHelper(uint8_t pwmPinToTest, uint8_t helperpin) +{ +boolean passedOK; +char testName[64]; +char errorString[48]; +char numString[8]; +uint8_t timerNumber; + + + + strcpy_P(testName, gTextMsg_PWMoutput); + sprintf(numString, "%02d", pwmPinToTest); + strcat(testName, numString); + + passedOK = true; + errorString[0] = 0; + + + //* is pin1 a timer? + timerNumber = digitalPinToTimer(pwmPinToTest); + if (timerNumber != NOT_ON_TIMER) + { + passedOK = ATS_TestTimer(pwmPinToTest, helperpin, testName, errorString); + } + else + { + //* we should not get here + passedOK = false; + } + + ATS_PrintTestStatus(testName, passedOK); + + + return(passedOK); +} + +//************************************************************************ +boolean ATS_Test_PWM_Pin(uint8_t pwmPinToTest) +{ +boolean passedOK; +uint8_t helperpin; + + if ((pwmPinToTest % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = pwmPinToTest + 1; + } + else + { + //* if its ODD + helperpin = pwmPinToTest - 1; + } + passedOK = ATS_Test_PWMPinWithHelper(pwmPinToTest, helperpin); + return(passedOK); +} + + +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define kAnalogPinOffset 54 +#else + #define kAnalogPinOffset 14 +#endif + + +//************************************************************************ +boolean ATS_Test_AnalogInputWithHelper(uint8_t analogPintoTest, uint8_t helperPin) +{ +boolean passedOK; +char testName[64]; +char infoString[48]; +int analogValueHigh; +int analogValueLow; + + + //* first we have to set the ANALOG pin to INPUT + pinMode(analogPintoTest + kAnalogPinOffset, INPUT); + + passedOK = true; + + strcpy_P(testName, gTextMsg_AnalogInput); + sprintf(infoString, "%02d", analogPintoTest); + strcat(testName, infoString); + + + pinMode(helperPin, OUTPUT); + + digitalWrite(helperPin, LOW); + analogValueLow = analogRead(analogPintoTest); + if (analogValueLow > 100) + { + passedOK = false; + } + + + digitalWrite(helperPin, HIGH); + analogValueHigh = analogRead(analogPintoTest); + if (analogValueHigh < 1000) + { + passedOK = false; + } + + + sprintf(infoString, " (Low=%4d High=%4d helper pin=%d)", analogValueLow, analogValueHigh, helperPin); + strcat(testName, infoString); + + ATS_PrintTestStatus(testName, passedOK); + + return(passedOK); +} + + +//************************************************************************ +boolean ATS_Test_AnalogInput(uint8_t analogPinToTest) +{ +boolean passedOK; +uint8_t helperpin; + + if ((analogPinToTest % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = kAnalogPinOffset + analogPinToTest + 1; + } + else + { + //* if its ODD + helperpin = kAnalogPinOffset + analogPinToTest - 1; + } + passedOK = ATS_Test_AnalogInputWithHelper(analogPinToTest, helperpin); + return(passedOK); +} + + +#define kSerialTestBaudRate 9600 +#define kSerialTestDelay 3 + + +#if (SERIAL_PORT_COUNT > 1) && !defined(__AVR_ATmega32U4__) +//************************************************************************ +//* retunrs 0 if no errors, 1 if an error occured +short ATS_TestSerialLoopback(HardwareSerial *theSerialPort, char *serialPortName) +{ +char xmitChar; +char rcvChar; +short ii; +short serialErrCt; +short timeOutLoopCtr; + + + serialErrCt = 1; + if (theSerialPort != 0) + { + serialErrCt = 0; + theSerialPort->begin(kSerialTestBaudRate); + + for (ii=0; ii<150; ii++) + { + xmitChar = ii; + theSerialPort->print(xmitChar); + + timeOutLoopCtr = 0; + //* wait for data to come back or timeout + while (!theSerialPort->available() && (timeOutLoopCtr < kSerialTestDelay)) + { + delay(1); + timeOutLoopCtr++; + } + + if (theSerialPort->available()) + { + //* get the char + rcvChar = theSerialPort->read(); + if (rcvChar != xmitChar) + { + serialErrCt = 1; + } + } + else + { + serialErrCt = 1; + } + } + theSerialPort->end(); + + if (serialErrCt == 0) + { + ATS_PrintTestStatus(serialPortName, PASSED); + } + else + { + ATS_PrintTestStatus(serialPortName, FAILED); + } + } + + return(serialErrCt); +} +#endif + + +//************************************************************************ +boolean ATS_Test_EEPROM(void) +{ +boolean passedOK; +uint8_t dataByte; +uint8_t dataByteRead; +uint16_t dataWord; +uint16_t dataWordRead; +uint32_t dataLongWord; +uint32_t dataLongWordRead; +int addressPtr; +char reportString[48]; + + passedOK = true; + //* test BYTE read/write + addressPtr = random(E2END); + dataByte = 0x5A; + eeprom_write_byte((uint8_t *)addressPtr, dataByte); + dataByteRead = eeprom_read_byte((uint8_t *)addressPtr); + + sprintf(reportString, "EEPROM_byte_rw (addr= 0x%04X)", addressPtr); + if (dataByteRead == dataByte) + { + ATS_PrintTestStatus(reportString, PASSED); + } + else + { + ATS_PrintTestStatus(reportString, FAILED); + passedOK = false; + } + + + //* test WORD read/write + addressPtr = random(E2END); + dataWord = 0xA55A; + eeprom_write_word((uint16_t *)addressPtr, dataWord); + dataWordRead = eeprom_read_word((uint16_t *)addressPtr); + + sprintf(reportString, "EEPROM_word_rw (addr= 0x%04X)", addressPtr); + if (dataWordRead == dataWord) + { + ATS_PrintTestStatus(reportString, PASSED); + } + else + { + ATS_PrintTestStatus(reportString, FAILED); + passedOK = false; + } + + + //* test Long WORD read/write + addressPtr = random(E2END); + dataLongWord = 0x5AA5A55A; + eeprom_write_dword((uint32_t *)addressPtr, dataLongWord); + dataLongWordRead = eeprom_read_dword((uint32_t *)addressPtr); + + sprintf(reportString, "EEPROM_dword_rw (addr= 0x%04X)", addressPtr); + if (dataLongWordRead == dataLongWord) + { + ATS_PrintTestStatus(reportString, PASSED); + } + else + { + ATS_PrintTestStatus(reportString, FAILED); + passedOK = false; + } + + + return(passedOK); +} + + + + + + diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.h b/libraries/ArduinoTestSuite/ArduinoTestSuite.h new file mode 100644 index 00000000000..35bd7a36464 --- /dev/null +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.h @@ -0,0 +1,51 @@ +//************************************************************************ +//************************************************************************ +//* Aug 31, 2010 Started on TestArduino +//************************************************************************ + +#ifndef _AVR_IO_H_ + #include +#endif + +#ifndef WProgram_h + #include "WProgram.h" +#endif +#ifndef HardwareSerial_h + #include "HardwareSerial.h" +#endif + + +#if defined(USART3_RX_vect) + #define SERIAL_PORT_COUNT 4 +#elif defined(USART1_RX_vect) + #define SERIAL_PORT_COUNT 2 +#else + #define SERIAL_PORT_COUNT 1 +#endif + + +void ATS_PrintTestStart(char *manufName, char *testSuiteName); +void ATS_PrintTestStatus(char *testString, boolean passed); +void ATS_PrintTestEnd(); +boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest); +boolean ATS_Test_PWM_Pin(uint8_t digitalPinToTest); +boolean ATS_Test_AnalogInput(uint8_t analogPintoTest); +boolean ATS_Test_EEPROM(void); + +void ATS_PrintProperty( int propertyTagNum, + char *propertyName, + char *propertyValue); + +short ATS_TestSerialLoopback(HardwareSerial *theSerialPort, char *serialPortName); + + + + +extern unsigned long gTestStartTime; +extern int gYotalErrors; +extern int gTestCount; + + +#define PASSED true +#define FAILED false + diff --git a/libraries/ArduinoTestSuite/avr_cpunames.h b/libraries/ArduinoTestSuite/avr_cpunames.h new file mode 100644 index 00000000000..80832164c63 --- /dev/null +++ b/libraries/ArduinoTestSuite/avr_cpunames.h @@ -0,0 +1,186 @@ +//************************************************************************************************** +//* +//* Atmel AVR CPU name strings +//* +//************************************************************************************************** +//* Sep 19, 2010 Started on avr_cpunames.h +//************************************************************************************************** + +//#include "avr_cpunames.h" + +//************************************************************************************************** + + +#if defined (__AVR_AT94K__) + #define _AVR_CPU_NAME_ "AT94k" +#elif defined (__AVR_AT43USB320__) +#elif defined (__AVR_AT43USB355__) +#elif defined (__AVR_AT76C711__) +#elif defined (__AVR_AT86RF401__) +#elif defined (__AVR_AT90PWM1__) +#elif defined (__AVR_AT90PWM2__) +#elif defined (__AVR_AT90PWM2B__) +#elif defined (__AVR_AT90PWM3__) +#elif defined (__AVR_AT90PWM3B__) +#elif defined (__AVR_AT90PWM216__) +#elif defined (__AVR_AT90PWM316__) +#elif defined (__AVR_ATmega32C1__) +#elif defined (__AVR_ATmega32M1__) +#elif defined (__AVR_ATmega32U4__) + #define _AVR_CPU_NAME_ "ATmega32U4" +#elif defined (__AVR_ATmega32U6__) + #define _AVR_CPU_NAME_ "ATmega32U6" +#elif defined (__AVR_ATmega128__) + #define _AVR_CPU_NAME_ "Atmega128" +#elif defined (__AVR_ATmega1280__) + #define _AVR_CPU_NAME_ "ATmega1280" +#elif defined (__AVR_ATmega1281__) + #define _AVR_CPU_NAME_ "ATmega1281" +#elif defined (__AVR_ATmega1284P__) + #define _AVR_CPU_NAME_ "ATmega1284" +#elif defined (__AVR_ATmega2560__) + #define _AVR_CPU_NAME_ "ATmega2560" +#elif defined (__AVR_ATmega2561__) + #define _AVR_CPU_NAME_ "ATmega2561" +#elif defined (__AVR_AT90CAN32__) + #define _AVR_CPU_NAME_ "AT90CAN32" +#elif defined (__AVR_AT90CAN64__) + #define _AVR_CPU_NAME_ "AT90CAN64" +#elif defined (__AVR_AT90CAN128__) + #define _AVR_CPU_NAME_ "AT90CAN128" +#elif defined (__AVR_AT90USB82__) + #define _AVR_CPU_NAME_ "AT90USB82" +#elif defined (__AVR_AT90USB162__) + #define _AVR_CPU_NAME_ "AT90USB162" +#elif defined (__AVR_AT90USB646__) + #define _AVR_CPU_NAME_ "AT90USB646" +#elif defined (__AVR_AT90USB647__) + #define _AVR_CPU_NAME_ "AT90USB647" +#elif defined (__AVR_AT90USB1286__) + #define _AVR_CPU_NAME_ "AT90USB1286" +#elif defined (__AVR_AT90USB1287__) + #define _AVR_CPU_NAME_ "AT90USB1287" +#elif defined (__AVR_ATmega64__) + #define _AVR_CPU_NAME_ "ATmega64" +#elif defined (__AVR_ATmega640__) + #define _AVR_CPU_NAME_ "ATmega640" +#elif defined (__AVR_ATmega644__) + #define _AVR_CPU_NAME_ "ATmega644" +#elif defined (__AVR_ATmega644P__) + #define _AVR_CPU_NAME_ "ATmega644P" +#elif defined (__AVR_ATmega645__) + #define _AVR_CPU_NAME_ "ATmega645" +#elif defined (__AVR_ATmega6450__) + #define _AVR_CPU_NAME_ "ATmega6450" +#elif defined (__AVR_ATmega649__) + #define _AVR_CPU_NAME_ "ATmega649" +#elif defined (__AVR_ATmega6490__) + #define _AVR_CPU_NAME_ "ATmega6490" +#elif defined (__AVR_ATmega103__) + #define _AVR_CPU_NAME_ "ATmega103" +#elif defined (__AVR_ATmega32__) + #define _AVR_CPU_NAME_ "Atmega32" +#elif defined (__AVR_ATmega323__) + #define _AVR_CPU_NAME_ "ATmega323" +#elif defined (__AVR_ATmega324P__) + #define _AVR_CPU_NAME_ "ATmega324P" +#elif defined (__AVR_ATmega325__) + #define _AVR_CPU_NAME_ "ATmega325" +#elif defined (__AVR_ATmega325P__) + #define _AVR_CPU_NAME_ "ATmega325P" +#elif defined (__AVR_ATmega3250__) + #define _AVR_CPU_NAME_ "ATmega3250" +#elif defined (__AVR_ATmega3250P__) + #define _AVR_CPU_NAME_ "ATmega3250P" +#elif defined (__AVR_ATmega328P__) + #define _AVR_CPU_NAME_ "ATmega328P" +#elif defined (__AVR_ATmega329__) + #define _AVR_CPU_NAME_ "ATmega329" +#elif defined (__AVR_ATmega329P__) + #define _AVR_CPU_NAME_ "ATmega329P" +#elif defined (__AVR_ATmega3290__) + #define _AVR_CPU_NAME_ "ATmega3290" +#elif defined (__AVR_ATmega3290P__) + #define _AVR_CPU_NAME_ "ATmega3290P" +#elif defined (__AVR_ATmega32HVB__) + #define _AVR_CPU_NAME_ "ATmega32HVB" +#elif defined (__AVR_ATmega406__) + #define _AVR_CPU_NAME_ "ATmega406" +#elif defined (__AVR_ATmega16__) + #define _AVR_CPU_NAME_ "Atmega16" +#elif defined (__AVR_ATmega161__) + #define _AVR_CPU_NAME_ "ATmega161" +#elif defined (__AVR_ATmega162__) + #define _AVR_CPU_NAME_ "ATmega162" +#elif defined (__AVR_ATmega163__) + #define _AVR_CPU_NAME_ "ATmega163" +#elif defined (__AVR_ATmega164P__) + #define _AVR_CPU_NAME_ "ATmega164P" +#elif defined (__AVR_ATmega165__) + #define _AVR_CPU_NAME_ "ATmega165" +#elif defined (__AVR_ATmega165P__) + #define _AVR_CPU_NAME_ "ATmega165P" +#elif defined (__AVR_ATmega168__) + #define _AVR_CPU_NAME_ "ATmega168" +#elif defined (__AVR_ATmega168P__) + #define _AVR_CPU_NAME_ "ATmega168P" +#elif defined (__AVR_ATmega169__) + #define _AVR_CPU_NAME_ "Atmega169" +#elif defined (__AVR_ATmega169P__) + #define _AVR_CPU_NAME_ "ATmega169P" +#elif defined (__AVR_ATmega8HVA__) + #define _AVR_CPU_NAME_ "ATmega8HVA" +#elif defined (__AVR_ATmega16HVA__) + #define _AVR_CPU_NAME_ "ATmega16HVA" +#elif defined (__AVR_ATmega8__) + #define _AVR_CPU_NAME_ "ATmega8" +#elif defined (__AVR_ATmega48__) + #define _AVR_CPU_NAME_ "ATmega48" +#elif defined (__AVR_ATmega48P__) + #define _AVR_CPU_NAME_ "ATmega48P" +#elif defined (__AVR_ATmega88__) + #define _AVR_CPU_NAME_ "ATmega88" +#elif defined (__AVR_ATmega88P__) + #define _AVR_CPU_NAME_ "ATmega88P" +#elif defined (__AVR_ATmega8515__) + #define _AVR_CPU_NAME_ "ATmega8515" +#elif defined (__AVR_ATmega8535__) + #define _AVR_CPU_NAME_ "ATmega8535" +#elif defined (__AVR_AT90S8535__) +#elif defined (__AVR_AT90C8534__) +#elif defined (__AVR_AT90S8515__) +#elif defined (__AVR_AT90S4434__) +#elif defined (__AVR_AT90S4433__) +#elif defined (__AVR_AT90S4414__) +#elif defined (__AVR_ATtiny22__) +#elif defined (__AVR_ATtiny26__) +#elif defined (__AVR_AT90S2343__) +#elif defined (__AVR_AT90S2333__) +#elif defined (__AVR_AT90S2323__) +#elif defined (__AVR_AT90S2313__) +#elif defined (__AVR_ATtiny2313__) + #define _AVR_CPU_NAME_ "ATtiny2313" +#elif defined (__AVR_ATtiny13__) +#elif defined (__AVR_ATtiny13A__) +#elif defined (__AVR_ATtiny25__) +#elif defined (__AVR_ATtiny45__) +#elif defined (__AVR_ATtiny85__) +#elif defined (__AVR_ATtiny24__) +#elif defined (__AVR_ATtiny44__) +#elif defined (__AVR_ATtiny84__) +#elif defined (__AVR_ATtiny261__) +#elif defined (__AVR_ATtiny461__) +#elif defined (__AVR_ATtiny861__) +#elif defined (__AVR_ATtiny43U__) +#elif defined (__AVR_ATtiny48__) +#elif defined (__AVR_ATtiny88__) +#elif defined (__AVR_ATtiny167__) + +#else + #error cpu not defined +#endif + + +#if !defined (_AVR_CPU_NAME_) +// #define _AVR_CPU_NAME_ "UNKNOWN" +#endif diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde new file mode 100644 index 00000000000..3fc73897c1e --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -0,0 +1,95 @@ +//************************************************************************ +//* Arduino String Test +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + + + +#ifdef __MWERKS__ +#include "codewarrior.h" +#else +#include +#endif +#include +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" +#include +#include "avr_cpunames.h" + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) +#define kBoard_PinCount 20 +#define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define kBoard_PinCount 70 +#define kBoard_AnalogCount 16 +#endif + +//************************************************************************ +void setup() +{ + short ii; + uint8_t timerNumber; + char testName[64]; + + gYotalErrors = 0; + gTestCount = 0; + +/* +* Test Variable Setup +*/ + + Serial.begin(9600); + delay(1000); + + gTestStartTime = millis(); + ATS_PrintTestStart("Arduino", "Test of Arduino Constants"); + +/* +* Run the tests +*/ + + +//test true constant + strcpy(testName, "1. Test of true constant"); + if (true != 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + +//test false consts + strcpy(testName, "2. Test of false constant"); + if (false == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + +/* +* Test complete +*/ + ATS_PrintTestEnd(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + diff --git a/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde b/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde new file mode 100644 index 00000000000..a681cb1e4cb --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde @@ -0,0 +1,105 @@ +//************************************************************************ +//* Arduino Test Suite +//* (C) 2010 by Mark Sproul +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Aug 31, 2010 Started on TestArduino +//************************************************************************ + +#ifdef __MWERKS__ + #include "codewarrior.h" +#else + #include +#endif + +#include + + + +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" + +#include + +#include "avr_cpunames.h" + + + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + #define kBoard_PinCount 20 + #define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define kBoard_PinCount 70 + #define kBoard_AnalogCount 16 +#endif + +//************************************************************************ +void setup() +{ +short ii; +uint8_t timerNumber; + + + gYotalErrors = 0; + gTestCount = 0; + + Serial.begin(9600); + delay(1000); + + gTestStartTime = millis(); + ATS_PrintTestStart("Arduino", "general"); + + + //* test digital pins + //* we start at 2 because 0/1 are RXD/TXD + for (ii=2; ii 1) + ATS_TestSerialLoopback(&Serial1, "Serial1"); +#endif +#if (SERIAL_PORT_COUNT > 2) + ATS_TestSerialLoopback(&Serial2, "Serial2"); +#endif +#if (SERIAL_PORT_COUNT > 3) + ATS_TestSerialLoopback(&Serial3, "Serial3"); +#endif + + ATS_Test_EEPROM(); + + ATS_PrintTestEnd(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + diff --git a/libraries/ArduinoTestSuite/examples/ATS_General/Makefile b/libraries/ArduinoTestSuite/examples/ATS_General/Makefile new file mode 100644 index 00000000000..466dbbc659b --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_General/Makefile @@ -0,0 +1,125 @@ +#BOARD ?= mega1280stk500v2 +BOARD ?= mega2560stk500v2 +#BOARD ?= arduino_butterfly +#BOARD ?= arduino_wiring1281 +#BOARD = arduino_amber128 +#BOARD = arduino_duino644 +#BOARD = arduino_illuminato +#BOARD = arduino_penguino +#BOARD = arduino_cerebot_plus +#BOARD = arduino_android2561 +#BOARD = arduino_android2561_16 +#BOARD = atmega8 +#BOARD = atmega88 +#BOARD = arduino_atmega16 +#BOARD = atmega328 +#BOARD = arduino_attiny45 +#BOARD = arduino_attiny2313 +#BOARD = dragonrider328 +#BOARD = arduino_atmega8535 +#BOARD = dragonrider8535 +#BOARD = arduino_1284p +#BOARD = arduino_atmega8515 +#BOARD = arduino_at90usbkey + +PORT ?= /dev/tty.usbserial-A900cbro +#PORT = /dev/tty.usbserial-A800eGS5 +#PORT = /dev/tty.usbserial-FTF4BHEE +#PORT = /dev/tty.usbserial-RCTBW0HY + + +# mega1280 stk500 v2 +ifeq ($(BOARD),mega1280stk500v2) +PORT = /dev/tty.usbserial-A600bySf +endif + + +#atmega8 +ifeq ($(BOARD),atmega8) +PORT = /dev/tty.usbserial-A700dARA +endif + +#1281 +ifeq ($(BOARD),arduino_wiring1281) +PORT = /dev/tty.usbserial-A700e5Bx +endif + +# Illuminato +ifeq ($(BOARD),arduino_illuminato) +PORT = /dev/tty.usbserial-A80098Dl +endif + +# mega2560 +ifeq ($(BOARD),mega2560stk500v2) +PORT = /dev/tty.usbmodem1a21 +endif + +# arduino_amber128 +ifeq ($(BOARD),arduino_amber128) +PORT = /dev/tty.usbserial-FTF4BHEE +endif + +# arduino_penguino +ifeq ($(BOARD),arduino_penguino) +PORT = /dev/cu.penguino-uart 115200 +endif + +# arduino_penguino +ifeq ($(BOARD),arduino_cerebot_plus) +PORT = /dev/tty.usbserial-FTF4BHEE +endif + +# arduino_android2561 +ifeq ($(BOARD),arduino_android2561) +PORT = /dev/tty.usbserial-A800cAoo +endif + +# arduino_android2561_16 +ifeq ($(BOARD),arduino_android2561_16) +PORT = /dev/tty.usbserial-A800cAoo +endif + + +# atmega328 +ifeq ($(BOARD),atmega328) +PORT = /dev/tty.usbserial-A700dB60 +endif + + +# dragonrider328 +ifeq ($(BOARD),dragonrider328) +PORT = usb +endif + +# dragonrider8535 +ifeq ($(BOARD),dragonrider8535) +PORT = usb +endif + + +#arduino_butterfly +ifeq ($(BOARD),arduino_butterfly) +PORT = /dev/tty.usbserial-FTF4BHEE +endif + +#arduino_atmega16 +ifeq ($(BOARD),arduino_atmega16) +PORT = /dev/tty.usbserial-FTF4BHEE +endif + + + + +#LIB_DIRS = ../libraries/WiseClock2 +LIB_DIRS = ../libraries/UnivGraphicsLib /Applications/Arduino.app/Contents/Resources/Java/libraries/EEPROM /Applications/Arduino.app/Contents/Resources/Java/libraries/Wire /Applications/Arduino.app/Contents/Resources/Java/libraries/Wire/utility +LIB_DIRS += /Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal +LIB_DIRS += ../libraries/Digilent_lib +ARD_HOME = /Applications/Arduino.app/Contents/Resources/Java +#ARD_BIN = /usr/local/test/avr1/bin +#AVRDUDE_HOME = /usr/local/CrossPack-AVR +AVRDUDE_HOME = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr +#ARD_BIN = /usr/local/test/avr1/bin + + +include ../Makefile.master + diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde new file mode 100644 index 00000000000..7f2087f7bb8 --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -0,0 +1,79 @@ +//************************************************************************ +//* Arduino String Test +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + + + +#ifdef __MWERKS__ +#include "codewarrior.h" +#else +#include +#endif +#include +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" +#include +#include "avr_cpunames.h" + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) +#define kBoard_PinCount 20 +#define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define kBoard_PinCount 70 +#define kBoard_AnalogCount 16 +#endif + +//************************************************************************ +void setup() +{ + short ii; + uint8_t timerNumber; + char testName[64]; + + gYotalErrors = 0; + gTestCount = 0; + +/* +* Test Variable Setup +*/ + + Serial.begin(9600); + delay(1000); + + gTestStartTime = millis(); + ATS_PrintTestStart("Arduino", "Skeleton Test"); + +/* +* Run the tests +*/ + + strcpy(testName, "1. Test of true test status"); + ATS_PrintTestStatus(testName, true); + + strcpy(testName, "2. Test of false test status, this will fail."); + ATS_PrintTestStatus(testName, false); + + +/* +* Test complete +*/ + ATS_PrintTestEnd(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde new file mode 100644 index 00000000000..fab3868f00b --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -0,0 +1,157 @@ +//************************************************************************ +//* Arduino String Test +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + + + +#ifdef __MWERKS__ +#include "codewarrior.h" +#else +#include +#endif +#include +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" +#include +#include "avr_cpunames.h" + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) +#define kBoard_PinCount 20 +#define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define kBoard_PinCount 70 +#define kBoard_AnalogCount 16 +#endif + +//************************************************************************ +void setup() +{ + short ii; + uint8_t timerNumber; + char testName[64]; + + + + gYotalErrors = 0; + gTestCount = 0; + + /* +* Test Variable Setup + */ + + String stringOne = String("stringThree = "); + String stringTwo = String("this string"); + String stringThree = String (); + char charResult[100]; + + Serial.begin(9600); + delay(1000); + + gTestStartTime = millis(); + ATS_PrintTestStart("Arduino", "String Test"); + + /* +* Run the tests + */ + + // adding a constant integer to a string: + stringThree = stringOne + 123; + strcpy(charResult, "\0"); + stringThree.toCharArray(charResult, sizeof(charResult)); + + strcpy(testName, "Adding a constant integer to a string:"); + if (strcmp(charResult,"stringThree = 123" ) == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + + + + // adding a constant long interger to a string: + stringThree = stringOne + 123456789; + stringThree.toCharArray(charResult, sizeof(charResult)); + + strcpy(testName, "Adding a constant long interger to a string"); + if (strcmp(charResult,"stringThree = 123456789" ) == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + + + // adding a constant character to a string: + stringThree = stringOne + 'A'; + stringThree.toCharArray(charResult, sizeof(charResult)); + + strcpy(testName, "Adding a constant character to a string"); + if (strcmp(charResult,"stringThree = A" ) == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + + + + // adding a constant string to a string: + stringThree = stringOne + "abc"; + stringThree.toCharArray(charResult, sizeof(charResult)); + + strcpy(testName, "Adding a constant string variable to a string"); + if (strcmp(charResult,"stringThree = abc" ) == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + + stringThree = stringOne + stringTwo; + stringThree.toCharArray(charResult, sizeof(charResult)); + + strcpy(testName, "Adding a constant long interger to a string"); + if (strcmp(charResult,"stringThree = this string" ) == 0) + { + ATS_PrintTestStatus(testName, true); + } + else + { + ATS_PrintTestStatus(testName, false); + } + + + + /* +* Test complete + */ + ATS_PrintTestEnd(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + From 649a7a6d6a98d3c1c62bb351c9def6526076d3cb Mon Sep 17 00:00:00 2001 From: ricklon Date: Sun, 17 Oct 2010 15:16:26 -0400 Subject: [PATCH 14/37] Fined tuned the testing syntax, fixed the header to have ATS_PrintTestStatus. --- .../ArduinoTestSuite/ArduinoTestSuite.cpp | 7 +- libraries/ArduinoTestSuite/ArduinoTestSuite.h | 2 +- .../examples/ATS_Constants/ATS_Constants.pde | 74 +++++---- .../ATS_StringTest/ATS_StringTest.pde | 154 ++++++++++++------ 4 files changed, 149 insertions(+), 88 deletions(-) diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp index 025fa402c15..29a9687fba5 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp @@ -197,9 +197,10 @@ int sLen; //************************************************************************ -void ATS_PrintProperty( int propertyTagNum, - char *propertyName, - char *propertyValue) +//* this is for internal use only, not made pubic to the API +static void ATS_PrintProperty( int propertyTagNum, + char *propertyName, + char *propertyValue) { char lineBuffer[64]; diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.h b/libraries/ArduinoTestSuite/ArduinoTestSuite.h index 35bd7a36464..704be8fb466 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.h +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.h @@ -25,8 +25,8 @@ void ATS_PrintTestStart(char *manufName, char *testSuiteName); -void ATS_PrintTestStatus(char *testString, boolean passed); void ATS_PrintTestEnd(); +void ATS_PrintTestStatus(char *testString, boolean passed); boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest); boolean ATS_Test_PWM_Pin(uint8_t digitalPinToTest); boolean ATS_Test_AnalogInput(uint8_t analogPintoTest); diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index 3fc73897c1e..1cfded7b678 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -35,13 +35,13 @@ void setup() short ii; uint8_t timerNumber; char testName[64]; - + gYotalErrors = 0; gTestCount = 0; -/* + /* * Test Variable Setup -*/ + */ Serial.begin(9600); delay(1000); @@ -49,36 +49,45 @@ void setup() gTestStartTime = millis(); ATS_PrintTestStart("Arduino", "Test of Arduino Constants"); -/* + /* * Run the tests -*/ - - -//test true constant - strcpy(testName, "1. Test of true constant"); - if (true != 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } - -//test false consts - strcpy(testName, "2. Test of false constant"); - if (false == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } - -/* -* Test complete -*/ + */ + + + //test true constant + + ATS_PrintTestStatus("1. Test of true constant", true == 1); + + //test false consts + ATS_PrintTestStatus( "2. Test of false constant", false == 0); + + //Test of HIGH == 1 + ATS_PrintTestStatus( "3. Test of HIGH == 1", HIGH == 1); + + //Test of LOW == 0 + ATS_PrintTestStatus( "4. Test of LOW == 0", LOW == 0); + + //Test of INPUT == 1 + ATS_PrintTestStatus( "5. Test of INPUT == 1", HIGH == 1); + + //Test of OUTPUT == 0 + ATS_PrintTestStatus( "6. Test of OUTPUT == 0", LOW == 0); + + //test decimal + ATS_PrintTestStatus( "7. Test of decimal constant", 101 == ((1 * pow(10,2)) + (0 * pow(10,1)) + 1)); + + //test binary + ATS_PrintTestStatus( "8. Test of binary constant", B101 == 5); + + //test octal + ATS_PrintTestStatus( "9. Test of octal constant", 0101 == 65); + + //test hexadecimal + ATS_PrintTestStatus( "7. Test of hexadecimal constant", (0x101 == 257)); + + /* + * Test complete + */ ATS_PrintTestEnd(); } @@ -93,3 +102,4 @@ void loop() + diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde index fab3868f00b..19ab07c24a7 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -29,15 +29,15 @@ #define kBoard_AnalogCount 16 #endif + //************************************************************************ void setup() { + short ii; uint8_t timerNumber; char testName[64]; - - gYotalErrors = 0; gTestCount = 0; @@ -56,92 +56,136 @@ void setup() gTestStartTime = millis(); ATS_PrintTestStart("Arduino", "String Test"); + /* * Run the tests */ // adding a constant integer to a string: stringThree = stringOne + 123; - strcpy(charResult, "\0"); + //strcpy(charResult, "\0"); stringThree.toCharArray(charResult, sizeof(charResult)); - strcpy(testName, "Adding a constant integer to a string:"); - if (strcmp(charResult,"stringThree = 123" ) == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } - - + ATS_PrintTestStatus("1. Adding a constant integer to a string:", strcmp(charResult,"stringThree = 123" ) == 0); // adding a constant long interger to a string: stringThree = stringOne + 123456789; stringThree.toCharArray(charResult, sizeof(charResult)); - strcpy(testName, "Adding a constant long interger to a string"); - if (strcmp(charResult,"stringThree = 123456789" ) == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } + ATS_PrintTestStatus("2. Adding a constant long interger to a string", strcmp(charResult,"stringThree = 123456789" ) == 0); // adding a constant character to a string: stringThree = stringOne + 'A'; stringThree.toCharArray(charResult, sizeof(charResult)); - strcpy(testName, "Adding a constant character to a string"); - if (strcmp(charResult,"stringThree = A" ) == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } - + ATS_PrintTestStatus("3. Adding a constant character to a string", strcmp(charResult,"stringThree = A" ) == 0); // adding a constant string to a string: stringThree = stringOne + "abc"; stringThree.toCharArray(charResult, sizeof(charResult)); - strcpy(testName, "Adding a constant string variable to a string"); - if (strcmp(charResult,"stringThree = abc" ) == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } + ATS_PrintTestStatus("4. Adding a constant string variable to a string", strcmp(charResult,"stringThree = abc" ) == 0); + //"5. Adding a constant long interger to a string" stringThree = stringOne + stringTwo; stringThree.toCharArray(charResult, sizeof(charResult)); - strcpy(testName, "Adding a constant long interger to a string"); - if (strcmp(charResult,"stringThree = this string" ) == 0) - { - ATS_PrintTestStatus(testName, true); - } - else - { - ATS_PrintTestStatus(testName, false); - } + ATS_PrintTestStatus("5. Adding a constant long interger to a string", strcmp(charResult,"stringThree = this string" ) == 0); + + + /* +* setup up String Comparison Operater Tests + */ + + stringOne = String("this"); + stringTwo = String("that"); + + // two strings equal: + ATS_PrintTestStatus("6. Two strings equal",stringOne == "this"); + + // two strings not equal: + ATS_PrintTestStatus("7. Two strings not equal",stringOne != stringTwo); + + // two strings not equal (case sensitivity matters): + stringOne = "This"; + stringTwo = "this"; + ATS_PrintTestStatus("8. Two strings not equal [case sensitivity matters]", stringOne != stringTwo); + + // you can also use equals() to see if two strings are the same: + stringOne = "this"; + stringTwo = "this"; + ATS_PrintTestStatus("9. Equals() method equals", stringOne.equals(stringTwo)); + + + // you can also use not equals() to see if two strings are not the same: + stringOne = String("This"); + stringTwo = String("this"); + ATS_PrintTestStatus("10. Not equals() method equals", !stringOne.equals(stringTwo)); + + // or perhaps you want to ignore case: + ATS_PrintTestStatus("11. EqualsIgnoreCase() method equals", stringOne.equalsIgnoreCase(stringTwo)); + + // a numeric string compared to the number it represents: + stringOne = "1"; + int numberOne = 1; + ATS_PrintTestStatus("12. A numeric string compared to the number it represents", stringOne == numberOne); + // two numeric strings compared: + stringOne = "2"; + stringTwo = "1"; + ATS_PrintTestStatus("13. Two numeric strings compared",stringOne >= stringTwo); + + + // comparison operators can be used to compare strings for alphabetic sorting too: + + + stringOne = String("Brown"); + // ATS_PrintTestStatus("14. comparison operator < can be used to compare strings for alphabetic sorting ",stringOne < "Charles"); + // ATS_PrintTestStatus("15. comparison operator > can be used to compare strings for alphabetic sorting ",stringOne > "Adams"); + // ATS_PrintTestStatus("16. comparison operator <= can be used to compare strings for alphabetic sorting ",stringOne <= "Browne"); + // ATS_PrintTestStatus("17. comparison operator >= can be used to compare strings for alphabetic sorting ",stringOne >= "Brow"); + + + + // the compareTo() operator also allows you to compare strings + stringOne = "Cucumber"; + stringTwo = "Cucuracha"; + + ATS_PrintTestStatus("18. The compareTo() operator also allows you to compare strings", stringOne.compareTo(stringTwo) < 0); + + // compareTo() String with numnber > String with number: + stringOne = "Sensor: 50"; + stringTwo= "Sensor: 150"; + ATS_PrintTestStatus("19. The compareTo() String with integers", stringOne.compareTo(stringTwo) < 0); + + // compareTo() String with numnber > String with number append integer, matches example code: + stringOne = "Sensor: "; + stringTwo= "Sensor: "; + stringOne += 50; + stringTwo += 150; + ATS_PrintTestStatus("20. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); /* -* Test complete +* setup up String Append Operation Tests + */ + // Serious awful problem here + stringOne = String("Sensor "); + stringTwo = String("value"); + + stringOne += stringTwo; + // ATS_PrintTestStatus("N. Adding string to string += ",(strcmp(charResult,"Sensor value" ) == 0)); + //ATS_PrintTestStatus("N. Adding string to string += ", stringOne.equals("Sensor value")); + + ATS_PrintTestStatus("21. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); + /* + * Test complete */ ATS_PrintTestEnd(); + } @@ -155,3 +199,9 @@ void loop() + + + + + + From fe4397a06243855a4d5bef1c1b7c8c9442128da2 Mon Sep 17 00:00:00 2001 From: ricklon Date: Sun, 17 Oct 2010 15:29:49 -0400 Subject: [PATCH 15/37] Fixed the test nams in the comments at top. --- .../examples/ATS_Constants/ATS_Constants.pde | 2 +- .../examples/ATS_Skeleton/ATS_Skeleton.pde | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index 1cfded7b678..c5e5ec9736a 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -1,5 +1,5 @@ //************************************************************************ -//* Arduino String Test +//* Arduino Test of Arduino Constants //* (C) 2010 by Rick Anderson //* Open source as per standard Arduino code //* diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde index 7f2087f7bb8..4650e909268 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -1,5 +1,5 @@ //************************************************************************ -//* Arduino String Test +//* Arduino Test Example Skeleton //* (C) 2010 by Rick Anderson //* Open source as per standard Arduino code //* @@ -53,11 +53,9 @@ void setup() * Run the tests */ - strcpy(testName, "1. Test of true test status"); - ATS_PrintTestStatus(testName, true); + ATS_PrintTestStatus("1. Test of true test status", true); - strcpy(testName, "2. Test of false test status, this will fail."); - ATS_PrintTestStatus(testName, false); + ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); /* From 85e7900ff1b37b6c5002a6a74a1962bbc53ff7bb Mon Sep 17 00:00:00 2001 From: ricklon Date: Sun, 17 Oct 2010 15:47:12 -0400 Subject: [PATCH 16/37] Added static to ATS_PrintProperty to fix compile issue. --- libraries/ArduinoTestSuite/ArduinoTestSuite.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.h b/libraries/ArduinoTestSuite/ArduinoTestSuite.h index 704be8fb466..73dd2a1bc3f 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.h +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.h @@ -26,13 +26,12 @@ void ATS_PrintTestStart(char *manufName, char *testSuiteName); void ATS_PrintTestEnd(); -void ATS_PrintTestStatus(char *testString, boolean passed); boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest); boolean ATS_Test_PWM_Pin(uint8_t digitalPinToTest); boolean ATS_Test_AnalogInput(uint8_t analogPintoTest); boolean ATS_Test_EEPROM(void); -void ATS_PrintProperty( int propertyTagNum, +static void ATS_PrintProperty( int propertyTagNum, char *propertyName, char *propertyValue); From 1a966f691f82942006d4b24894f7cb4171b12bc0 Mon Sep 17 00:00:00 2001 From: ricklon Date: Sun, 17 Oct 2010 15:57:02 -0400 Subject: [PATCH 17/37] Cleaned up the includes. --- .../examples/ATS_Constants/ATS_Constants.pde | 18 +---------- .../examples/ATS_Skeleton/ATS_Skeleton.pde | 18 ----------- .../ATS_StringTest/ATS_StringTest.pde | 31 ++++--------------- 3 files changed, 7 insertions(+), 60 deletions(-) diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index c5e5ec9736a..78cd481fdf7 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -9,25 +9,10 @@ -#ifdef __MWERKS__ -#include "codewarrior.h" -#else -#include -#endif -#include + #include "WProgram.h" #include "HardwareSerial.h" -#include "pins_arduino.h" #include -#include "avr_cpunames.h" - -#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) -#define kBoard_PinCount 20 -#define kBoard_AnalogCount 6 -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define kBoard_PinCount 70 -#define kBoard_AnalogCount 16 -#endif //************************************************************************ void setup() @@ -55,7 +40,6 @@ void setup() //test true constant - ATS_PrintTestStatus("1. Test of true constant", true == 1); //test false consts diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde index 4650e909268..5623f2121f6 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -7,27 +7,9 @@ //* Oct 16, 2010 Started on String Test //************************************************************************ - - -#ifdef __MWERKS__ -#include "codewarrior.h" -#else -#include -#endif -#include #include "WProgram.h" #include "HardwareSerial.h" -#include "pins_arduino.h" #include -#include "avr_cpunames.h" - -#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) -#define kBoard_PinCount 20 -#define kBoard_AnalogCount 6 -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define kBoard_PinCount 70 -#define kBoard_AnalogCount 16 -#endif //************************************************************************ void setup() diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde index 19ab07c24a7..e76af92fe80 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -7,28 +7,9 @@ //* Oct 16, 2010 Started on String Test //************************************************************************ - - -#ifdef __MWERKS__ -#include "codewarrior.h" -#else -#include -#endif -#include #include "WProgram.h" #include "HardwareSerial.h" -#include "pins_arduino.h" #include -#include "avr_cpunames.h" - -#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) -#define kBoard_PinCount 20 -#define kBoard_AnalogCount 6 -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define kBoard_PinCount 70 -#define kBoard_AnalogCount 16 -#endif - //************************************************************************ void setup() @@ -140,13 +121,13 @@ void setup() // comparison operators can be used to compare strings for alphabetic sorting too: - +/* uncommented the entire test fails. stringOne = String("Brown"); - // ATS_PrintTestStatus("14. comparison operator < can be used to compare strings for alphabetic sorting ",stringOne < "Charles"); - // ATS_PrintTestStatus("15. comparison operator > can be used to compare strings for alphabetic sorting ",stringOne > "Adams"); - // ATS_PrintTestStatus("16. comparison operator <= can be used to compare strings for alphabetic sorting ",stringOne <= "Browne"); - // ATS_PrintTestStatus("17. comparison operator >= can be used to compare strings for alphabetic sorting ",stringOne >= "Brow"); - + ATS_PrintTestStatus("14. comparison operator < can be used to compare strings for alphabetic sorting ",stringOne < "Charles"); + ATS_PrintTestStatus("15. comparison operator > can be used to compare strings for alphabetic sorting ",stringOne > "Adams"); + ATS_PrintTestStatus("16. comparison operator <= can be used to compare strings for alphabetic sorting ",stringOne <= "Browne"); + ATS_PrintTestStatus("17. comparison operator >= can be used to compare strings for alphabetic sorting ",stringOne >= "Brow"); +*/ // the compareTo() operator also allows you to compare strings From 7ed56a357256ddb5085175894e2891b95d602830 Mon Sep 17 00:00:00 2001 From: ricklon Date: Sun, 17 Oct 2010 18:39:37 -0400 Subject: [PATCH 18/37] Missing function put back in. --- libraries/ArduinoTestSuite/ArduinoTestSuite.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.h b/libraries/ArduinoTestSuite/ArduinoTestSuite.h index 73dd2a1bc3f..c5a79d92993 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.h +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.h @@ -26,6 +26,7 @@ void ATS_PrintTestStart(char *manufName, char *testSuiteName); void ATS_PrintTestEnd(); +void ATS_PrintTestStatus(char *testString, boolean passed); boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest); boolean ATS_Test_PWM_Pin(uint8_t digitalPinToTest); boolean ATS_Test_AnalogInput(uint8_t analogPintoTest); From b1415823ea966876366d1b70bae6590f64f16c3a Mon Sep 17 00:00:00 2001 From: ricklon Date: Tue, 19 Oct 2010 00:07:38 -0400 Subject: [PATCH 19/37] Updated to latest core test code, and changed the examples to match. Memory testing added. String library test suffers from some kind of memory corruption. eed test to isolate the problem. --- .../ArduinoTestSuite/ArduinoTestSuite.cpp | 180 +++++++++++------- libraries/ArduinoTestSuite/ArduinoTestSuite.h | 35 +++- .../examples/ATS_Constants/ATS_Constants.pde | 23 +-- .../examples/ATS_General/ATS_General.pde | 111 +++++------ .../examples/ATS_General/Makefile | 125 ------------ .../examples/ATS_Skeleton/ATS_Skeleton.pde | 37 ++-- .../ATS_StringTest/ATS_StringTest.pde | 51 +++-- 7 files changed, 233 insertions(+), 329 deletions(-) delete mode 100644 libraries/ArduinoTestSuite/examples/ATS_General/Makefile diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp index 29a9687fba5..03e9e1073f2 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp @@ -14,19 +14,16 @@ //* Lesser General Public License for more details. //************************************************************************ //* Aug 31, 2010 Started on TestArduino +//* Oct 18, 2010 Added memory testing //************************************************************************ -#ifdef __MWERKS__ - #include "codewarrior.h" -// #include -#else - #include -#endif - +#include #include #include -#include + + +#include "ArduinoTestSuite.h" #include "WProgram.h" @@ -56,7 +53,7 @@ enum ATS_LIBC_version, ATS_CompiledDate, ATS_TestSuiteName, - ATS_ElapsedTime, + ATS_FreeMemory, }; @@ -73,7 +70,7 @@ prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC-Version"; prog_char gTextMsg_AVR_LIBC[] PROGMEM = "AVR-LibC-Ver"; prog_char gTextMsg_COMPILED_DATE[] PROGMEM = "Compiled-date"; prog_char gTextMsg_TEST_SUITE_NAME[] PROGMEM = "Test-Suite-Name"; -prog_char gTextMsg_ELAPSED_TIME[] PROGMEM = "Elapsed-time"; +prog_char gTextMsg_memoryUsage[] PROGMEM = "Free-memory"; prog_char gTextMsg_dotdotdot[] PROGMEM = "... "; prog_char gTextMsg_ok[] PROGMEM = "ok"; prog_char gTextMsg_FAIL[] PROGMEM = "FAIL"; @@ -108,10 +105,81 @@ void Serial_println_P(prog_char *flashMemStr) Serial.println(); } +//************************************************************************ +//* this is for internal use only, not made pubic to the API +static void ATS_PrintProperty( int propertyTagNum, + char *propertyName, + char *propertyValue) +{ +char lineBuffer[64]; + + strcpy_P(lineBuffer, gTextMsg_info); + switch(propertyTagNum) + { + case 0: + strcat(lineBuffer, propertyName); + break; + + case ATS_Manufacturer: + strcat_P(lineBuffer, gTextMsg_Manufacturer); + break; + + case ATS_CPU: + strcat_P(lineBuffer, gTextMsg_CPUname); + break; + + case ATS_GCC_version: + strcat_P(lineBuffer, gTextMsg_GCC_VERSION); + break; + + case ATS_LIBC_version: + strcat_P(lineBuffer, gTextMsg_AVR_LIBC); + break; + + case ATS_CompiledDate: + strcat_P(lineBuffer, gTextMsg_COMPILED_DATE); + break; + + case ATS_TestSuiteName: + strcat_P(lineBuffer, gTextMsg_TEST_SUITE_NAME); + break; + + case ATS_FreeMemory: + strcat_P(lineBuffer, gTextMsg_memoryUsage); + break; + } + + while (strlen(lineBuffer) < 20) + { + strcat(lineBuffer, " "); + } + + strcat_P(lineBuffer, gTextMsg_spaceEqual); + if (propertyValue != 0) + { + strcat(lineBuffer, propertyValue); + } + Serial.println(lineBuffer); + +} + + + //************************************************************************ -void ATS_PrintTestStart(char *manufName, char *testSuiteName) +void ATS_begin(char *manufName, char *testSuiteName) { +int freeMemory; +char memoryMsg[48]; + + gYotalErrors = 0; + gTestCount = 0; + + Serial.begin(9600); + delay(1000); + + gTestStartTime = millis(); + Serial.println(); Serial.println(); Serial.println(); @@ -123,17 +191,21 @@ void ATS_PrintTestStart(char *manufName, char *testSuiteName) ATS_PrintProperty(ATS_CompiledDate, 0, __DATE__); ATS_PrintProperty(ATS_TestSuiteName, 0, testSuiteName); + freeMemory = ATS_GetFreeMemory(); + sprintf(memoryMsg, "%d bytes", freeMemory); + ATS_PrintProperty(ATS_FreeMemory, 0, memoryMsg); randomSeed(analogRead(0)); } //************************************************************************ -void ATS_PrintTestEnd() +void ATS_end() { long seconds; long milliSecs; + Serial_println_P(gTextMsg_dashLine); // Ran 4 tests in 0.000s @@ -196,66 +268,6 @@ int sLen; } -//************************************************************************ -//* this is for internal use only, not made pubic to the API -static void ATS_PrintProperty( int propertyTagNum, - char *propertyName, - char *propertyValue) -{ -char lineBuffer[64]; - - strcpy_P(lineBuffer, gTextMsg_info); - switch(propertyTagNum) - { - case 0: - strcat(lineBuffer, propertyName); - break; - - case ATS_Manufacturer: - strcat_P(lineBuffer, gTextMsg_Manufacturer); - break; - - case ATS_CPU: - strcat_P(lineBuffer, gTextMsg_CPUname); - break; - - case ATS_GCC_version: - strcat_P(lineBuffer, gTextMsg_GCC_VERSION); - break; - - case ATS_LIBC_version: - strcat_P(lineBuffer, gTextMsg_AVR_LIBC); - break; - - case ATS_CompiledDate: - strcat_P(lineBuffer, gTextMsg_COMPILED_DATE); - break; - - case ATS_TestSuiteName: - strcat_P(lineBuffer, gTextMsg_TEST_SUITE_NAME); - break; - - case ATS_ElapsedTime: - strcat_P(lineBuffer, gTextMsg_ELAPSED_TIME); - break; - } - - while (strlen(lineBuffer) < 20) - { - strcat(lineBuffer, " "); - } - - strcat_P(lineBuffer, gTextMsg_spaceEqual); - if (propertyValue != 0) - { - strcat(lineBuffer, propertyValue); - } - Serial.println(lineBuffer); -// ATS_PrintTestStatus(lineBuffer, PASSED); - -} - - //************************************************************************ //* returns true if no errors, false if there is an error @@ -674,6 +686,30 @@ char reportString[48]; +//************************************************************************ +extern unsigned int __data_start; +extern unsigned int __data_end; +extern unsigned int __bss_start; +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; + +//************************************************************************ +int ATS_GetFreeMemory() +{ +int free_memory; + + if((int)__brkval == 0) + { + free_memory = ((int)&free_memory) - ((int)&__bss_end); + } + else + { + free_memory = ((int)&free_memory) - ((int)__brkval); + } + return free_memory; +} + diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.h b/libraries/ArduinoTestSuite/ArduinoTestSuite.h index c5a79d92993..9501d67a25e 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.h +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.h @@ -24,21 +24,44 @@ #endif -void ATS_PrintTestStart(char *manufName, char *testSuiteName); -void ATS_PrintTestEnd(); +void ATS_begin(char *manufName, char *testSuiteName); +void ATS_end(); + void ATS_PrintTestStatus(char *testString, boolean passed); boolean ATS_Test_DigitalPin(uint8_t digitalPinToTest); boolean ATS_Test_PWM_Pin(uint8_t digitalPinToTest); boolean ATS_Test_AnalogInput(uint8_t analogPintoTest); boolean ATS_Test_EEPROM(void); -static void ATS_PrintProperty( int propertyTagNum, - char *propertyName, - char *propertyValue); - short ATS_TestSerialLoopback(HardwareSerial *theSerialPort, char *serialPortName); +int ATS_GetFreeMemory(); + +//************************************************************************ +//* this has to be an inline function because calling subroutines affects free memory +inline void ATS_ReportMemoryUsage(int _memoryUsageAtStart) +{ +int freeMemoryAtEnd; +int lostMemory; +boolean memoryOK; +char memoryUsage[48]; + + freeMemoryAtEnd = ATS_GetFreeMemory(); + lostMemory = _memoryUsageAtStart - freeMemoryAtEnd; + if (lostMemory == 0) + { + strcpy(memoryUsage, "Memory Usage"); + memoryOK = true; + } + else + { + sprintf(memoryUsage, "Memory Usage (lost %d bytes)", lostMemory); + memoryOK = false; + } + ATS_PrintTestStatus(memoryUsage, memoryOK); +} + extern unsigned long gTestStartTime; diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index 78cd481fdf7..0823e24f95a 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -7,9 +7,6 @@ //* Oct 16, 2010 Started on String Test //************************************************************************ - - - #include "WProgram.h" #include "HardwareSerial.h" #include @@ -17,22 +14,12 @@ //************************************************************************ void setup() { - short ii; - uint8_t timerNumber; char testName[64]; + int startMemoryUsage; - gYotalErrors = 0; - gTestCount = 0; - - /* -* Test Variable Setup - */ + startMemoryUsage = ATS_GetFreeMemory(); - Serial.begin(9600); - delay(1000); - - gTestStartTime = millis(); - ATS_PrintTestStart("Arduino", "Test of Arduino Constants"); + ATS_begin("Arduino", "Test of Arduino Constants"); /* * Run the tests @@ -72,7 +59,8 @@ void setup() /* * Test complete */ - ATS_PrintTestEnd(); + ATS_ReportMemoryUsage(startMemoryUsage); + ATS_end(); } @@ -87,3 +75,4 @@ void loop() + diff --git a/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde b/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde index a681cb1e4cb..502248a233e 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_General/ATS_General.pde @@ -5,90 +5,78 @@ //* //************************************************************************ //* Aug 31, 2010 Started on TestArduino +//* Oct 18, 2010 Added memory testing //************************************************************************ -#ifdef __MWERKS__ - #include "codewarrior.h" -#else - #include -#endif - -#include - - - #include "WProgram.h" #include "HardwareSerial.h" #include "pins_arduino.h" - #include - #include "avr_cpunames.h" - #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) - #define kBoard_PinCount 20 - #define kBoard_AnalogCount 6 +#define kBoard_PinCount 20 +#define kBoard_AnalogCount 6 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - #define kBoard_PinCount 70 - #define kBoard_AnalogCount 16 +#define kBoard_PinCount 70 +#define kBoard_AnalogCount 16 #endif + + + //************************************************************************ void setup() -{ -short ii; -uint8_t timerNumber; - - - gYotalErrors = 0; - gTestCount = 0; - - Serial.begin(9600); - delay(1000); - - gTestStartTime = millis(); - ATS_PrintTestStart("Arduino", "general"); - - - //* test digital pins - //* we start at 2 because 0/1 are RXD/TXD - for (ii=2; ii 1) - ATS_TestSerialLoopback(&Serial1, "Serial1"); + ATS_TestSerialLoopback(&Serial1, "Serial1"); #endif #if (SERIAL_PORT_COUNT > 2) - ATS_TestSerialLoopback(&Serial2, "Serial2"); + ATS_TestSerialLoopback(&Serial2, "Serial2"); #endif #if (SERIAL_PORT_COUNT > 3) - ATS_TestSerialLoopback(&Serial3, "Serial3"); + ATS_TestSerialLoopback(&Serial3, "Serial3"); #endif - ATS_Test_EEPROM(); + ATS_Test_EEPROM(); + - ATS_PrintTestEnd(); + ATS_ReportMemoryUsage(startMemoryUsage); + + ATS_end(); } @@ -103,3 +91,4 @@ void loop() + diff --git a/libraries/ArduinoTestSuite/examples/ATS_General/Makefile b/libraries/ArduinoTestSuite/examples/ATS_General/Makefile deleted file mode 100644 index 466dbbc659b..00000000000 --- a/libraries/ArduinoTestSuite/examples/ATS_General/Makefile +++ /dev/null @@ -1,125 +0,0 @@ -#BOARD ?= mega1280stk500v2 -BOARD ?= mega2560stk500v2 -#BOARD ?= arduino_butterfly -#BOARD ?= arduino_wiring1281 -#BOARD = arduino_amber128 -#BOARD = arduino_duino644 -#BOARD = arduino_illuminato -#BOARD = arduino_penguino -#BOARD = arduino_cerebot_plus -#BOARD = arduino_android2561 -#BOARD = arduino_android2561_16 -#BOARD = atmega8 -#BOARD = atmega88 -#BOARD = arduino_atmega16 -#BOARD = atmega328 -#BOARD = arduino_attiny45 -#BOARD = arduino_attiny2313 -#BOARD = dragonrider328 -#BOARD = arduino_atmega8535 -#BOARD = dragonrider8535 -#BOARD = arduino_1284p -#BOARD = arduino_atmega8515 -#BOARD = arduino_at90usbkey - -PORT ?= /dev/tty.usbserial-A900cbro -#PORT = /dev/tty.usbserial-A800eGS5 -#PORT = /dev/tty.usbserial-FTF4BHEE -#PORT = /dev/tty.usbserial-RCTBW0HY - - -# mega1280 stk500 v2 -ifeq ($(BOARD),mega1280stk500v2) -PORT = /dev/tty.usbserial-A600bySf -endif - - -#atmega8 -ifeq ($(BOARD),atmega8) -PORT = /dev/tty.usbserial-A700dARA -endif - -#1281 -ifeq ($(BOARD),arduino_wiring1281) -PORT = /dev/tty.usbserial-A700e5Bx -endif - -# Illuminato -ifeq ($(BOARD),arduino_illuminato) -PORT = /dev/tty.usbserial-A80098Dl -endif - -# mega2560 -ifeq ($(BOARD),mega2560stk500v2) -PORT = /dev/tty.usbmodem1a21 -endif - -# arduino_amber128 -ifeq ($(BOARD),arduino_amber128) -PORT = /dev/tty.usbserial-FTF4BHEE -endif - -# arduino_penguino -ifeq ($(BOARD),arduino_penguino) -PORT = /dev/cu.penguino-uart 115200 -endif - -# arduino_penguino -ifeq ($(BOARD),arduino_cerebot_plus) -PORT = /dev/tty.usbserial-FTF4BHEE -endif - -# arduino_android2561 -ifeq ($(BOARD),arduino_android2561) -PORT = /dev/tty.usbserial-A800cAoo -endif - -# arduino_android2561_16 -ifeq ($(BOARD),arduino_android2561_16) -PORT = /dev/tty.usbserial-A800cAoo -endif - - -# atmega328 -ifeq ($(BOARD),atmega328) -PORT = /dev/tty.usbserial-A700dB60 -endif - - -# dragonrider328 -ifeq ($(BOARD),dragonrider328) -PORT = usb -endif - -# dragonrider8535 -ifeq ($(BOARD),dragonrider8535) -PORT = usb -endif - - -#arduino_butterfly -ifeq ($(BOARD),arduino_butterfly) -PORT = /dev/tty.usbserial-FTF4BHEE -endif - -#arduino_atmega16 -ifeq ($(BOARD),arduino_atmega16) -PORT = /dev/tty.usbserial-FTF4BHEE -endif - - - - -#LIB_DIRS = ../libraries/WiseClock2 -LIB_DIRS = ../libraries/UnivGraphicsLib /Applications/Arduino.app/Contents/Resources/Java/libraries/EEPROM /Applications/Arduino.app/Contents/Resources/Java/libraries/Wire /Applications/Arduino.app/Contents/Resources/Java/libraries/Wire/utility -LIB_DIRS += /Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal -LIB_DIRS += ../libraries/Digilent_lib -ARD_HOME = /Applications/Arduino.app/Contents/Resources/Java -#ARD_BIN = /usr/local/test/avr1/bin -#AVRDUDE_HOME = /usr/local/CrossPack-AVR -AVRDUDE_HOME = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr -#ARD_BIN = /usr/local/test/avr1/bin - - -include ../Makefile.master - diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde index 5623f2121f6..a2ba76d253a 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -14,36 +14,32 @@ //************************************************************************ void setup() { - short ii; - uint8_t timerNumber; char testName[64]; - - gYotalErrors = 0; - gTestCount = 0; + int startMemoryUsage; -/* -* Test Variable Setup -*/ + startMemoryUsage = ATS_GetFreeMemory(); - Serial.begin(9600); - delay(1000); + ATS_begin("Arduino", "Skeleton Test"); - gTestStartTime = millis(); - ATS_PrintTestStart("Arduino", "Skeleton Test"); -/* -* Run the tests -*/ + /* + * Run the tests + * Test one passes because result is set to true + * Test two fails becuase result is set to false + * You can test memory for any set of tests by using the ATS_ReportMemoryUsage test + * There is also a way to print current memeory for debugging + */ ATS_PrintTestStatus("1. Test of true test status", true); - + ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); -/* -* Test complete -*/ - ATS_PrintTestEnd(); + /* + * Test complete + */ + ATS_ReportMemoryUsage(startMemoryUsage); + ATS_end(); } @@ -57,3 +53,4 @@ void loop() + diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde index e76af92fe80..ae59fae283d 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -14,16 +14,14 @@ //************************************************************************ void setup() { - - short ii; - uint8_t timerNumber; + char testName[64]; + int startMemoryUsage; - gYotalErrors = 0; - gTestCount = 0; + ATS_begin("Arduino", "Test of String Library"); /* -* Test Variable Setup + * Test Variable Setup */ String stringOne = String("stringThree = "); @@ -31,15 +29,10 @@ void setup() String stringThree = String (); char charResult[100]; - Serial.begin(9600); - delay(1000); - - gTestStartTime = millis(); - ATS_PrintTestStart("Arduino", "String Test"); /* -* Run the tests + * Run the tests */ // adding a constant integer to a string: @@ -77,7 +70,7 @@ void setup() /* -* setup up String Comparison Operater Tests + * setup up String Comparison Operater Tests */ stringOne = String("this"); @@ -121,13 +114,13 @@ void setup() // comparison operators can be used to compare strings for alphabetic sorting too: -/* uncommented the entire test fails. - stringOne = String("Brown"); +/* + stringOne = String("Brown"); ATS_PrintTestStatus("14. comparison operator < can be used to compare strings for alphabetic sorting ",stringOne < "Charles"); ATS_PrintTestStatus("15. comparison operator > can be used to compare strings for alphabetic sorting ",stringOne > "Adams"); ATS_PrintTestStatus("16. comparison operator <= can be used to compare strings for alphabetic sorting ",stringOne <= "Browne"); ATS_PrintTestStatus("17. comparison operator >= can be used to compare strings for alphabetic sorting ",stringOne >= "Brow"); -*/ + */ // the compareTo() operator also allows you to compare strings @@ -141,31 +134,31 @@ void setup() stringTwo= "Sensor: 150"; ATS_PrintTestStatus("19. The compareTo() String with integers", stringOne.compareTo(stringTwo) < 0); - // compareTo() String with numnber > String with number append integer, matches example code: - stringOne = "Sensor: "; - stringTwo= "Sensor: "; - stringOne += 50; - stringTwo += 150; - ATS_PrintTestStatus("20. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); - + +// compareTo() String with numnber > String with number append integer, matches example code: + stringOne = "Sensor: "; + stringTwo= "Sensor: "; + stringOne += 50; + stringTwo += 150; + ATS_PrintTestStatus("20. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); + /* -* setup up String Append Operation Tests + * setup up String Append Operation Tests */ // Serious awful problem here stringOne = String("Sensor "); stringTwo = String("value"); stringOne += stringTwo; - // ATS_PrintTestStatus("N. Adding string to string += ",(strcmp(charResult,"Sensor value" ) == 0)); - //ATS_PrintTestStatus("N. Adding string to string += ", stringOne.equals("Sensor value")); + ATS_PrintTestStatus("21. Adding string to string += ", stringOne.equals("Sensor value")); - ATS_PrintTestStatus("21. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); + ATS_PrintTestStatus("22. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); /* * Test complete */ - ATS_PrintTestEnd(); + ATS_end(); } @@ -186,3 +179,5 @@ void loop() + + From 77b0f3f02171209c0d92abe5a60deaa242c3a80b Mon Sep 17 00:00:00 2001 From: ricklon Date: Wed, 20 Oct 2010 13:08:12 -0400 Subject: [PATCH 20/37] Cleaned up code more, added better example of memory testing. --- .../examples/ATS_Constants/ATS_Constants.pde | 9 ++++----- .../examples/ATS_Skeleton/ATS_Skeleton.pde | 17 +++++++---------- .../examples/ATS_StringTest/ATS_StringTest.pde | 2 ++ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index 0823e24f95a..289233455d4 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -4,7 +4,7 @@ //* Open source as per standard Arduino code //* //************************************************************************ -//* Oct 16, 2010 Started on String Test +//* Oct 16, 2010 Test of Arduino Constants //************************************************************************ #include "WProgram.h" @@ -17,12 +17,11 @@ void setup() char testName[64]; int startMemoryUsage; + //Start memory usage must be site prior to ATS_begin startMemoryUsage = ATS_GetFreeMemory(); - ATS_begin("Arduino", "Test of Arduino Constants"); - /* -* Run the tests + * Test Run Start */ @@ -57,7 +56,7 @@ void setup() ATS_PrintTestStatus( "7. Test of hexadecimal constant", (0x101 == 257)); /* - * Test complete + * Test Run End */ ATS_ReportMemoryUsage(startMemoryUsage); ATS_end(); diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde index a2ba76d253a..9ba8b4235cf 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -16,29 +16,26 @@ void setup() { char testName[64]; int startMemoryUsage; - + + //startMemoryUsage must be set directly before ATS_begin startMemoryUsage = ATS_GetFreeMemory(); - ATS_begin("Arduino", "Skeleton Test"); - - /* - * Run the tests + * Test Run Start * Test one passes because result is set to true * Test two fails becuase result is set to false * You can test memory for any set of tests by using the ATS_ReportMemoryUsage test * There is also a way to print current memeory for debugging */ - ATS_PrintTestStatus("1. Test of true test status", true); - + ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); - + ATS_ReportMemoryUsage(startMemoryUsage); /* - * Test complete + * Test Run End */ - ATS_ReportMemoryUsage(startMemoryUsage); + ATS_end(); } diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde index ae59fae283d..df1f38152ca 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -22,6 +22,8 @@ void setup() /* * Test Variable Setup + * Best practive set all your test variables prior to teseting. + * This is required for Memory tests. */ String stringOne = String("stringThree = "); From f85a948f91624f4444f95d47e9bc09e78e29fad1 Mon Sep 17 00:00:00 2001 From: ricklon Date: Thu, 21 Oct 2010 00:05:14 -0400 Subject: [PATCH 21/37] Removed unused testName variable. --- .../ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde | 1 - .../ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde | 1 - .../ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde | 1 - 3 files changed, 3 deletions(-) diff --git a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde index 289233455d4..d58e8bac637 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Constants/ATS_Constants.pde @@ -14,7 +14,6 @@ //************************************************************************ void setup() { - char testName[64]; int startMemoryUsage; //Start memory usage must be site prior to ATS_begin diff --git a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde index 9ba8b4235cf..33fc8168081 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_Skeleton/ATS_Skeleton.pde @@ -14,7 +14,6 @@ //************************************************************************ void setup() { - char testName[64]; int startMemoryUsage; //startMemoryUsage must be set directly before ATS_begin diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde index df1f38152ca..27a9d26c770 100644 --- a/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde +++ b/libraries/ArduinoTestSuite/examples/ATS_StringTest/ATS_StringTest.pde @@ -15,7 +15,6 @@ void setup() { - char testName[64]; int startMemoryUsage; ATS_begin("Arduino", "Test of String Library"); From 6274114d42d1af4defc89e2f570c989dfa560e2f Mon Sep 17 00:00:00 2001 From: ricklon Date: Fri, 22 Oct 2010 00:15:35 -0400 Subject: [PATCH 22/37] Added a memory test for te String Library IndexOf function. --- .../ATS_StringIndexOfMemory.pde | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 libraries/ArduinoTestSuite/examples/ATS_StringIndexOfMemory/ATS_StringIndexOfMemory.pde diff --git a/libraries/ArduinoTestSuite/examples/ATS_StringIndexOfMemory/ATS_StringIndexOfMemory.pde b/libraries/ArduinoTestSuite/examples/ATS_StringIndexOfMemory/ATS_StringIndexOfMemory.pde new file mode 100644 index 00000000000..71a6bea1963 --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_StringIndexOfMemory/ATS_StringIndexOfMemory.pde @@ -0,0 +1,102 @@ +//************************************************************************ +//* Arduino Test Example Skeleton +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + char testName[64]; + int startMemoryUsage; + /* + * Create variable for the tests. + */ + + + String stringOne; + int firstClosingBracket; + int firstOpeningBracket; + int secondOpeningBracket; + int secondClosingBracket; + int bodyTag; + int firstListItem; + int secondListItem; + int lastOpeningBracket; + int lastListItem; + int lastParagraph; + int secondLastGraf; + + /*; + * initiate the test run + */ + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "String Memory Test"); + // indexOf() returns the position (i.e. index) of a particular character + // in a string. For example, if you were parsing HTML tags, you could use it: + stringOne = ""; + firstClosingBracket = stringOne.indexOf('>'); + Serial.println("The index of > in the string " + stringOne + " is " + firstClosingBracket); + + stringOne = ""; + secondOpeningBracket = firstClosingBracket + 1; + secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket ); + Serial.println("The index of the second > in the string " + stringOne + " is " + secondClosingBracket); + + // you can also use indexOf() to search for Strings: + stringOne = ""; + bodyTag = stringOne.indexOf(""); + Serial.println("The index of the body tag in the string " + stringOne + " is " + bodyTag); + + stringOne = "
  • item
  • item
  • item
"; + firstListItem = stringOne.indexOf("
  • "); + secondListItem = stringOne.indexOf("item", firstListItem + 1 ); + Serial.println("The index of the second list item in the string " + stringOne + " is " + secondClosingBracket); + + // lastIndexOf() gives you the last occurrence of a character or string: + lastOpeningBracket = stringOne.lastIndexOf('<'); + Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket); + + lastListItem = stringOne.lastIndexOf("
  • "); + Serial.println("The index of the last list item in the string " + stringOne + " is " + lastListItem); + + + // lastIndexOf() can also search for a string: + stringOne = "

    Lorem ipsum dolor sit amet

    Ipsem

    Quod

    "; + lastParagraph = stringOne.lastIndexOf(" Date: Fri, 22 Oct 2010 13:42:48 -0400 Subject: [PATCH 23/37] Documentation says to send ctrl-d, was sending ctrl-z so 0x1a replaced by 0x04. --- build/linux/dist/lib/librxtxSerial.so | Bin 48304 -> 0 bytes libraries/ArduinoTestSuite/ArduinoTestSuite.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 build/linux/dist/lib/librxtxSerial.so diff --git a/build/linux/dist/lib/librxtxSerial.so b/build/linux/dist/lib/librxtxSerial.so deleted file mode 100755 index d340dcb676e7873a70e23ca9bd21abf108f02409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48304 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

    oZ5JeY8!z(WXo2(J~` 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 diff --git a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp index 03e9e1073f2..845e2efefd8 100644 --- a/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp +++ b/libraries/ArduinoTestSuite/ArduinoTestSuite.cpp @@ -235,7 +235,7 @@ long milliSecs; Serial.println(); //* send control D to terminate (End Of File) - Serial.write(0x1a); + Serial.write(0x04); } From 8b0b8cf567ccc04340e59e03f50da79124227f61 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 24 Oct 2010 16:32:35 -0400 Subject: [PATCH 24/37] Changed directory name from test to testing. Added the ATS_ToneTest. --- {test => testing}/buildbot/master.cfg | 0 {test => testing}/examples/Makefile | 0 {test => testing}/examples/README | 0 {test => testing}/examples/arduino-mixed.test | 0 {test => testing}/examples/arduino-success.test | 0 {test => testing}/examples/arduino1.test | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {test => testing}/buildbot/master.cfg (100%) rename {test => testing}/examples/Makefile (100%) rename {test => testing}/examples/README (100%) rename {test => testing}/examples/arduino-mixed.test (100%) rename {test => testing}/examples/arduino-success.test (100%) rename {test => testing}/examples/arduino1.test (100%) diff --git a/test/buildbot/master.cfg b/testing/buildbot/master.cfg similarity index 100% rename from test/buildbot/master.cfg rename to testing/buildbot/master.cfg diff --git a/test/examples/Makefile b/testing/examples/Makefile similarity index 100% rename from test/examples/Makefile rename to testing/examples/Makefile diff --git a/test/examples/README b/testing/examples/README similarity index 100% rename from test/examples/README rename to testing/examples/README diff --git a/test/examples/arduino-mixed.test b/testing/examples/arduino-mixed.test similarity index 100% rename from test/examples/arduino-mixed.test rename to testing/examples/arduino-mixed.test diff --git a/test/examples/arduino-success.test b/testing/examples/arduino-success.test similarity index 100% rename from test/examples/arduino-success.test rename to testing/examples/arduino-success.test diff --git a/test/examples/arduino1.test b/testing/examples/arduino1.test similarity index 100% rename from test/examples/arduino1.test rename to testing/examples/arduino1.test From d0ac6fc8c7b2e8c49708883e0aa5dfc36f1ef647 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 24 Oct 2010 16:47:50 -0400 Subject: [PATCH 25/37] Added new directories and files --- .../examples/ATS_ToneTest/ATS_ToneTest.pde | 250 ++++++++++++++++++ testing/README | 5 + testing/bin/.Makefile.swp | Bin 0 -> 12288 bytes testing/bin/._Makefile.master | Bin 0 -> 1448 bytes testing/bin/Makefile | 11 + testing/bin/Makefile.master | 248 +++++++++++++++++ testing/bin/serialcap | Bin 0 -> 13638 bytes testing/src/Makefile | 0 testing/src/serialcap/serialcap.c | 128 +++++++++ 9 files changed, 642 insertions(+) create mode 100644 libraries/ArduinoTestSuite/examples/ATS_ToneTest/ATS_ToneTest.pde create mode 100644 testing/README create mode 100644 testing/bin/.Makefile.swp create mode 100755 testing/bin/._Makefile.master create mode 100755 testing/bin/Makefile create mode 100755 testing/bin/Makefile.master create mode 100755 testing/bin/serialcap create mode 100644 testing/src/Makefile create mode 100644 testing/src/serialcap/serialcap.c diff --git a/libraries/ArduinoTestSuite/examples/ATS_ToneTest/ATS_ToneTest.pde b/libraries/ArduinoTestSuite/examples/ATS_ToneTest/ATS_ToneTest.pde new file mode 100644 index 00000000000..8bec6be2aaf --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_ToneTest/ATS_ToneTest.pde @@ -0,0 +1,250 @@ +//************************************************************************ +//* Arduino Test Suite +//* ATS_ToneTest +//* +//* Copyright (c) 2010 Mark Sproul All right reserved. +//* +//* This library is free software; you can redistribute it and/or +//* modify it under the terms of the GNU Lesser General Public +//* License as published by the Free Software Foundation; either +//* version 2.1 of the License, or (at your option) any later version. +//* +//* This library is distributed in the hope that it will be useful, +//* but WITHOUT ANY WARRANTY; without even the implied warranty of +//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//* Lesser General Public License for more details. +//* +//* You should have received a copy of the GNU Lesser General Public +//* License along with this library; if not, write to the Free Software +//* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +//************************************************************************ +//* Aug 31, 2010 Started on TestArduino +//* Oct 23, 2010 Started on ToneTest +//************************************************************************ + + + + + +#include "WProgram.h" +#include "HardwareSerial.h" + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + #define kBoard_PinCount 20 + #define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define kBoard_PinCount 70 + #define kBoard_AnalogCount 16 +#endif + +#include + +//************************************************************************ +void TestTonePin(uint8_t toneOutputPinNumber) +{ +uint8_t helperpin; +unsigned long startMilliSecs; +unsigned long highCount, lowCount; +int previousState; +int currentState; +char testNameString[80]; +long outputFreq; +long measuredFreq; +boolean passed; +long percentError; +long deltaFreq; + + if ((toneOutputPinNumber % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = toneOutputPinNumber + 1; + } + else + { + //* if its ODD + helperpin = toneOutputPinNumber - 1; + } + + //* dont set the mode of the OUTPUT pin, the tone command does that + + pinMode(helperpin, INPUT); + + previousState = digitalRead(helperpin); + startMilliSecs = millis(); + highCount = 0; + lowCount = 0; + measuredFreq = 0; + //* we are going to watch for one second + outputFreq = random(200, 2000); + + tone(toneOutputPinNumber, outputFreq); + while ((millis() - startMilliSecs) < 1000) + { + currentState = digitalRead(helperpin); + if (currentState == HIGH) + { + highCount++; + } + else + { + lowCount++; + } + //* check to see if it changed state + if ((currentState == HIGH) && (previousState == LOW)) + { + measuredFreq++; + } + + previousState = currentState; + } + noTone(toneOutputPinNumber); + + deltaFreq = abs(measuredFreq - outputFreq); + + percentError = 100 - abs(((outputFreq - deltaFreq) * 100) / outputFreq); + + sprintf(testNameString, "ToneTest.%02d (out freq= %4ld measured freq= %4ld err= %ld%%)", toneOutputPinNumber, outputFreq, measuredFreq, percentError); + if (percentError < 5) + { + passed = true; + } + else + { + passed = false; + } + + ATS_PrintTestStatus(testNameString, passed); +} + + +//************************************************************************ +//* this test to make sure the duration option works +void TestToneDuration(uint8_t toneOutputPinNumber) +{ +uint8_t helperpin; +unsigned long startMilliSecs; +unsigned long highCount, lowCount; +int previousState; +int currentState; +char testNameString[80]; +long outputFreq; +long measuredFreq; +boolean passed; +long percentError; +long deltaFreq; +long durationTime; + + if ((toneOutputPinNumber % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = toneOutputPinNumber + 1; + } + else + { + //* if its ODD + helperpin = toneOutputPinNumber - 1; + } + + //* dont set the mode of the OUTPUT pin, the tone command does that + + pinMode(helperpin, INPUT); + + previousState = digitalRead(helperpin); + startMilliSecs = millis(); + highCount = 0; + lowCount = 0; + measuredFreq = 0; + durationTime = 0; + //* we are going to watch for one second + outputFreq = random(500, 2000); + + tone(toneOutputPinNumber, outputFreq, 1000); + while ((millis() - startMilliSecs) < 2000) + { + currentState = digitalRead(helperpin); + if (currentState == HIGH) + { + highCount++; + } + else + { + lowCount++; + } + //* count the freq + if ((currentState == HIGH) && (previousState == LOW)) + { + measuredFreq++; + } + + //* check to see if it changed state + if (currentState != previousState) + { + durationTime = millis() - startMilliSecs; + } + + previousState = currentState; + } + + deltaFreq = abs(measuredFreq - outputFreq); + + percentError = 100 - abs(((outputFreq - deltaFreq) * 100) / outputFreq); + + sprintf(testNameString, "ToneTesDurationt.%02d (durationTime =%4ld/1000 freq err= %ld%%)", toneOutputPinNumber, durationTime, percentError); + if ((durationTime > 990) && (durationTime < 1010) && (percentError < 5)) + { + passed = true; + } + else + { + passed = false; + } + noTone(toneOutputPinNumber); + + ATS_PrintTestStatus(testNameString, passed); +} + + + +//************************************************************************ +void setup() +{ +short ii; +uint8_t timerNumber; +int startMemoryUsage; + + startMemoryUsage = ATS_GetFreeMemory(); + + ATS_begin("Arduino", "ToneTest"); + + + //* we start at 2 because 0/1 are RXD/TXD + for (ii=2; iil!J1~umR{W5nPGQ{@+{7E9t{ufr1Q)n-;ZJ}+ zg?|M84St+>X;P#jja8fgeWSj*&UNwYD?R3V4kcI#RRs|}5 zd}C*mZ4Yktn?�Ret%>WVHq}2tWV=5P$##AOHafK;XX?@WlpuLr-|Fd&=|Oxbe%_ zO))?K0uX=z1Rwwb2tWV=5P$##An*?g$c(X<7a03U(ft3veE5HwqjOfB*y_009U<00Izz00bcLw+Q4W)m5f=7z+9< z8?VE;bYA@~SF&E0UZ-lEnry8i#aHi`PuD$zaFsY zC>c(Mqo)tY@hI5kd!lls&^DF2ZBmzY$)aS~<^x(OqN31wDt&Iv&xZC;7KONPjaP=c z+!N(&Ri?^`$Fi2}V4NHV0j&*0rfT8+tI3o7KHDGDzKio*`nfuh+k+kI)8$I0&w0}z z&y7-<<8x|}=c%0+xz*}=JFN$Vqox1Ojhs@R)|o50+1L3ClDI}u>uf-_(2Q|tYIOp5g|Y}9>55cV-;Xv zU;$zVH#`c5sT2zf&||*(E~#ayIr#;-sd**(zNsZe`Q@oa*~QNJDXHO!MMatUMV5L7 zND>N2GWtkt1y2{(VH!}Q-Wm;o;T!@i44|SAOd!fbkuU8lm_a3k46tluEG;g|2eO5H Z!=0Rfv>XG&|NlT5446NF*eo0%4gg~tE-3&2 literal 0 HcmV?d00001 diff --git a/testing/bin/Makefile b/testing/bin/Makefile new file mode 100755 index 00000000000..4087cc8070a --- /dev/null +++ b/testing/bin/Makefile @@ -0,0 +1,11 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult + +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +ARD_HOME ?= /Applications/Arduino.app/Contents/Resources/Java +AVRDUDE_HOME = ?/usr/local/test/avr +#PROGRAMMER ?= stk500v2 + +#include Makefile.master +include ../../Makefile.master diff --git a/testing/bin/Makefile.master b/testing/bin/Makefile.master new file mode 100755 index 00000000000..b12b1dddc48 --- /dev/null +++ b/testing/bin/Makefile.master @@ -0,0 +1,248 @@ +# +# Copyright 2010 Alan Burlison. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY ALAN BURLISON "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL ALAN BURLISON OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Makefile for building Arduino projects outside of the Arduino environment +# +# This makefile should be included into a per-project Makefile of the following +# form: +# +# ---------- +# BOARD = mega +# PORT = /dev/term/0 +# INC_DIRS = ../common +# LIB_DIRS = ../libraries/Task ../../libraries/VirtualWire +# include ../../Makefile.master +# ---------- +# +# Where: +# BOARD : Arduino board type, from $(ARD_HOME)/hardware/boards.txt +# PORT : USB port +# INC_DIRS : List pf directories containing header files +# LIB_DIRS : List of directories containing library source +# +# Before using this Makefile you should adjust the following macros to suit +# your environment, either by editing this file directly or by defining them in +# the Makefile that includes this one: +# ARD_REV : Arduino software revision, e.g. 0017, 0018 +# ARD_HOME : Installation directory of the Arduino software. +# MON_TERM : terminal command for serial monitor +# MON_CMD : serial monitor command +# MON_SPEED : serial monitor speed +# + +# Global configuration. +ARD_REV ?= 0018 +ARD_HOME ?= /opt/arduino +MON_TERM ?= gnome-terminal +MON_SPEED ?= 9600 +MON_CMD ?= tip + +### Nothing below here should require editing. ### + +# Check for the required definitions. + +ifndef BOARD + $(error $$(BOARD) not defined) +endif +ifndef PORT + $(error $$(PORT) not defined) +endif + +# Version-specific settings +ifeq ($(ARD_REV),0018) + ARD_BOARDS = $(ARD_HOME)/hardware/arduino/boards.txt + ARD_SRC_DIR = $(ARD_HOME)/hardware/arduino/cores/arduino + ARD_MAIN = $(ARD_SRC_DIR)/main.cpp +else + ARD_BOARDS = $(ARD_HOME)/hardware/boards.txt + ARD_SRC_DIR = $(ARD_HOME)/hardware/cores/arduino + ARD_MAIN = $(ARD_SRC_DIR)/main.cxx +endif + +# Standard macros. +#PROGRAMMER ?= stk500v1 +SKETCH = $(notdir $(CURDIR)) + +#ARD_BIN = $(ARD_HOME)/hardware/tools/gcc-avr/bin +ARD_BIN ?= $(ARD_HOME)/hardware/tools/avr/bin +MCU := \ + $(shell sed -n 's/$(BOARD)\.build\.mcu=\(.*\)/\1/p' < $(ARD_BOARDS)) +F_CPU := \ + $(shell sed -n 's/$(BOARD)\.build\.f_cpu=\(.*\)/\1/p' < $(ARD_BOARDS)) +UPLOAD_SPEED := \ + $(shell sed -n 's/$(BOARD)\.upload\.speed=\(.*\)/\1/p' < $(ARD_BOARDS)) +PROGRAMMER := \ + $(shell sed -n 's/$(BOARD)\.upload\.protocol=\(.*\)/\1/p' < $(ARD_BOARDS)) + +BUILD_DIR = build + + +# Build tools. +CC = $(ARD_BIN)/avr-gcc +CXX = $(ARD_BIN)/avr-g++ +OBJCOPY = $(ARD_BIN)/avr-objcopy +OBJDUMP = $(ARD_BIN)/avr-objdump +AR = $(ARD_BIN)/avr-ar +SIZE = $(ARD_BIN)/avr-size +NM = $(ARD_BIN)/avr-nm +#AVRDUDE = $(ARD_HOME)/hardware/tools/avrdude +#AVRDUDE_CONF = $(ARD_HOME)/hardware/tools/avrdude.conf +AVRDUDE = $(AVRDUDE_HOME)/bin/avrdude +AVRDUDE_CONF = $(AVRDUDE_HOME)/etc/avrdude.conf +RESET = $(ARD_HOME)/hardware/tools/ar-reset +MKDIR = mkdir -p +RM = rm -rf +MV = mv -f + +# Compiler flags. +ARD_FLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARD_REV) +#C_FLAGS = -std=gnu99 -Wall -Wextra -Wundef -Wstrict-prototypes -Werror -Wno-old-style-declaration -Wno-unused-parameter -fdiagnostics-show-option +C_FLAGS = -std=gnu99 -Wall -Wextra -Wundef -Wstrict-prototypes -Wno-old-style-declaration -Wno-unused-parameter -fdiagnostics-show-option +#CXX_FLAGS = -Wall -Wextra -Wundef -Werror -Wno-unused-parameter -fdiagnostics-show-option +CXX_FLAGS = -Wall -Wextra -Wundef -Wno-unused-parameter -fdiagnostics-show-option + +# Optimiser flags. +# optimise for size, unsigned by default, pack data. +# separate sections, drop unused ones, shorten branches, jumps. +# don't inline, vectorise loops. no exceptions. +# no os preamble, use function calls in prologues. +# http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc.html +# http://www.tty1.net/blog/2008-04-29-avr-gcc-optimisations_en.html +# NB would like to add -fno-split-wide-types but that makes upload verify fail +OPT_FLAGS = \ + -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ + -ffunction-sections -fdata-sections -Wl,--gc-sections,--relax \ + -fno-inline-small-functions -fno-tree-scev-cprop -fno-exceptions \ + -ffreestanding -mcall-prologues + +# Arduino environment. +ARD_C_SRC = $(wildcard $(ARD_SRC_DIR)/*.c) +ARD_CXX_SRC = $(wildcard $(ARD_SRC_DIR)/*.cpp) +ARD_C_OBJ = $(patsubst %.c,%.o,$(notdir $(ARD_C_SRC))) +ARD_CXX_OBJ = $(patsubst %.cpp,%.o,$(notdir $(ARD_CXX_SRC))) +ARD_LIB = arduino +ARD_AR = $(BUILD_DIR)/lib$(ARD_LIB).a +ARD_AR_OBJ = $(ARD_AR)($(ARD_C_OBJ) $(ARD_CXX_OBJ)) +ARD_LD_FLAG = -l$(ARD_LIB) + +# Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734 +$(ARD_AR)(Tone.o) : CXX_FLAGS = -w + +# Sketch libraries. +LIB_C_SRC = $(foreach ld,$(LIB_DIRS),$(wildcard $(ld)/*.c)) +LIB_CXX_SRC = $(foreach ld,$(LIB_DIRS),$(wildcard $(ld)/*.cpp)) +LIB_SRC = $(LIB_C_SRC) $(LIB_CXX_SRC) +ifneq "$(strip $(LIB_C_SRC) $(LIB_CXX_SRC))" "" + LIB_C_OBJ = $(patsubst %.c,%.o,$(notdir $(LIB_C_SRC))) + LIB_CXX_OBJ = $(patsubst %.cpp,%.o,$(notdir $(LIB_CXX_SRC))) + LIB_LIB = library + LIB_AR = $(BUILD_DIR)/lib$(LIB_LIB).a + LIB_AR_OBJ = $(LIB_AR)($(LIB_C_OBJ) $(LIB_CXX_OBJ)) + LIB_LD_FLAG = -l$(LIB_LIB) +endif + +# Sketch. +SKT_PDE_SRC = $(wildcard *.pde) +SKT_C_SRC = $(wildcard *.c) +SKT_CXX_SRC = $(wildcard *.cpp) +ifneq "$(strip $(SKT_PDE_SRC) $(SKT_C_SRC) $(SKT_CXX_SRC))" "" + SKT_C_OBJ = $(patsubst %.c,%.o,$(SKT_C_SRC)) + SKT_CXX_OBJ = $(patsubst %.cpp,%.o,$(SKT_CXX_SRC)) $(IMAGE).o + SKT_LIB = sketch + SKT_AR = $(BUILD_DIR)/lib$(SKT_LIB).a + SKT_AR_OBJ = $(SKT_AR)/($(SKT_C_OBJ) $(SKT_CXX_OBJ)) + SKT_LD_FLAG = -l$(SKT_LIB) +endif + +# Other derived macros. +IMAGE = $(BUILD_DIR)/$(SKETCH) +INC_FLAGS = \ + $(addprefix -I,$(INC_DIRS)) $(addprefix -I,$(LIB_DIRS)) -I$(ARD_SRC_DIR) +VPATH = $(LIB_DIRS) + +# Definitions. +define run-cc + $(CC) -c $(C_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o + @ $(AR) rc $@ $*.o + @ $(RM) $*.o +endef + +define run-cxx + $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o + @ $(AR) rc $@ $*.o + @ $(RM) $*.o +endef + +# Rules. +.PHONY : all clean upload monitor upload_monitor + +all : $(BUILD_DIR) $(IMAGE).hex + +clean : + $(RM) $(BUILD_DIR)/* + +$(BUILD_DIR) : + $(MKDIR) $@ + +$(SKT_AR)($(IMAGE).o) : $(SKT_PDE_SRC) + echo '#include ' > $(IMAGE).cpp + cat $^ $(ARD_MAIN) >> $(IMAGE).cpp + cd $(BUILD_DIR) && $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) \ + -I.. $(subst -I../,-I../../,$(INC_FLAGS)) $(SKETCH).cpp \ + -o $(SKETCH).o + @ $(AR) rc $@ $*.o + @ $(RM) $*.o + +(%.o) : $(ARD_SRC_DIR)/%.c + $(run-cc) + +(%.o) : $(ARD_SRC_DIR)/%.cpp + $(run-cxx) + +(%.o) : %.c + $(run-cc) + +(%.o) : %.cpp + $(run-cxx) + +$(IMAGE).hex : $(ARD_AR_OBJ) $(LIB_AR_OBJ) $(SKT_AR_OBJ) + $(CXX) $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) -L$(BUILD_DIR) \ + $(SKT_LD_FLAG) $(LIB_LD_FLAG) $(ARD_LD_FLAG) -o $(IMAGE).elf + $(OBJCOPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load \ + --no-change-warnings --change-section-lma .eeprom=0 $(IMAGE).elf \ + $(IMAGE).eep + $(OBJCOPY) -O ihex -R .eeprom $(IMAGE).elf $(IMAGE).hex + $(SIZE) $(IMAGE).hex + +upload : clean all +# - pkill -f $(MON_CMD).*$(PORT) +# $(RESET) $(PORT) + $(AVRDUDE) -C$(AVRDUDE_CONF) -p$(MCU) -c$(PROGRAMMER) -P$(PORT) -b$(UPLOAD_SPEED) -D -Uflash:w:$(IMAGE).hex:i -q + +monitor : + LD_LIBRARY_PATH= LD_PRELOAD= \ + $(MON_TERM) -t '$(BOARD) $(PORT)' \ + -e '$(MON_CMD) -$(MON_SPEED) $(PORT)' & + +upload_monitor : upload monitor diff --git a/testing/bin/serialcap b/testing/bin/serialcap new file mode 100755 index 0000000000000000000000000000000000000000..276fdfd4ac87da627499c7207bff2f1420495e66 GIT binary patch literal 13638 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#define TIMEOUT 60 +#define BAUDRATE B9600 + +#define _POSIX_SOURCE 1 /* POSIX compliant source */ +#define FALSE 0 +#define TRUE 1 + +volatile int STOP=FALSE; + +void signal_handler_IO (int status); /* definition of signal handler */ +speed_t convert_baud (char *baudstring); /* convert string baud rate to bit pattern */ +int wait_flag=TRUE; /* TRUE while no signal received */ + +int main(int argc, char** argv) +{ + int fd, c, res; + char *ctl; + struct termios oldtio,newtio; + struct sigaction saio; /* definition of signal action */ + char buf[255]; + char device[MAXPATHLEN]; + int errno = 0; + speed_t baud; + + /* if first command line arg exists then it is the serial device to use */ + if ( argv[1] != NULL ) { + strncpy(device, argv[1], MAXPATHLEN - 1); + } else { + fprintf(stderr,"usage: serialcap [baud]\n"); + exit(-1); + } + + /* second command line arg is baud (if it exists) */ + argv[2] != NULL ? (baud = convert_baud(argv[2])) : (baud = BAUDRATE); + + /* open the device to be non-blocking (read will return immediatly) */ + fd = open(device, O_RDONLY | O_NOCTTY | O_NONBLOCK); + if (fd <0) {perror(device); exit(-1); } + + /* install the signal handler before making the device asynchronous */ + saio.sa_handler = signal_handler_IO; + sigemptyset(&saio.sa_mask); + saio.sa_flags = 0; + saio.sa_restorer = NULL; + sigaction(SIGIO,&saio,NULL); + + /* allow the process to receive SIGIO */ + fcntl(fd, F_SETOWN, getpid()); + + /* Make the file descriptor asynchronous (the manual page says only + O_APPEND and O_NONBLOCK, will work with F_SETFL...) */ + fcntl(fd, F_SETFL, FASYNC); + + tcgetattr(fd,&oldtio); /* save current port settings */ + /* set new port settings for non-canonical input processing */ + newtio.c_cflag = baud | CS8 | CLOCAL | CREAD; + newtio.c_iflag = IGNPAR | ICRNL; + newtio.c_oflag = 0; + newtio.c_lflag &= ~(ICANON|ECHO); + newtio.c_cc[VMIN]=1; + newtio.c_cc[VTIME]=0; + tcflush(fd, TCIFLUSH); + tcsetattr(fd,TCSANOW,&newtio); + + // No buffering on output + setvbuf(stdout, NULL, _IONBF, 0); + + /* loop while waiting for input. normally we would do something + useful here */ + while (STOP==FALSE) { + /* wait until TIMEOUT seconds for new input, SIGIO will interupt this */ + sleep(TIMEOUT); + /* after receiving SIGIO, wait_flag = FALSE, input is available + and can be read */ + if (wait_flag==FALSE) { + res = read(fd,buf,255); + buf[res]=0; + + /* check for ^d and ^z, replace 1st with null, let it print, then exit; */ + if (ctl = strchr(buf, 0x04)) { + *ctl = 0; + STOP=TRUE; + } + if (ctl = strchr(buf, 0x1A)) { + *ctl = 0; + STOP=TRUE; + } + + printf("%s", buf); + wait_flag = TRUE; /* wait for new input */ + } else { + STOP=TRUE; + errno = 1; + } + } + /* restore old port settings */ + tcsetattr(fd,TCSANOW,&oldtio); + exit(errno); +} + +/*************************************************************************** +* signal handler. sets wait_flag to FALSE, to indicate above loop that * +* characters have been received. * +***************************************************************************/ + +void signal_handler_IO (int status) +{ + wait_flag = FALSE; +} + +// setbaud(char* baudstring) +// convert string baud to proper bit pattern + +speed_t convert_baud(char *baudstring) +{ + fprintf(stderr, "convert_ baud not finished\n"); + return BAUDRATE; +} From a4f53191fba9e590f47eb374c3c0146550895c2c Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 24 Oct 2010 16:49:36 -0400 Subject: [PATCH 26/37] More file cleanup --- testing/bin/.Makefile.swp | Bin 12288 -> 0 bytes testing/bin/._Makefile.master | Bin 1448 -> 0 bytes testing/bin/serialcap | Bin 13638 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 testing/bin/.Makefile.swp delete mode 100755 testing/bin/._Makefile.master delete mode 100755 testing/bin/serialcap diff --git a/testing/bin/.Makefile.swp b/testing/bin/.Makefile.swp deleted file mode 100644 index a6016eff3fd05c9cf77866c780f6f438f26aead4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&&u`N(6bEpRTZ9G^NSqD5LR>l!J1~umR{W5nPGQ{@+{7E9t{ufr1Q)n-;ZJ}+ zg?|M84St+>X;P#jja8fgeWSj*&UNwYD?R3V4kcI#RRs|}5 zd}C*mZ4Yktn?�Ret%>WVHq}2tWV=5P$##AOHafK;XX?@WlpuLr-|Fd&=|Oxbe%_ zO))?K0uX=z1Rwwb2tWV=5P$##An*?g$c(X<7a03U(ft3veE5HwqjOfB*y_009U<00Izz00bcLw+Q4W)m5f=7z+9< z8?VE;bYA@~SF&E0UZ-lEnry8i#aHi`PuD$zaFsY zC>c(Mqo)tY@hI5kd!lls&^DF2ZBmzY$)aS~<^x(OqN31wDt&Iv&xZC;7KONPjaP=c z+!N(&Ri?^`$Fi2}V4NHV0j&*0rfT8+tI3o7KHDGDzKio*`nfuh+k+kI)8$I0&w0}z z&y7-<<8x|}=c%0+xz*}=JFN$Vqox1Ojhs@R)|o50+1L3ClDI}u>uf-_(2Q|tYIOp5g|Y}9>55cV-;Xv zU;$zVH#`c5sT2zf&||*(E~#ayIr#;-sd**(zNsZe`Q@oa*~QNJDXHO!MMatUMV5L7 zND>N2GWtkt1y2{(VH!}Q-Wm;o;T!@i44|SAOd!fbkuU8lm_a3k46tluEG;g|2eO5H Z!=0Rfv>XG&|NlT5446NF*eo0%4gg~tE-3&2 diff --git a/testing/bin/serialcap b/testing/bin/serialcap deleted file mode 100755 index 276fdfd4ac87da627499c7207bff2f1420495e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13638 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 Date: Sun, 24 Oct 2010 16:59:13 -0400 Subject: [PATCH 27/37] Test makefile information added to README. --- testing/README | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/testing/README b/testing/README index c51ce0dc789..eb503eb9b97 100644 --- a/testing/README +++ b/testing/README @@ -1,5 +1,16 @@ Relevant files for the running the tests. For running the buildbot Master, and Slave for Continuous integration will go here for now. -Probably need a better more thought out organzation for this. +Code needed to run tests place in the testing/src directory. +Makefile will be there to compile and send output to testing/bin +The Makefiles, scripts, and binaries needed to rin tests will be all placed in testing/bin. + +All the related buildbot files will go into testing/buildbot + +Need to place spec for running tests. +make compile testname board port +make upload testname board port +make getTestResult testname board port + +This needs to be repeated for each board attached to the test box. From 387677c3877fcd154d99902ecb315ef777e718eb Mon Sep 17 00:00:00 2001 From: Ricklon Date: Sun, 24 Oct 2010 17:07:56 -0400 Subject: [PATCH 28/37] AVR toolchain requirement added for Makefile. --- testing/README | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/testing/README b/testing/README index eb503eb9b97..c608c7303b4 100644 --- a/testing/README +++ b/testing/README @@ -13,4 +13,9 @@ make getTestResult testname board port This needs to be repeated for each board attached to the test box. +Additional note. The AVR toolchain for Windows, Linux, and Mac OS X need to be indicated. + +Buildbot note: +The slave will need to know which toolchain to run. + From ff1631bb46d3ffa8449b8b5d705b381abf212c51 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Tue, 26 Oct 2010 00:08:28 -0400 Subject: [PATCH 29/37] Created initial Makefiles for automated testing. First adapting the Makefiles for linux. Running from /build/linux/work/ directory. Lot's more clean up and feature adding. Need all libraries to be included automaticly. Still need to specify sketchname. Hooks being put in place. --- testing/bin/Makefile | 11 - testing/tests/ATS_Constants/ATS_Constants.pde | 76 ++++ testing/tests/ATS_Constants/Makefile | 20 + .../ATS_Constants/build/ATS_Constants.cpp | 91 +++++ .../tests/ATS_Constants/build/libarduino.a | Bin 0 -> 56676 bytes .../tests/ATS_Constants/build/liblibrary.a | Bin 0 -> 31834 bytes testing/tests/ATS_Constants/build/libsketch.a | Bin 0 -> 2956 bytes testing/tests/ATS_Constants/tmp.txt | 4 + testing/tests/ATS_General/ATS_General.pde | 94 +++++ testing/tests/ATS_Skeleton/ATS_Skeleton.pde | 52 +++ testing/tests/ATS_Skeleton/Makefile | 20 + .../tests/ATS_Skeleton/build/ATS_Skeleton.cpp | 67 ++++ .../tests/ATS_Skeleton/build/ATS_Skeleton.eep | 1 + .../tests/ATS_Skeleton/build/ATS_Skeleton.elf | Bin 0 -> 29372 bytes .../tests/ATS_Skeleton/build/ATS_Skeleton.hex | 368 ++++++++++++++++++ testing/tests/ATS_Skeleton/build/libarduino.a | Bin 0 -> 56676 bytes testing/tests/ATS_Skeleton/build/liblibrary.a | Bin 0 -> 31834 bytes testing/tests/ATS_Skeleton/build/libsketch.a | Bin 0 -> 2200 bytes .../ATS_StringIndexOfMemory.pde | 102 +++++ .../tests/ATS_StringTest/ATS_StringTest.pde | 184 +++++++++ testing/tests/ATS_ToneTest/ATS_ToneTest.pde | 250 ++++++++++++ testing/{bin => tests}/Makefile.master | 23 +- 22 files changed, 1340 insertions(+), 23 deletions(-) delete mode 100755 testing/bin/Makefile create mode 100644 testing/tests/ATS_Constants/ATS_Constants.pde create mode 100755 testing/tests/ATS_Constants/Makefile create mode 100644 testing/tests/ATS_Constants/build/ATS_Constants.cpp create mode 100644 testing/tests/ATS_Constants/build/libarduino.a create mode 100644 testing/tests/ATS_Constants/build/liblibrary.a create mode 100644 testing/tests/ATS_Constants/build/libsketch.a create mode 100644 testing/tests/ATS_Constants/tmp.txt create mode 100644 testing/tests/ATS_General/ATS_General.pde create mode 100644 testing/tests/ATS_Skeleton/ATS_Skeleton.pde create mode 100755 testing/tests/ATS_Skeleton/Makefile create mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.cpp create mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep create mode 100755 testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf create mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex create mode 100644 testing/tests/ATS_Skeleton/build/libarduino.a create mode 100644 testing/tests/ATS_Skeleton/build/liblibrary.a create mode 100644 testing/tests/ATS_Skeleton/build/libsketch.a create mode 100644 testing/tests/ATS_StringIndexOfMemory/ATS_StringIndexOfMemory.pde create mode 100644 testing/tests/ATS_StringTest/ATS_StringTest.pde create mode 100644 testing/tests/ATS_ToneTest/ATS_ToneTest.pde rename testing/{bin => tests}/Makefile.master (94%) diff --git a/testing/bin/Makefile b/testing/bin/Makefile deleted file mode 100755 index 4087cc8070a..00000000000 --- a/testing/bin/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -#Test builder and runner make file -# each test needs make compiole, make upload, make getResult - -BOARD ?= atmega328 -PORT ?= /dev/ttyUSB0 -ARD_HOME ?= /Applications/Arduino.app/Contents/Resources/Java -AVRDUDE_HOME = ?/usr/local/test/avr -#PROGRAMMER ?= stk500v2 - -#include Makefile.master -include ../../Makefile.master diff --git a/testing/tests/ATS_Constants/ATS_Constants.pde b/testing/tests/ATS_Constants/ATS_Constants.pde new file mode 100644 index 00000000000..d58e8bac637 --- /dev/null +++ b/testing/tests/ATS_Constants/ATS_Constants.pde @@ -0,0 +1,76 @@ +//************************************************************************ +//* Arduino Test of Arduino Constants +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Test of Arduino Constants +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + int startMemoryUsage; + + //Start memory usage must be site prior to ATS_begin + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "Test of Arduino Constants"); + /* + * Test Run Start + */ + + + //test true constant + ATS_PrintTestStatus("1. Test of true constant", true == 1); + + //test false consts + ATS_PrintTestStatus( "2. Test of false constant", false == 0); + + //Test of HIGH == 1 + ATS_PrintTestStatus( "3. Test of HIGH == 1", HIGH == 1); + + //Test of LOW == 0 + ATS_PrintTestStatus( "4. Test of LOW == 0", LOW == 0); + + //Test of INPUT == 1 + ATS_PrintTestStatus( "5. Test of INPUT == 1", HIGH == 1); + + //Test of OUTPUT == 0 + ATS_PrintTestStatus( "6. Test of OUTPUT == 0", LOW == 0); + + //test decimal + ATS_PrintTestStatus( "7. Test of decimal constant", 101 == ((1 * pow(10,2)) + (0 * pow(10,1)) + 1)); + + //test binary + ATS_PrintTestStatus( "8. Test of binary constant", B101 == 5); + + //test octal + ATS_PrintTestStatus( "9. Test of octal constant", 0101 == 65); + + //test hexadecimal + ATS_PrintTestStatus( "7. Test of hexadecimal constant", (0x101 == 257)); + + /* + * Test Run End + */ + ATS_ReportMemoryUsage(startMemoryUsage); + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + + diff --git a/testing/tests/ATS_Constants/Makefile b/testing/tests/ATS_Constants/Makefile new file mode 100755 index 00000000000..b49354de231 --- /dev/null +++ b/testing/tests/ATS_Constants/Makefile @@ -0,0 +1,20 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +ARD_HOME ?= ../../../build/linux/work +ARD_BIN ?= /usr/bin +AVRDUDE_BIN ?= /usr/bin +AVRDUDE_CONF ?=/etc/avrdude.conf +LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility + +#SKETCH ?= +#BUILD_DIR + +PROGRAMMER ?= stk500v1 +#PROGRAMMER ?= stk500v2 + +#include Makefile.master +include ../Makefile.master diff --git a/testing/tests/ATS_Constants/build/ATS_Constants.cpp b/testing/tests/ATS_Constants/build/ATS_Constants.cpp new file mode 100644 index 00000000000..3ace54d36be --- /dev/null +++ b/testing/tests/ATS_Constants/build/ATS_Constants.cpp @@ -0,0 +1,91 @@ +#include +//************************************************************************ +//* Arduino Test of Arduino Constants +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Test of Arduino Constants +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + int startMemoryUsage; + + //Start memory usage must be site prior to ATS_begin + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "Test of Arduino Constants"); + /* + * Test Run Start + */ + + + //test true constant + ATS_PrintTestStatus("1. Test of true constant", true == 1); + + //test false consts + ATS_PrintTestStatus( "2. Test of false constant", false == 0); + + //Test of HIGH == 1 + ATS_PrintTestStatus( "3. Test of HIGH == 1", HIGH == 1); + + //Test of LOW == 0 + ATS_PrintTestStatus( "4. Test of LOW == 0", LOW == 0); + + //Test of INPUT == 1 + ATS_PrintTestStatus( "5. Test of INPUT == 1", HIGH == 1); + + //Test of OUTPUT == 0 + ATS_PrintTestStatus( "6. Test of OUTPUT == 0", LOW == 0); + + //test decimal + ATS_PrintTestStatus( "7. Test of decimal constant", 101 == ((1 * pow(10,2)) + (0 * pow(10,1)) + 1)); + + //test binary + ATS_PrintTestStatus( "8. Test of binary constant", B101 == 5); + + //test octal + ATS_PrintTestStatus( "9. Test of octal constant", 0101 == 65); + + //test hexadecimal + ATS_PrintTestStatus( "7. Test of hexadecimal constant", (0x101 == 257)); + + /* + * Test Run End + */ + ATS_ReportMemoryUsage(startMemoryUsage); + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + + +#include + +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/testing/tests/ATS_Constants/build/libarduino.a b/testing/tests/ATS_Constants/build/libarduino.a new file mode 100644 index 0000000000000000000000000000000000000000..615cb41a765790884f0de053e9a778624eeb2c40 GIT binary patch literal 56676 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 literal 0 HcmV?d00001 diff --git a/testing/tests/ATS_Constants/build/liblibrary.a b/testing/tests/ATS_Constants/build/liblibrary.a new file mode 100644 index 0000000000000000000000000000000000000000..0bf43faaf6a8e23390d8c8a625767538bf6db7fd GIT binary patch literal 31834 zcmeHwdw7)9wfCM(3?WqlQ$Yut0JE5j`F!0~yHJkff90qV?!- z6%;igfXd^i*5jexs?^7dRUXMX?Llm9wU@7t?bAx6)Kaw?`q6$I>yhvG+k3Bh_q>@1 z)$=^3e|#I(?6uZjd+oLF``zz;cSc+qOD<`=yr?Xk?J6oKPcENWHF|OpN*>rBtm_g*Ti!j4Dt{VC-O}{vP0lg-ZR;Kx$PYnrKd>6p^-gYDz;xGTzpv z$z(j%FeBNrTobF3iBx<+i^fyQSaaKQ8!47b#g;VAZ;Gvq&s$xyGTv--IqU@vI~i|n zy2&J#YH78}G{s|W@u@4?R5ZFWz9iL>j8;~u=yh`|Dr#!#=GD%b))Z@No1iVINi_Bf zsiL7Z31x&4Trp|Ng89)a9;@Z69zJ8r ztl4VWwJoVwQ%y42l5As8TWVU%3X~A^PY`3G#%@|TzC6R6(j04QSvIS=bw%o$M5=LS zys4EYd-@###H`F2lVw%uB~*9KoVrAFZgmK2S&>3&v~6O>46vh!qZR2AVIHE>6U!3F zSD(sk_`GYVELSw@tC;8(dsDM5cwKk#=7yDCRvTh%jk6QYagUQ|UfSYOb7IXamd2K( zRwUy|k2|gI>gL#TC(@PErbQRl%$q-}cCIHiW#PQ&>{(N%d7NprbLwWzu9+U4K4n3T z$6in~e?fHq)w34VMCVSK;{+_%4eaW+*fJ-rw$|8^c+J;V#F~&(T>^{a%M#7H#p!l{ z29?z95Glk^&kgK2X!Da6tZKO?k&I8PtYM4r=!$H*Vv<(4z;wm7wnR&FjqVzvprTT` zX)4jYtj5)KacZ^g=UMEE@u}5QS1er`Ptu&#*T9Xv@no$?_74&0VQ7 z|1uzZQP7L3G>Zc8>x-r&8&)KmTl7G^0`pX)rK|`O8ayvrW>tZB73Jmb@5CysCni-+ znrNi!i*Bo#JtGhZU~yqwK+RVkrPKkeAvPeWN(YZo7pl=};8vxk@2uJRhxdBA(`)X& zExj(i<}UnhI-Kr&L2bbAURAh#Q*pZUMfmrXO{r8p)!nKq-J#T`3j)X1bf-I&y5~dw zQrDEaYGAd|`-?m3+ktKPfEp;hraaI?fBo6&ST+1`cRBR@HE^i-{|x_S;NiO6)mu8! z>&l{6)RvsBde)Z}ZXe#cs4S#YT;rs;)|VpFd$@ad_g@35YfZ;pop+aQJP&E~Y$$8* z-c)@5a9U=p7<7TLV6C;}o+|>!(pGc2GH`6I;Nt^5>w&N99^O&7eP&q(=JrMZMOv>xe+lZ9Y2xs1zvWua-dN#bTx;7j!rMlsdrfl}A_5Y>1SbBxq zH@r`t!G~`x-dg;8@zy~lWt~@a)^lU*4~<) z*l}9m7)k(s{;^G!hT052|5&=hhQZH2rtYO&;k|(#)up;N*|4;w(^Xa$K4OkH)By>d zVCYTaQ`+dc*o16`kMt*53O*=nTbf)WJ=uh(ZLBnD9g_aC30VUl>0e@~P4rFprIsT; zvK>-;zQ}Sf4T5J6=+m zIO~kOXf+yhNwCFG7i-T*rO|ReO`d5%=2$m;W8uKH1GXtu4_fmW-re5a+TDLUwK7a~ zt+Wy_SjpoGvC(%nYy8tohFCAAYBA9n2Pc&6i_ zj(a+8>uBkScGPxU(NWe>++O^0ar^N0A=_1??WX0a*kbspr12XCOJUKeA`P)rOhp!B zeI7~1n_>}iBbg<-36pI~N9@8iqz-p7_Dgg-rJbuWv4Ura|r*8e^U^C;kBw(+UJ z$3s@-0l^7zpA}dnx*XcDOpoglGGtRMxymD3n)PFfo$^qg63qtKRf5M~9&1a*lV(kn zo2!>5xr5A-#tW1AyEn(DLldG`$+;m4<-Si~galrE({u?2sP6y3&$S07l2DtgS4m9l$C;G^D z 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 literal 0 HcmV?d00001 diff --git a/testing/tests/ATS_Constants/build/libsketch.a b/testing/tests/ATS_Constants/build/libsketch.a new file mode 100644 index 0000000000000000000000000000000000000000..adae4460d8cbbf3b669b0c4a7e43f1a1e56c70ed GIT binary patch literal 2956 zcmbVOU2GIp7`?-mf26R2KTyqppf#GMTgtYLfcyknNRbU~(KLqXbazVE?Cz{PQ>2X% zVq;=LP)eaZ&=BKWQ+V;geK4Uuq6rogW1v2hE~o>qXm2m^;F?lXZ0{yx6B28dSBuu{q^c?_PE8P}^ZeQBc}z zif9*sC&ZhW`2(aH+;pv2BUXz2YhDnQZxj?w&Slerq+pFLGZ|H>CO&MnhK)FJ3IU^)Qv$rYh-c- zJs+&5DaiHYih6kGbg$ni=XZ3#+J!TY4RO+2^vEJ#zhjGS)c% z)9{Sy)H(Z{^bG6eCI%-iOpHxDl6#>2%$#t1r90ns<))Gw9~{3hJ~qy*oAZ_AM}Ixx zR{ZceWlnM2HShTM6;m;))NXEG{f(lGZrPYzs?5pXsypIKagYCgt30eEM{iYbSK^~% zBOi^dzsC9_L+=mm8rn9*8r{yt%8kmhQSRLh?A^sl)?& zs?1}agf&pG^&VKe?AboaY~!pg5?S5WMWV;DM1p~Yd;bz;Bd>eDcNIec_f~rM>A&=w zA>y4|=8GF5gXDeO;_LVruu<14li-rR0KNi{x_4y)F*fPG>~lFUbxT}@*Gb*(i0(Zk z24&LEaYQ3fMdG&_EaD~#@&Q{4Ft-Lc25`8Xciz_^ zkiQjFEP?X|iQi;B+VJn&jYT;Ku10((W*1V6Ig;6h1L%V_Mb{JFSIO?5^=s%A5pG5pGBK~B=zZ3Dljrc!Ad?(^R zi1>59&+`<=@BK59k9=4&rIOIJ_7jI%G>s&!wMx?Fl7k1+uC)s#t!$ij`JhoY7oDuB zWz5om<~}HzMmKNhWsOfu=%cQ6B^&uoZ!zq{WyA2kA!mfv)y!y*aXME_XWFrbuB01D zmvcp%-`jRuxBIPhrcad2cd*1lf8Ofd38H7S9x>jwdg}$Aw@hh3SS1eZMICoKqnJJ8 z{f8n~%-PtBP288bw<#*jGXGL+1z+xS-bco9)y4CEoV*r@^FX8VouP)~cxE}4ydH>e zK!?V&OU)~=O#n6Ie0!v3A2>Cgum=EY$PWWja}=DKw_w`Pe)Lez_2B;y=0#d{C9p8u!?Fu0Ir{qsCD#T|%{7ILJ+adln`BPr}9?TLvWZ%IO zoc9*&_WukBLfZr$gZ?Be$B Started on TestArduino +//* Oct 18, 2010 Added memory testing +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include "pins_arduino.h" +#include +#include "avr_cpunames.h" + + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) +#define kBoard_PinCount 20 +#define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define kBoard_PinCount 70 +#define kBoard_AnalogCount 16 +#endif + + + + +//************************************************************************ +void setup() +{ + short ii; + uint8_t timerNumber; + int startMemoryUsage; + + startMemoryUsage = ATS_GetFreeMemory(); + + ATS_begin("Arduino", "general"); + + //* test digital pins + //* we start at 2 because 0/1 are RXD/TXD + for (ii=2; ii 1) + ATS_TestSerialLoopback(&Serial1, "Serial1"); +#endif +#if (SERIAL_PORT_COUNT > 2) + ATS_TestSerialLoopback(&Serial2, "Serial2"); +#endif +#if (SERIAL_PORT_COUNT > 3) + ATS_TestSerialLoopback(&Serial3, "Serial3"); +#endif + + ATS_Test_EEPROM(); + + + ATS_ReportMemoryUsage(startMemoryUsage); + + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + + diff --git a/testing/tests/ATS_Skeleton/ATS_Skeleton.pde b/testing/tests/ATS_Skeleton/ATS_Skeleton.pde new file mode 100644 index 00000000000..33fc8168081 --- /dev/null +++ b/testing/tests/ATS_Skeleton/ATS_Skeleton.pde @@ -0,0 +1,52 @@ +//************************************************************************ +//* Arduino Test Example Skeleton +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + int startMemoryUsage; + + //startMemoryUsage must be set directly before ATS_begin + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "Skeleton Test"); + /* + * Test Run Start + * Test one passes because result is set to true + * Test two fails becuase result is set to false + * You can test memory for any set of tests by using the ATS_ReportMemoryUsage test + * There is also a way to print current memeory for debugging + */ + ATS_PrintTestStatus("1. Test of true test status", true); + + ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); + + ATS_ReportMemoryUsage(startMemoryUsage); + /* + * Test Run End + */ + + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + diff --git a/testing/tests/ATS_Skeleton/Makefile b/testing/tests/ATS_Skeleton/Makefile new file mode 100755 index 00000000000..b49354de231 --- /dev/null +++ b/testing/tests/ATS_Skeleton/Makefile @@ -0,0 +1,20 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +ARD_HOME ?= ../../../build/linux/work +ARD_BIN ?= /usr/bin +AVRDUDE_BIN ?= /usr/bin +AVRDUDE_CONF ?=/etc/avrdude.conf +LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility + +#SKETCH ?= +#BUILD_DIR + +PROGRAMMER ?= stk500v1 +#PROGRAMMER ?= stk500v2 + +#include Makefile.master +include ../Makefile.master diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.cpp b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.cpp new file mode 100644 index 00000000000..1c3b9478629 --- /dev/null +++ b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.cpp @@ -0,0 +1,67 @@ +#include +//************************************************************************ +//* Arduino Test Example Skeleton +//* (C) 2010 by Rick Anderson +//* Open source as per standard Arduino code +//* +//************************************************************************ +//* Oct 16, 2010 Started on String Test +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + int startMemoryUsage; + + //startMemoryUsage must be set directly before ATS_begin + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "Skeleton Test"); + /* + * Test Run Start + * Test one passes because result is set to true + * Test two fails becuase result is set to false + * You can test memory for any set of tests by using the ATS_ReportMemoryUsage test + * There is also a way to print current memeory for debugging + */ + ATS_PrintTestStatus("1. Test of true test status", true); + + ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); + + ATS_ReportMemoryUsage(startMemoryUsage); + /* + * Test Run End + */ + + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + +#include + +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep new file mode 100644 index 00000000000..1996e8fde5d --- /dev/null +++ b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf new file mode 100755 index 0000000000000000000000000000000000000000..53c53ccdba6c4387eb1a14975152db7ffb59e5a2 GIT binary patch literal 29372 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 G3i-dos;L+N literal 0 HcmV?d00001 diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex new file mode 100644 index 00000000000..c0ee83fc6b0 --- /dev/null +++ b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex @@ -0,0 +1,368 @@ +:1000000097C00000BBC00000B9C00000B7C000002E +:10001000B5C00000B3C00000B1C00000AFC0000018 +:10002000ADC00000ABC00000A9C00000A7C0000028 +:10003000A5C00000A3C00000A1C000009FC0000038 +:10004000C6C200009BC000009AC3000097C0000019 +:1000500095C0000093C0000091C000008FC0000058 +:100060008DC000008BC000000E02110214021702A6 +:100070001A021D02200224024D414E5546414354AE +:1000800055524552004350552D4E414D4500474372 +:10009000432D56657273696F6E004156522D4C693F +:1000A00062432D56657200436F6D70696C65642DF7 +:1000B0006461746500546573742D53756974652D9E +:1000C0004E616D6500467265652D6D656D6F727967 +:1000D000002E2E2E20006F6B004641494C00203D23 +:1000E0002000696E666F2E002D2D2D2D2D2D2D2DAE +:1000F0002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D30 +:100100002D2D004469676974616C52656164577292 +:100110006974655F0050574D6F75747075745F003A +:10012000416E616C6F67496E7075745F0000760593 +:1001300011241FBECFEFD8E0DEBFCDBF12E0A0E09C +:10014000B1E0E2E2F5E102C005900D92A83BB107F3 +:10015000D9F713E0A8EBB2E001C01D92A436B107B5 +:10016000E1F711E0C0E3D1E003C02297FE01ACD675 +:10017000CE32D107D1F748D00C948F0A41CFA0E3FB +:10018000B0E0E4ECF0E075C642D08C0180E091E094 +:1001900068E071E07CD186E191E061E063D082E3C8 +:1001A00091E060E05FD033D09801281B390BCE017D +:1001B00001962115310529F460E671E011D761E05F +:1001C0001CC000D000D000D0EDB7FEB73196ADB75F +:1001D000BEB712969C938E9311978DE691E0938310 +:1001E0008283358324830CD760E08DB79EB7069653 +:1001F0000FB6F8949EBF0FBE8DBFCE01019632D0D0 +:1002000073D0E096E4E051C67FD2B9DFFFCFA2E021 +:10021000B0E0ECE0F1E02FC6209160033091610383 +:10022000CE0101962115310519F48456934002C080 +:10023000821B930B9A83898389819A812296E2E0BB +:1002400036C6CF93DF93EC0105C08DE493E040E028 +:1002500050E062D5FE01649121966623B1F7DF91EB +:10026000CF910895FF920F931F93CF93DF938C014B +:10027000F62E8DE493E0B801A4D4C801B8D6EC0101 +:1002800007C08DE493E060E240E050E045D5219660 +:10029000CC33D105B4F381ED90E0D3DFFF2021F022 +:1002A00086ED90E0CEDF0CC089ED90E0CADF809152 +:1002B000BC029091BD0201969093BD028093BC0256 +:1002C0008DE493E03AD58091BE029091BF020196F1 +:1002D0009093BF028093BE02CDB7DEB7E5E0E4C5E0 +:1002E000B0DF8DE493E029C5AF92BF92CF92DF9249 +:1002F000EF92FF920F931F9388EE90E0F1DF8DE471 +:1003000093E06CE472E05DD46091BE027091BF0234 +:100310008DE493E04AE050E0EDD48DE493E061E5B4 +:1003200072E04FD49CD17B018C0199D15B016C01AF +:10033000C801B70128EE33E040E050E04FD58DE42E +:1003400093E0BA01A9012AE030E0A6D48DE493E05D +:100350006EE240E050E0E0D4C601B50128EE33E0A3 +:1003600040E050E03BD5AB01BC018DE493E02AE0D6 +:1003700030E092D48DE493E063E740E050E0CCD4E9 +:100380008DE493E0DAD48DE493E0D7D48091BC027D +:100390009091BD02892B29F48DE493E06CE572E025 +:1003A00012C08DE493E06FE572E00BD46091BC0263 +:1003B0007091BD028DE493E04AE050E09BD48DE45F +:1003C00093E061E772E0FDD38DE493E0B6D48DE471 +:1003D00093E064E078D31F910F91FF90EF90DF904E +:1003E000CF90BF90AF900895A0E4B0E0E9EFF1E0C6 +:1003F0003AC5182F092F6B015A017E010894E11CA0 +:10040000F11CC70162EE70E0D9D5E12FF02FE83082 +:10041000F10510F5EC5CFF4FC70154C5B601D5D509 +:100420001BC068E770E00EC065E870E00BC06EE8C6 +:1004300070E008C06AE970E005C067EA70E002C0D9 +:1004400065EB70E0B0D508C065EC70E0FBCFC8018B +:1004500063E772E0BAD503C08E010F5F1F4FC8017A +:10046000C6D54497A0F3C8016EED70E09CD5A114E9 +:10047000B10419F0C801B501A8D58DE493E0BE011F +:100480006F5F7F4F69D4C05CDF4FEAE008C5A0E32F +:10049000B0E0ECE4F2E0E9C47C016B011092BD0233 +:1004A0001092BC021092BF021092BE020DE413E043 +:1004B000C80140E855E260E070E0CDD168EE73E03D +:1004C00080E090E000D1CBD06093B8027093B90285 +:1004D0008093BA029093BB02C8012FD4C8012DD4D7 +:1004E000C8012BD481E090E060E070E0A7017CDFE0 +:1004F00082E090E060E070E045E752E075DF83E085 +:1005000090E060E070E040E852E06EDF84E090E070 +:1005100060E070E046E852E067DF85E090E060E090 +:1005200070E04CE852E060DF86E090E060E070E070 +:10053000A6015ADF6CDE00D000D000D0EDB7FEB7C8 +:1005400031968E010F5F1F4FADB7BEB712961C9349 +:100550000E93119728E932E03383228395838483B5 +:100560004FD58DB79EB706960FB6F8949EBF0FBEB7 +:100570008DBF87E090E060E070E0A80135DF80E0AB +:1005800004D0F3D3E096E8E08CC4982F8E3008F0C6 +:100590009E5097708091A5028295880F880F807C6D +:1005A000892B80937C0080917A00806480937A000C +:1005B00080917A0086FDFCCF2091780040917900EF +:1005C000942F80E030E0282B392BC90108951F9229 +:1005D0000F920FB60F9211242F933F938F939F93F7 +:1005E000AF93BF938091C4029091C502A091C602BF +:1005F000B091C7023091C8020196A11DB11D232FF1 +:100600002D5F2D3720F02D570196A11DB11D209390 +:10061000C8028093C4029093C502A093C602B0930F +:10062000C7028091C0029091C102A091C202B09114 +:10063000C3020196A11DB11D8093C0029093C10217 +:10064000A093C202B093C302BF91AF919F918F91CB +:100650003F912F910F900FBE0F901F9018958FB75D +:10066000F8942091C4023091C5024091C602509185 +:10067000C7028FBFB901CA0108959FB7F8942091AE +:10068000C0023091C1024091C2025091C30286B5AE +:10069000A89B06C08F3F21F02F5F3F4F4F4F5F4F0A +:1006A0009FBF542F432F322F2227280F311D411D6A +:1006B000511D82E0220F331F441F551F8A95D1F729 +:1006C000B901CA010895EF92FF920F931F93CF9340 +:1006D000DF937B018C01D1DFEB010DC0CEDF6C1B02 +:1006E0007D0B685E7340D0F30894E108F1080109BE +:1006F0001109C851DC4FE114F1040105110571F72E +:10070000CDB7DEB7E6E0CFC3789484B5826084BD10 +:1007100084B5816084BD85B5826085BD85B5816005 +:1007200085BDEEE6F0E0808181608083E1E8F0E065 +:100730001082808182608083808181608083E0E894 +:10074000F0E0808181608083E1EBF0E08081846073 +:100750008083E0EBF0E0808181608083EAE7F0E075 +:1007600080818460808380818260808380818160D9 +:1007700080838081806880831092C10008951F92D9 +:100780000F920FB60F9211242F933F934F935F93C5 +:100790006F937F938F939F93AF93BF93EF93FF9349 +:1007A0004091C600E0914903F0914A03CF010196C0 +:1007B00060E870E000D39C0180914B0390914C0362 +:1007C0002817390739F0E753FD4F408330934A0328 +:1007D00020934903FF91EF91BF91AF919F918F912A +:1007E0007F916F915F914F913F912F910F900FBE2D +:1007F0000F901F9018958F92AF92CF92DF92EF9249 +:10080000FF920F931F93DF93CF93CDB7DEB7FC0119 +:100810008AEA92E091838083738362835583448361 +:100820003783268311870087F386E286D586C486C0 +:10083000A68687868D85808B8E85818B8F85828B22 +:10084000CF91DF911F910F91FF90EF90DF90CF90AC +:10085000AF908F900895A0E0B0E0E0E3F4E0FEC236 +:10086000EC013A014B01413482E458078FE06807FC +:1008700080E078070CF077C060E874E88EE190E0E3 +:10088000A4019301CDD22150304040405040CA01D4 +:10089000B90122E030E040E050E0C2D259016A01E3 +:1008A000A6019501209530954095509594E0220F32 +:1008B000331F441F551F9A95D1F760E074E284EF0F +:1008C00090E0AED2CA01B9012FEF30E040E050E035 +:1008D00053D2A4019301A4D2C90181509F4F18168D +:1008E00019061CF4522E5A9403C055245394521ADC +:1008F00060E079E08DE390E0A401930191D2215072 +:10090000304040405040CA01B90122E030E040E0B0 +:1009100050E086D2209530954095509583E0220F87 +:10092000331F441F551F8A95D1F760E074E284EFAE +:1009300090E076D2CA01B9012FEF30E040E050E0FC +:100940001BD2A40193016CD279018A01C9018150A3 +:100950009F4F181619061CF4822F815002C081E0A7 +:10096000821B8515F0F4E885F98581E090E00A881E +:1009700002C0880F991F0A94E2F7808360E079E053 +:100980008DE390E0A40193014BD2215030404040D0 +:100990005040CA01B90122E030E040E050E040D2CE +:1009A00004C0E885F98510829501EC81FD813083D2 +:1009B000EE81FF812083EA85FB85208141E050E0C4 +:1009C000CA010E8402C0880F991F0A94E2F7282BEF +:1009D0002083EA85FB852081CA010F8402C0880F2D +:1009E000991F0A94E2F7282B2083EA85FB858081F2 +:1009F000088802C0440F551F0A94E2F7842B8083B5 +:100A0000CDB7DEB7EFE046C2DC011296ED91FC9166 +:100A10001397E058FF4F8191919180589F4F20810B +:100A20003181821B930B60E870E0C5C1DC01129636 +:100A3000ED91FC911397EE57FF4F208131819291F8 +:100A40008291E058F0408217930719F42FEF3FEF9F +:100A500005C0E20FF31F8081282F30E0C9010895FF +:100A6000CF93DF93DC011296ED91FC911397EF0188 +:100A7000CE57DF4F48815981E058FF4F80819181E7 +:100A8000E058F0408417950719F42FEF3FEF0BC0A3 +:100A9000E40FF51F2081CA01019660E870E08BD158 +:100AA0009983888330E0C901DF91CF910895DC01FB +:100AB0001296ED91FC911397EE57FF4F8081918133 +:100AC000929382930895FC01A085B18521898C9130 +:100AD00090E0022E02C0959587950A94E2F780FF78 +:100AE000F6CF0484F585E02D608308958F92AF9250 +:100AF000CF92DF92EF92FF920F931F9300D00F924D +:100B0000EDB7FEB7319687E0ADB7BEB711968C93BF +:100B100085E0818381E082838DE493E069EC72E07B +:100B200045EC50E024EC30E000EC10E0B1ECEB2EB2 +:100B3000F12CA6ECCA2ED12CF4E0AF2EE3E08E2EE1 +:100B40005ADE0F900F900F901F910F91FF90EF9032 +:100B5000DF90CF90AF908F9008950F931F93CF9316 +:100B6000DF938C01EB0109C02196D801ED91FC9136 +:100B70000190F081E02DC801099568816623A1F7F5 +:100B8000DF91CF911F910F910895EF92FF920F93F4 +:100B90001F93CF93DF938C017B01EA010CC0D70137 +:100BA0006D917D01D801ED91FC910190F081E02DD6 +:100BB000C80109952197209791F7CDB7DEB7E6E0F8 +:100BC00072C1DC01ED91FC910280F381E02D099569 +:100BD0000895A0E2B0E0EEEEF5E03DC11C016A012F +:100BE0007B01411551056105710529F460E340E081 +:100BF00050E092D04EC0882499245401422E5524AE +:100C00006624772401E010E00C0F1D1F080D191D4C +:100C1000C701B601A3019201E1D0F80160830894F5 +:100C2000811C911CA11CB11CC701B601A30192013A +:100C3000D5D0C901DA016C017D01C114D104E104F0 +:100C4000F10401F781E0E82EF12CEC0EFD1EE80C1A +:100C5000F91C3E010894611C711CD501C401019767 +:100C6000A109B1096C01C818D90810C0F601EE0D30 +:100C7000FF1D60816A3010F4605D01C0695CC101D4 +:100C800040E050E049D00894E108F1086E147F0478 +:100C900069F7A096E2E1FBC0EF92FF920F931F93DA +:100CA000CF93DF93EC017A018B012115310541F4DB +:100CB000E881F9810190F081E02D642F099516C03B +:100CC0002A30310591F477FF0CC06DE240E050E02E +:100CD00023D010950095F094E094E11CF11C011DC7 +:100CE000111DCE01B801A7012AE073DFCDB7DEB731 +:100CF000E6E0D9C0EF92FF920F931F937B019A0118 +:100D00000027F7FC0095102FB801A701C5DF1F9140 +:100D10000F91FF90EF900895EF92FF920F931F9322 +:100D20009A01E62EFF2400E010E0B801A701B4DF2D +:100D30001F910F91FF90EF9008950F931F938C01D7 +:100D40006DE040E050E0E8DFC8016AE040E050E0DC +:100D5000E3DF1F910F9108950F931F938C0131DFF3 +:100D6000C801EBDF1F910F910895009721F0BC019E +:100D700080E090E00FC10895629FD001739FF00161 +:100D8000829FE00DF11D649FE00DF11D929FF00D1B +:100D9000839FF00D749FF00D659FF00D9927729F52 +:100DA000B00DE11DF91F639FB00DE11DF91FBD01DD +:100DB000CF011124089597FB092E07260AD077FD4D +:100DC00004D086D006D000201AF4709561957F4F2C +:100DD0000895F6F7909581959F4F0895A1E21A2EF8 +:100DE000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FCF +:100DF000A217B307E407F50720F0A21BB30BE40B1F +:100E0000F50B661F771F881F991F1A9469F7609565 +:100E10007095809590959B01AC01BD01CF0108951F +:100E200097FB092E05260ED057FD04D0D7DF0AD038 +:100E3000001C38F450954095309521953F4F4F4F09 +:100E40005F4F0895F6F790958095709561957F4F67 +:100E50008F4F9F4F08952F923F924F925F926F92C4 +:100E60007F928F929F92AF92BF92CF92DF92EF923A +:100E7000FF920F931F93CF93DF93CDB7DEB7CA1BBB +:100E8000DB0B0FB6F894DEBF0FBECDBF09942A88E6 +:100E9000398848885F846E847D848C849B84AA848E +:100EA000B984C884DF80EE80FD800C811B81AA811B +:100EB000B981CE0FD11D0FB6F894DEBF0FBECDBFE6 +:100EC000ED010895EE0FFF1F0590F491E02D0994B8 +:100ED000AA1BBB1B51E107C0AA1FBB1FA617B70760 +:100EE00010F0A61BB70B881F991F5A95A9F780957C +:100EF0009095BC01CD010895A0E0B0E0E1E8F7E0F5 +:100F0000B2CFEC01A880B980CA80DB80A114B10403 +:100F1000C104D10441F484E2A82E89EDB82E8BE5FA +:100F2000C82E87E0D82EC601B5012DE133EF41E090 +:100F300050E076DF27EA31E440E050E01DDF7B013E +:100F40008C01C601B5012DE133EF41E050E068DFCF +:100F5000CA01B9012CEE34EF4FEF5FEF0DDF6E0DDC +:100F60007F1D801F911F97FF04C06150704080401B +:100F70009048688379838A839B839B01AC015F7768 +:100F8000B901CA01CDB7DEB7EAE089CFB5CF81EAB2 +:100F900092E0B2CF6093A1027093A2028093A30269 +:100FA0009093A4020895FB01DC010D900020E9F765 +:100FB000119705900D920020E1F70895FB01DC01E7 +:100FC00005900D920020E1F70895FB01DC010D90E2 +:100FD0000020E9F7119701900D920020E1F70895A4 +:100FE000FB01DC0101900D920020E1F70895FC0166 +:100FF00001900020E9F7809590958E0F9F1F08952E +:10100000AEE0B0E0E5E0F8E034CF0D891E8986E07F +:101010008C831A8309838FEF9FE79E838D839E01C4 +:10102000275E3F4FCE0101966F89788DA90109D0C7 +:101030002F813885020F131FF80110822E96E4E0ED +:1010400034CFABE0B0E0E6E2F8E005CF3C012B01A5 +:101050005A01FC0117821682838181FD03C06FEF64 +:101060007FEFB9C19AE0892E1E010894211C311C22 +:10107000F3012381F20123FD859123FF81912F014B +:10108000882309F4A5C1853239F423FD859123FF16 +:1010900081912F01853221F490E0B301B6D1E8CFE0 +:1010A000982FFF24EE249924FFE1FF15D0F09B3206 +:1010B00069F09C3228F4903259F0933291F40EC0CA +:1010C0009D3249F0903369F441E024C052E0F52AA2 +:1010D00084E0F82A28C098E0F92A25C0E0E1FE2A39 +:1010E00022C0F7FC29C0892F80538A3070F4F6FEA5 +:1010F00005C0989C902C1124980E15C0E89CE02CFB +:101100001124E80EF0E2FF2A0EC09E3229F4F6FC0C +:101110005FC140E4F42A07C09C3619F450E8F52A70 +:1011200002C0983649F4F20123FD959123FF919175 +:101130002F01992309F0B8CF892F8554833018F0F7 +:101140008052833038F444E050E0A40EB51E5FE3D3 +:1011500059830FC0933631F0933779F0933509F006 +:1011600052C01FC0F5018081898342E050E0A40E87 +:10117000B51E610101E010E011C0F501C080D18011 +:10118000F6FC03C06FEF7FEF02C0692D70E042E014 +:1011900050E0A40EB51EC6012DD18C015FE7F522EB +:1011A00013C0F501C080D180F6FC03C06FEF7FEF64 +:1011B00002C0692D70E042E050E0A40EB51EC601E9 +:1011C0000ED18C0150E8F52AF3FE06C018C080E26B +:1011D00090E0B3011AD1EA948E2D90E00817190718 +:1011E000B0F30DC0F601F7FC8591F7FE81916F0118 +:1011F00090E0B3010AD1E110EA94015010400115CA +:10120000110581F7E2C0943611F0993661F5F7FEC9 +:1012100008C0F501208131814281538184E090E052 +:101220000AC0F501808191819C01442737FD4095DA +:10123000542F82E090E0A80EB91E9FE6F92257FFD6 +:1012400009C050954095309521953F4F4F4F5F4FC6 +:10125000E0E8FE2ACA01B901A1012AE030E001D18B +:10126000D82ED2183FC0953729F41F2D1F7E2AE0B3 +:1012700030E01DC01F2D197F9F3661F0903720F49C +:10128000983509F0A5C00FC0903739F0983709F0AC +:101290009FC004C028E030E00AC0106114FD146053 +:1012A00020E130E004C014FD166020E132E017FFB9 +:1012B00008C0F501608171818281938144E050E032 +:1012C00008C0F50180819181BC0180E090E042E09E +:1012D00050E0A40EB51EA101C4D0D82ED2188FE7BD +:1012E000F82EF122F6FE0BC05EEFF522D91438F489 +:1012F000F4FE07C0F2FC05C08FEEF82202C01D2DDF +:1013000001C0192DF4FE0DC0FE01ED0DF11D80810F +:10131000803319F499EEF92208C01F5FF2FE05C070 +:1013200003C08F2D867809F01F5F0F2DF3FC13C0CB +:10133000F0FE0EC01E1510F09D2C0AC09D2C9E0CB8 +:10134000911A1E2D05C080E290E0B3015ED01F5FB0 +:101350001E15C8F304C01E1510F4E11A01C0EE24D6 +:1013600004FF0EC080E390E0B3014FD002FF1BC02A +:1013700001FD03C088E790E00EC088E590E00BC057 +:10138000802F867881F001FF02C08BE201C080E2ED +:10139000F7FC8DE290E0B30138D005C080E390E027 +:1013A000B30133D09A94D914C8F3DA94F101ED0D56 +:1013B000F11D808190E0B30128D0DD20B1F705C098 +:1013C00080E290E0B30121D0EA94EE20C9F750CE3C +:1013D000F30166817781CB012B96E2E158CDFC01C8 +:1013E0000590615070400110D8F7809590958E0F50 +:1013F0009F1F0895FC016150704001900110D8F7C3 +:10140000809590958E0F9F1F08950F931F93CF93F4 +:10141000DF938C01EB018B8181FF1BC082FF0DC02C +:101420002E813F818C819D812817390764F4E881E2 +:10143000F9810193F983E88306C0E885F985802F57 +:101440000995892B31F48E819F8101969F838E832C +:1014500002C00FEF1FEFC801DF91CF911F910F91D5 +:101460000895FA01AA27283051F1203181F1E8943A +:101470006F936E7F6E5F7F4F8F4F9F4FAF4FB1E087 +:101480003ED0B4E03CD0670F781F891F9A1FA11D82 +:10149000680F791F8A1F911DA11D6A0F711D811D83 +:1014A000911DA11D20D009F468943F912AE0269F48 +:1014B00011243019305D3193DEF6CF010895462FA7 +:1014C0004770405D4193B3E00FD0C9F7F6CF462F88 +:1014D0004F70405D4A3318F0495D31FD40524193F1 +:1014E00002D0A9F7EACFB4E0A695979587957795AE +:1014F0006795BA95C9F700976105710508959B0135 +:10150000AC010A2E06945795479537952795BA95BD +:10151000C9F7620F731F841F951FA01D0895F894CB +:02152000FFCFFB +:1015220041726475696E6F00536B656C65746F6EA2 +:10153200205465737400312E2054657374206F66D5 +:101542002074727565207465737420737461747588 +:101552007300322E2054657374206F662066616CAE +:1015620073652074657374207374617475732C20B1 +:10157200746869732077696C6C206661696C2E00EF +:101582004D656D6F7279205573616765004D656DAC +:101592006F727920557361676520286C6F737420B0 +:1015A200256420627974657329002050574D2045C7 +:1015B20052524F520020202850574D3D2530326460 +:1015C2002025642525204C4F5720256425252048B9 +:1015D2004947482900454550524F4D5F627974652D +:1015E2005F7277202028616464723D203078253054 +:1015F20034582900454550524F4D5F776F72645FF2 +:101602007277202028616464723D2030782530345E +:10161200582900454550524F4D5F64776F72645FA1 +:1016220072772028616464723D2030782530345806 +:101632002900253032640020284C6F773D25346420 +:1016420020486967683D2534642068656C7065725E +:101652002070696E3D25642900202868656C7065DC +:10166200722070696E3D25303264290052616E200D +:101672000020746573747320696E20004F4B00461E +:1016820041494C454420286661696C757265733D19 +:10169200002900200041546D6567613332385000E3 +:1016A200342E332E3400312E362E37004F63742001 +:1016B200323620323031300025642062797465730D +:1016C200000100000001000000006305AD05C50532 +:0816D20004053005570516055B +:00000001FF diff --git a/testing/tests/ATS_Skeleton/build/libarduino.a b/testing/tests/ATS_Skeleton/build/libarduino.a new file mode 100644 index 0000000000000000000000000000000000000000..bcc51ef76616c326d1d165e33324b384d5d9dd13 GIT binary patch literal 56676 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 Started on String Test +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + char testName[64]; + int startMemoryUsage; + /* + * Create variable for the tests. + */ + + + String stringOne; + int firstClosingBracket; + int firstOpeningBracket; + int secondOpeningBracket; + int secondClosingBracket; + int bodyTag; + int firstListItem; + int secondListItem; + int lastOpeningBracket; + int lastListItem; + int lastParagraph; + int secondLastGraf; + + /*; + * initiate the test run + */ + startMemoryUsage = ATS_GetFreeMemory(); + ATS_begin("Arduino", "String Memory Test"); + // indexOf() returns the position (i.e. index) of a particular character + // in a string. For example, if you were parsing HTML tags, you could use it: + stringOne = ""; + firstClosingBracket = stringOne.indexOf('>'); + Serial.println("The index of > in the string " + stringOne + " is " + firstClosingBracket); + + stringOne = ""; + secondOpeningBracket = firstClosingBracket + 1; + secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket ); + Serial.println("The index of the second > in the string " + stringOne + " is " + secondClosingBracket); + + // you can also use indexOf() to search for Strings: + stringOne = ""; + bodyTag = stringOne.indexOf(""); + Serial.println("The index of the body tag in the string " + stringOne + " is " + bodyTag); + + stringOne = "

    "; + firstListItem = stringOne.indexOf("
  • "); + secondListItem = stringOne.indexOf("item", firstListItem + 1 ); + Serial.println("The index of the second list item in the string " + stringOne + " is " + secondClosingBracket); + + // lastIndexOf() gives you the last occurrence of a character or string: + lastOpeningBracket = stringOne.lastIndexOf('<'); + Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket); + + lastListItem = stringOne.lastIndexOf("
  • "); + Serial.println("The index of the last list item in the string " + stringOne + " is " + lastListItem); + + + // lastIndexOf() can also search for a string: + stringOne = "

    Lorem ipsum dolor sit amet

    Ipsem

    Quod

    "; + lastParagraph = stringOne.lastIndexOf(" Started on String Test +//************************************************************************ + +#include "WProgram.h" +#include "HardwareSerial.h" +#include + +//************************************************************************ +void setup() +{ + + int startMemoryUsage; + + ATS_begin("Arduino", "Test of String Library"); + + /* + * Test Variable Setup + * Best practive set all your test variables prior to teseting. + * This is required for Memory tests. + */ + + String stringOne = String("stringThree = "); + String stringTwo = String("this string"); + String stringThree = String (); + char charResult[100]; + + + + /* + * Run the tests + */ + + // adding a constant integer to a string: + stringThree = stringOne + 123; + //strcpy(charResult, "\0"); + stringThree.toCharArray(charResult, sizeof(charResult)); + + ATS_PrintTestStatus("1. Adding a constant integer to a string:", strcmp(charResult,"stringThree = 123" ) == 0); + + // adding a constant long interger to a string: + stringThree = stringOne + 123456789; + stringThree.toCharArray(charResult, sizeof(charResult)); + + ATS_PrintTestStatus("2. Adding a constant long interger to a string", strcmp(charResult,"stringThree = 123456789" ) == 0); + + + // adding a constant character to a string: + stringThree = stringOne + 'A'; + stringThree.toCharArray(charResult, sizeof(charResult)); + + ATS_PrintTestStatus("3. Adding a constant character to a string", strcmp(charResult,"stringThree = A" ) == 0); + + + // adding a constant string to a string: + stringThree = stringOne + "abc"; + stringThree.toCharArray(charResult, sizeof(charResult)); + + ATS_PrintTestStatus("4. Adding a constant string variable to a string", strcmp(charResult,"stringThree = abc" ) == 0); + + //"5. Adding a constant long interger to a string" + stringThree = stringOne + stringTwo; + stringThree.toCharArray(charResult, sizeof(charResult)); + + ATS_PrintTestStatus("5. Adding a constant long interger to a string", strcmp(charResult,"stringThree = this string" ) == 0); + + + /* + * setup up String Comparison Operater Tests + */ + + stringOne = String("this"); + stringTwo = String("that"); + + // two strings equal: + ATS_PrintTestStatus("6. Two strings equal",stringOne == "this"); + + // two strings not equal: + ATS_PrintTestStatus("7. Two strings not equal",stringOne != stringTwo); + + // two strings not equal (case sensitivity matters): + stringOne = "This"; + stringTwo = "this"; + ATS_PrintTestStatus("8. Two strings not equal [case sensitivity matters]", stringOne != stringTwo); + + // you can also use equals() to see if two strings are the same: + stringOne = "this"; + stringTwo = "this"; + ATS_PrintTestStatus("9. Equals() method equals", stringOne.equals(stringTwo)); + + + // you can also use not equals() to see if two strings are not the same: + stringOne = String("This"); + stringTwo = String("this"); + ATS_PrintTestStatus("10. Not equals() method equals", !stringOne.equals(stringTwo)); + + // or perhaps you want to ignore case: + ATS_PrintTestStatus("11. EqualsIgnoreCase() method equals", stringOne.equalsIgnoreCase(stringTwo)); + + // a numeric string compared to the number it represents: + stringOne = "1"; + int numberOne = 1; + ATS_PrintTestStatus("12. A numeric string compared to the number it represents", stringOne == numberOne); + + // two numeric strings compared: + stringOne = "2"; + stringTwo = "1"; + ATS_PrintTestStatus("13. Two numeric strings compared",stringOne >= stringTwo); + + + // comparison operators can be used to compare strings for alphabetic sorting too: + +/* + stringOne = String("Brown"); + ATS_PrintTestStatus("14. comparison operator < can be used to compare strings for alphabetic sorting ",stringOne < "Charles"); + ATS_PrintTestStatus("15. comparison operator > can be used to compare strings for alphabetic sorting ",stringOne > "Adams"); + ATS_PrintTestStatus("16. comparison operator <= can be used to compare strings for alphabetic sorting ",stringOne <= "Browne"); + ATS_PrintTestStatus("17. comparison operator >= can be used to compare strings for alphabetic sorting ",stringOne >= "Brow"); + */ + + + // the compareTo() operator also allows you to compare strings + stringOne = "Cucumber"; + stringTwo = "Cucuracha"; + + ATS_PrintTestStatus("18. The compareTo() operator also allows you to compare strings", stringOne.compareTo(stringTwo) < 0); + + // compareTo() String with numnber > String with number: + stringOne = "Sensor: 50"; + stringTwo= "Sensor: 150"; + ATS_PrintTestStatus("19. The compareTo() String with integers", stringOne.compareTo(stringTwo) < 0); + + +// compareTo() String with numnber > String with number append integer, matches example code: + stringOne = "Sensor: "; + stringTwo= "Sensor: "; + stringOne += 50; + stringTwo += 150; + ATS_PrintTestStatus("20. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); + + + /* + * setup up String Append Operation Tests + */ + // Serious awful problem here + stringOne = String("Sensor "); + stringTwo = String("value"); + + stringOne += stringTwo; + ATS_PrintTestStatus("21. Adding string to string += ", stringOne.equals("Sensor value")); + + ATS_PrintTestStatus("22. The compareTo() compare strings with appended integers", stringOne.compareTo(stringTwo) < 0); + /* + * Test complete + */ + + ATS_end(); + +} + + +//************************************************************************ +void loop() +{ + + +} + + + + + + + + + + + + diff --git a/testing/tests/ATS_ToneTest/ATS_ToneTest.pde b/testing/tests/ATS_ToneTest/ATS_ToneTest.pde new file mode 100644 index 00000000000..8bec6be2aaf --- /dev/null +++ b/testing/tests/ATS_ToneTest/ATS_ToneTest.pde @@ -0,0 +1,250 @@ +//************************************************************************ +//* Arduino Test Suite +//* ATS_ToneTest +//* +//* Copyright (c) 2010 Mark Sproul All right reserved. +//* +//* This library is free software; you can redistribute it and/or +//* modify it under the terms of the GNU Lesser General Public +//* License as published by the Free Software Foundation; either +//* version 2.1 of the License, or (at your option) any later version. +//* +//* This library is distributed in the hope that it will be useful, +//* but WITHOUT ANY WARRANTY; without even the implied warranty of +//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//* Lesser General Public License for more details. +//* +//* You should have received a copy of the GNU Lesser General Public +//* License along with this library; if not, write to the Free Software +//* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +//************************************************************************ +//* Aug 31, 2010 Started on TestArduino +//* Oct 23, 2010 Started on ToneTest +//************************************************************************ + + + + + +#include "WProgram.h" +#include "HardwareSerial.h" + +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) + #define kBoard_PinCount 20 + #define kBoard_AnalogCount 6 +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define kBoard_PinCount 70 + #define kBoard_AnalogCount 16 +#endif + +#include + +//************************************************************************ +void TestTonePin(uint8_t toneOutputPinNumber) +{ +uint8_t helperpin; +unsigned long startMilliSecs; +unsigned long highCount, lowCount; +int previousState; +int currentState; +char testNameString[80]; +long outputFreq; +long measuredFreq; +boolean passed; +long percentError; +long deltaFreq; + + if ((toneOutputPinNumber % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = toneOutputPinNumber + 1; + } + else + { + //* if its ODD + helperpin = toneOutputPinNumber - 1; + } + + //* dont set the mode of the OUTPUT pin, the tone command does that + + pinMode(helperpin, INPUT); + + previousState = digitalRead(helperpin); + startMilliSecs = millis(); + highCount = 0; + lowCount = 0; + measuredFreq = 0; + //* we are going to watch for one second + outputFreq = random(200, 2000); + + tone(toneOutputPinNumber, outputFreq); + while ((millis() - startMilliSecs) < 1000) + { + currentState = digitalRead(helperpin); + if (currentState == HIGH) + { + highCount++; + } + else + { + lowCount++; + } + //* check to see if it changed state + if ((currentState == HIGH) && (previousState == LOW)) + { + measuredFreq++; + } + + previousState = currentState; + } + noTone(toneOutputPinNumber); + + deltaFreq = abs(measuredFreq - outputFreq); + + percentError = 100 - abs(((outputFreq - deltaFreq) * 100) / outputFreq); + + sprintf(testNameString, "ToneTest.%02d (out freq= %4ld measured freq= %4ld err= %ld%%)", toneOutputPinNumber, outputFreq, measuredFreq, percentError); + if (percentError < 5) + { + passed = true; + } + else + { + passed = false; + } + + ATS_PrintTestStatus(testNameString, passed); +} + + +//************************************************************************ +//* this test to make sure the duration option works +void TestToneDuration(uint8_t toneOutputPinNumber) +{ +uint8_t helperpin; +unsigned long startMilliSecs; +unsigned long highCount, lowCount; +int previousState; +int currentState; +char testNameString[80]; +long outputFreq; +long measuredFreq; +boolean passed; +long percentError; +long deltaFreq; +long durationTime; + + if ((toneOutputPinNumber % 2) == 0) + { + //* if its EVEN, add 1 + helperpin = toneOutputPinNumber + 1; + } + else + { + //* if its ODD + helperpin = toneOutputPinNumber - 1; + } + + //* dont set the mode of the OUTPUT pin, the tone command does that + + pinMode(helperpin, INPUT); + + previousState = digitalRead(helperpin); + startMilliSecs = millis(); + highCount = 0; + lowCount = 0; + measuredFreq = 0; + durationTime = 0; + //* we are going to watch for one second + outputFreq = random(500, 2000); + + tone(toneOutputPinNumber, outputFreq, 1000); + while ((millis() - startMilliSecs) < 2000) + { + currentState = digitalRead(helperpin); + if (currentState == HIGH) + { + highCount++; + } + else + { + lowCount++; + } + //* count the freq + if ((currentState == HIGH) && (previousState == LOW)) + { + measuredFreq++; + } + + //* check to see if it changed state + if (currentState != previousState) + { + durationTime = millis() - startMilliSecs; + } + + previousState = currentState; + } + + deltaFreq = abs(measuredFreq - outputFreq); + + percentError = 100 - abs(((outputFreq - deltaFreq) * 100) / outputFreq); + + sprintf(testNameString, "ToneTesDurationt.%02d (durationTime =%4ld/1000 freq err= %ld%%)", toneOutputPinNumber, durationTime, percentError); + if ((durationTime > 990) && (durationTime < 1010) && (percentError < 5)) + { + passed = true; + } + else + { + passed = false; + } + noTone(toneOutputPinNumber); + + ATS_PrintTestStatus(testNameString, passed); +} + + + +//************************************************************************ +void setup() +{ +short ii; +uint8_t timerNumber; +int startMemoryUsage; + + startMemoryUsage = ATS_GetFreeMemory(); + + ATS_begin("Arduino", "ToneTest"); + + + //* we start at 2 because 0/1 are RXD/TXD + for (ii=2; ii Date: Tue, 26 Oct 2010 00:09:44 -0400 Subject: [PATCH 30/37] Temp build data removed. --- .../ATS_Constants/build/ATS_Constants.cpp | 91 ----- .../tests/ATS_Constants/build/libarduino.a | Bin 56676 -> 0 bytes .../tests/ATS_Constants/build/liblibrary.a | Bin 31834 -> 0 bytes testing/tests/ATS_Constants/build/libsketch.a | Bin 2956 -> 0 bytes .../tests/ATS_Skeleton/build/ATS_Skeleton.cpp | 67 ---- .../tests/ATS_Skeleton/build/ATS_Skeleton.eep | 1 - .../tests/ATS_Skeleton/build/ATS_Skeleton.elf | Bin 29372 -> 0 bytes .../tests/ATS_Skeleton/build/ATS_Skeleton.hex | 368 ------------------ testing/tests/ATS_Skeleton/build/libarduino.a | Bin 56676 -> 0 bytes testing/tests/ATS_Skeleton/build/liblibrary.a | Bin 31834 -> 0 bytes testing/tests/ATS_Skeleton/build/libsketch.a | Bin 2200 -> 0 bytes 11 files changed, 527 deletions(-) delete mode 100644 testing/tests/ATS_Constants/build/ATS_Constants.cpp delete mode 100644 testing/tests/ATS_Constants/build/libarduino.a delete mode 100644 testing/tests/ATS_Constants/build/liblibrary.a delete mode 100644 testing/tests/ATS_Constants/build/libsketch.a delete mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.cpp delete mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep delete mode 100755 testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf delete mode 100644 testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex delete mode 100644 testing/tests/ATS_Skeleton/build/libarduino.a delete mode 100644 testing/tests/ATS_Skeleton/build/liblibrary.a delete mode 100644 testing/tests/ATS_Skeleton/build/libsketch.a diff --git a/testing/tests/ATS_Constants/build/ATS_Constants.cpp b/testing/tests/ATS_Constants/build/ATS_Constants.cpp deleted file mode 100644 index 3ace54d36be..00000000000 --- a/testing/tests/ATS_Constants/build/ATS_Constants.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include -//************************************************************************ -//* Arduino Test of Arduino Constants -//* (C) 2010 by Rick Anderson -//* Open source as per standard Arduino code -//* -//************************************************************************ -//* Oct 16, 2010 Test of Arduino Constants -//************************************************************************ - -#include "WProgram.h" -#include "HardwareSerial.h" -#include - -//************************************************************************ -void setup() -{ - int startMemoryUsage; - - //Start memory usage must be site prior to ATS_begin - startMemoryUsage = ATS_GetFreeMemory(); - ATS_begin("Arduino", "Test of Arduino Constants"); - /* - * Test Run Start - */ - - - //test true constant - ATS_PrintTestStatus("1. Test of true constant", true == 1); - - //test false consts - ATS_PrintTestStatus( "2. Test of false constant", false == 0); - - //Test of HIGH == 1 - ATS_PrintTestStatus( "3. Test of HIGH == 1", HIGH == 1); - - //Test of LOW == 0 - ATS_PrintTestStatus( "4. Test of LOW == 0", LOW == 0); - - //Test of INPUT == 1 - ATS_PrintTestStatus( "5. Test of INPUT == 1", HIGH == 1); - - //Test of OUTPUT == 0 - ATS_PrintTestStatus( "6. Test of OUTPUT == 0", LOW == 0); - - //test decimal - ATS_PrintTestStatus( "7. Test of decimal constant", 101 == ((1 * pow(10,2)) + (0 * pow(10,1)) + 1)); - - //test binary - ATS_PrintTestStatus( "8. Test of binary constant", B101 == 5); - - //test octal - ATS_PrintTestStatus( "9. Test of octal constant", 0101 == 65); - - //test hexadecimal - ATS_PrintTestStatus( "7. Test of hexadecimal constant", (0x101 == 257)); - - /* - * Test Run End - */ - ATS_ReportMemoryUsage(startMemoryUsage); - ATS_end(); - -} - - -//************************************************************************ -void loop() -{ - - -} - - - - - -#include - -int main(void) -{ - init(); - - setup(); - - for (;;) - loop(); - - return 0; -} - diff --git a/testing/tests/ATS_Constants/build/libarduino.a b/testing/tests/ATS_Constants/build/libarduino.a deleted file mode 100644 index 615cb41a765790884f0de053e9a778624eeb2c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56676 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 diff --git a/testing/tests/ATS_Constants/build/liblibrary.a b/testing/tests/ATS_Constants/build/liblibrary.a deleted file mode 100644 index 0bf43faaf6a8e23390d8c8a625767538bf6db7fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31834 zcmeHwdw7)9wfCM(3?WqlQ$Yut0JE5j`F!0~yHJkff90qV?!- z6%;igfXd^i*5jexs?^7dRUXMX?Llm9wU@7t?bAx6)Kaw?`q6$I>yhvG+k3Bh_q>@1 z)$=^3e|#I(?6uZjd+oLF``zz;cSc+qOD<`=yr?Xk?J6oKPcENWHF|OpN*>rBtm_g*Ti!j4Dt{VC-O}{vP0lg-ZR;Kx$PYnrKd>6p^-gYDz;xGTzpv z$z(j%FeBNrTobF3iBx<+i^fyQSaaKQ8!47b#g;VAZ;Gvq&s$xyGTv--IqU@vI~i|n zy2&J#YH78}G{s|W@u@4?R5ZFWz9iL>j8;~u=yh`|Dr#!#=GD%b))Z@No1iVINi_Bf zsiL7Z31x&4Trp|Ng89)a9;@Z69zJ8r ztl4VWwJoVwQ%y42l5As8TWVU%3X~A^PY`3G#%@|TzC6R6(j04QSvIS=bw%o$M5=LS zys4EYd-@###H`F2lVw%uB~*9KoVrAFZgmK2S&>3&v~6O>46vh!qZR2AVIHE>6U!3F zSD(sk_`GYVELSw@tC;8(dsDM5cwKk#=7yDCRvTh%jk6QYagUQ|UfSYOb7IXamd2K( zRwUy|k2|gI>gL#TC(@PErbQRl%$q-}cCIHiW#PQ&>{(N%d7NprbLwWzu9+U4K4n3T z$6in~e?fHq)w34VMCVSK;{+_%4eaW+*fJ-rw$|8^c+J;V#F~&(T>^{a%M#7H#p!l{ z29?z95Glk^&kgK2X!Da6tZKO?k&I8PtYM4r=!$H*Vv<(4z;wm7wnR&FjqVzvprTT` zX)4jYtj5)KacZ^g=UMEE@u}5QS1er`Ptu&#*T9Xv@no$?_74&0VQ7 z|1uzZQP7L3G>Zc8>x-r&8&)KmTl7G^0`pX)rK|`O8ayvrW>tZB73Jmb@5CysCni-+ znrNi!i*Bo#JtGhZU~yqwK+RVkrPKkeAvPeWN(YZo7pl=};8vxk@2uJRhxdBA(`)X& zExj(i<}UnhI-Kr&L2bbAURAh#Q*pZUMfmrXO{r8p)!nKq-J#T`3j)X1bf-I&y5~dw zQrDEaYGAd|`-?m3+ktKPfEp;hraaI?fBo6&ST+1`cRBR@HE^i-{|x_S;NiO6)mu8! z>&l{6)RvsBde)Z}ZXe#cs4S#YT;rs;)|VpFd$@ad_g@35YfZ;pop+aQJP&E~Y$$8* z-c)@5a9U=p7<7TLV6C;}o+|>!(pGc2GH`6I;Nt^5>w&N99^O&7eP&q(=JrMZMOv>xe+lZ9Y2xs1zvWua-dN#bTx;7j!rMlsdrfl}A_5Y>1SbBxq zH@r`t!G~`x-dg;8@zy~lWt~@a)^lU*4~<) z*l}9m7)k(s{;^G!hT052|5&=hhQZH2rtYO&;k|(#)up;N*|4;w(^Xa$K4OkH)By>d zVCYTaQ`+dc*o16`kMt*53O*=nTbf)WJ=uh(ZLBnD9g_aC30VUl>0e@~P4rFprIsT; zvK>-;zQ}Sf4T5J6=+m zIO~kOXf+yhNwCFG7i-T*rO|ReO`d5%=2$m;W8uKH1GXtu4_fmW-re5a+TDLUwK7a~ zt+Wy_SjpoGvC(%nYy8tohFCAAYBA9n2Pc&6i_ zj(a+8>uBkScGPxU(NWe>++O^0ar^N0A=_1??WX0a*kbspr12XCOJUKeA`P)rOhp!B zeI7~1n_>}iBbg<-36pI~N9@8iqz-p7_Dgg-rJbuWv4Ura|r*8e^U^C;kBw(+UJ z$3s@-0l^7zpA}dnx*XcDOpoglGGtRMxymD3n)PFfo$^qg63qtKRf5M~9&1a*lV(kn zo2!>5xr5A-#tW1AyEn(DLldG`$+;m4<-Si~galrE({u?2sP6y3&$S07l2DtgS4m9l$C;G^D z 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 diff --git a/testing/tests/ATS_Constants/build/libsketch.a b/testing/tests/ATS_Constants/build/libsketch.a deleted file mode 100644 index adae4460d8cbbf3b669b0c4a7e43f1a1e56c70ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2956 zcmbVOU2GIp7`?-mf26R2KTyqppf#GMTgtYLfcyknNRbU~(KLqXbazVE?Cz{PQ>2X% zVq;=LP)eaZ&=BKWQ+V;geK4Uuq6rogW1v2hE~o>qXm2m^;F?lXZ0{yx6B28dSBuu{q^c?_PE8P}^ZeQBc}z zif9*sC&ZhW`2(aH+;pv2BUXz2YhDnQZxj?w&Slerq+pFLGZ|H>CO&MnhK)FJ3IU^)Qv$rYh-c- zJs+&5DaiHYih6kGbg$ni=XZ3#+J!TY4RO+2^vEJ#zhjGS)c% z)9{Sy)H(Z{^bG6eCI%-iOpHxDl6#>2%$#t1r90ns<))Gw9~{3hJ~qy*oAZ_AM}Ixx zR{ZceWlnM2HShTM6;m;))NXEG{f(lGZrPYzs?5pXsypIKagYCgt30eEM{iYbSK^~% zBOi^dzsC9_L+=mm8rn9*8r{yt%8kmhQSRLh?A^sl)?& zs?1}agf&pG^&VKe?AboaY~!pg5?S5WMWV;DM1p~Yd;bz;Bd>eDcNIec_f~rM>A&=w zA>y4|=8GF5gXDeO;_LVruu<14li-rR0KNi{x_4y)F*fPG>~lFUbxT}@*Gb*(i0(Zk z24&LEaYQ3fMdG&_EaD~#@&Q{4Ft-Lc25`8Xciz_^ zkiQjFEP?X|iQi;B+VJn&jYT;Ku10((W*1V6Ig;6h1L%V_Mb{JFSIO?5^=s%A5pG5pGBK~B=zZ3Dljrc!Ad?(^R zi1>59&+`<=@BK59k9=4&rIOIJ_7jI%G>s&!wMx?Fl7k1+uC)s#t!$ij`JhoY7oDuB zWz5om<~}HzMmKNhWsOfu=%cQ6B^&uoZ!zq{WyA2kA!mfv)y!y*aXME_XWFrbuB01D zmvcp%-`jRuxBIPhrcad2cd*1lf8Ofd38H7S9x>jwdg}$Aw@hh3SS1eZMICoKqnJJ8 z{f8n~%-PtBP288bw<#*jGXGL+1z+xS-bco9)y4CEoV*r@^FX8VouP)~cxE}4ydH>e zK!?V&OU)~=O#n6Ie0!v3A2>Cgum=EY$PWWja}=DKw_w`Pe)Lez_2B;y=0#d{C9p8u!?Fu0Ir{qsCD#T|%{7ILJ+adln`BPr}9?TLvWZ%IO zoc9*&_WukBLfZr$gZ?Be$B -//************************************************************************ -//* Arduino Test Example Skeleton -//* (C) 2010 by Rick Anderson -//* Open source as per standard Arduino code -//* -//************************************************************************ -//* Oct 16, 2010 Started on String Test -//************************************************************************ - -#include "WProgram.h" -#include "HardwareSerial.h" -#include - -//************************************************************************ -void setup() -{ - int startMemoryUsage; - - //startMemoryUsage must be set directly before ATS_begin - startMemoryUsage = ATS_GetFreeMemory(); - ATS_begin("Arduino", "Skeleton Test"); - /* - * Test Run Start - * Test one passes because result is set to true - * Test two fails becuase result is set to false - * You can test memory for any set of tests by using the ATS_ReportMemoryUsage test - * There is also a way to print current memeory for debugging - */ - ATS_PrintTestStatus("1. Test of true test status", true); - - ATS_PrintTestStatus("2. Test of false test status, this will fail.", false); - - ATS_ReportMemoryUsage(startMemoryUsage); - /* - * Test Run End - */ - - ATS_end(); - -} - - -//************************************************************************ -void loop() -{ - - -} - - - - -#include - -int main(void) -{ - init(); - - setup(); - - for (;;) - loop(); - - return 0; -} - diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep deleted file mode 100644 index 1996e8fde5d..00000000000 --- a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.eep +++ /dev/null @@ -1 +0,0 @@ -:00000001FF diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.elf deleted file mode 100755 index 53c53ccdba6c4387eb1a14975152db7ffb59e5a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29372 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 G3i-dos;L+N diff --git a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex b/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex deleted file mode 100644 index c0ee83fc6b0..00000000000 --- a/testing/tests/ATS_Skeleton/build/ATS_Skeleton.hex +++ /dev/null @@ -1,368 +0,0 @@ -:1000000097C00000BBC00000B9C00000B7C000002E -:10001000B5C00000B3C00000B1C00000AFC0000018 -:10002000ADC00000ABC00000A9C00000A7C0000028 -:10003000A5C00000A3C00000A1C000009FC0000038 -:10004000C6C200009BC000009AC3000097C0000019 -:1000500095C0000093C0000091C000008FC0000058 -:100060008DC000008BC000000E02110214021702A6 -:100070001A021D02200224024D414E5546414354AE -:1000800055524552004350552D4E414D4500474372 -:10009000432D56657273696F6E004156522D4C693F -:1000A00062432D56657200436F6D70696C65642DF7 -:1000B0006461746500546573742D53756974652D9E -:1000C0004E616D6500467265652D6D656D6F727967 -:1000D000002E2E2E20006F6B004641494C00203D23 -:1000E0002000696E666F2E002D2D2D2D2D2D2D2DAE -:1000F0002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D30 -:100100002D2D004469676974616C52656164577292 -:100110006974655F0050574D6F75747075745F003A -:10012000416E616C6F67496E7075745F0000760593 -:1001300011241FBECFEFD8E0DEBFCDBF12E0A0E09C -:10014000B1E0E2E2F5E102C005900D92A83BB107F3 -:10015000D9F713E0A8EBB2E001C01D92A436B107B5 -:10016000E1F711E0C0E3D1E003C02297FE01ACD675 -:10017000CE32D107D1F748D00C948F0A41CFA0E3FB -:10018000B0E0E4ECF0E075C642D08C0180E091E094 -:1001900068E071E07CD186E191E061E063D082E3C8 -:1001A00091E060E05FD033D09801281B390BCE017D -:1001B00001962115310529F460E671E011D761E05F -:1001C0001CC000D000D000D0EDB7FEB73196ADB75F -:1001D000BEB712969C938E9311978DE691E0938310 -:1001E0008283358324830CD760E08DB79EB7069653 -:1001F0000FB6F8949EBF0FBE8DBFCE01019632D0D0 -:1002000073D0E096E4E051C67FD2B9DFFFCFA2E021 -:10021000B0E0ECE0F1E02FC6209160033091610383 -:10022000CE0101962115310519F48456934002C080 -:10023000821B930B9A83898389819A812296E2E0BB -:1002400036C6CF93DF93EC0105C08DE493E040E028 -:1002500050E062D5FE01649121966623B1F7DF91EB -:10026000CF910895FF920F931F93CF93DF938C014B -:10027000F62E8DE493E0B801A4D4C801B8D6EC0101 -:1002800007C08DE493E060E240E050E045D5219660 -:10029000CC33D105B4F381ED90E0D3DFFF2021F022 -:1002A00086ED90E0CEDF0CC089ED90E0CADF809152 -:1002B000BC029091BD0201969093BD028093BC0256 -:1002C0008DE493E03AD58091BE029091BF020196F1 -:1002D0009093BF028093BE02CDB7DEB7E5E0E4C5E0 -:1002E000B0DF8DE493E029C5AF92BF92CF92DF9249 -:1002F000EF92FF920F931F9388EE90E0F1DF8DE471 -:1003000093E06CE472E05DD46091BE027091BF0234 -:100310008DE493E04AE050E0EDD48DE493E061E5B4 -:1003200072E04FD49CD17B018C0199D15B016C01AF -:10033000C801B70128EE33E040E050E04FD58DE42E -:1003400093E0BA01A9012AE030E0A6D48DE493E05D -:100350006EE240E050E0E0D4C601B50128EE33E0A3 -:1003600040E050E03BD5AB01BC018DE493E02AE0D6 -:1003700030E092D48DE493E063E740E050E0CCD4E9 -:100380008DE493E0DAD48DE493E0D7D48091BC027D -:100390009091BD02892B29F48DE493E06CE572E025 -:1003A00012C08DE493E06FE572E00BD46091BC0263 -:1003B0007091BD028DE493E04AE050E09BD48DE45F -:1003C00093E061E772E0FDD38DE493E0B6D48DE471 -:1003D00093E064E078D31F910F91FF90EF90DF904E -:1003E000CF90BF90AF900895A0E4B0E0E9EFF1E0C6 -:1003F0003AC5182F092F6B015A017E010894E11CA0 -:10040000F11CC70162EE70E0D9D5E12FF02FE83082 -:10041000F10510F5EC5CFF4FC70154C5B601D5D509 -:100420001BC068E770E00EC065E870E00BC06EE8C6 -:1004300070E008C06AE970E005C067EA70E002C0D9 -:1004400065EB70E0B0D508C065EC70E0FBCFC8018B -:1004500063E772E0BAD503C08E010F5F1F4FC8017A -:10046000C6D54497A0F3C8016EED70E09CD5A114E9 -:10047000B10419F0C801B501A8D58DE493E0BE011F -:100480006F5F7F4F69D4C05CDF4FEAE008C5A0E32F -:10049000B0E0ECE4F2E0E9C47C016B011092BD0233 -:1004A0001092BC021092BF021092BE020DE413E043 -:1004B000C80140E855E260E070E0CDD168EE73E03D -:1004C00080E090E000D1CBD06093B8027093B90285 -:1004D0008093BA029093BB02C8012FD4C8012DD4D7 -:1004E000C8012BD481E090E060E070E0A7017CDFE0 -:1004F00082E090E060E070E045E752E075DF83E085 -:1005000090E060E070E040E852E06EDF84E090E070 -:1005100060E070E046E852E067DF85E090E060E090 -:1005200070E04CE852E060DF86E090E060E070E070 -:10053000A6015ADF6CDE00D000D000D0EDB7FEB7C8 -:1005400031968E010F5F1F4FADB7BEB712961C9349 -:100550000E93119728E932E03383228395838483B5 -:100560004FD58DB79EB706960FB6F8949EBF0FBEB7 -:100570008DBF87E090E060E070E0A80135DF80E0AB -:1005800004D0F3D3E096E8E08CC4982F8E3008F0C6 -:100590009E5097708091A5028295880F880F807C6D -:1005A000892B80937C0080917A00806480937A000C -:1005B00080917A0086FDFCCF2091780040917900EF -:1005C000942F80E030E0282B392BC90108951F9229 -:1005D0000F920FB60F9211242F933F938F939F93F7 -:1005E000AF93BF938091C4029091C502A091C602BF -:1005F000B091C7023091C8020196A11DB11D232FF1 -:100600002D5F2D3720F02D570196A11DB11D209390 -:10061000C8028093C4029093C502A093C602B0930F -:10062000C7028091C0029091C102A091C202B09114 -:10063000C3020196A11DB11D8093C0029093C10217 -:10064000A093C202B093C302BF91AF919F918F91CB -:100650003F912F910F900FBE0F901F9018958FB75D -:10066000F8942091C4023091C5024091C602509185 -:10067000C7028FBFB901CA0108959FB7F8942091AE -:10068000C0023091C1024091C2025091C30286B5AE -:10069000A89B06C08F3F21F02F5F3F4F4F4F5F4F0A -:1006A0009FBF542F432F322F2227280F311D411D6A -:1006B000511D82E0220F331F441F551F8A95D1F729 -:1006C000B901CA010895EF92FF920F931F93CF9340 -:1006D000DF937B018C01D1DFEB010DC0CEDF6C1B02 -:1006E0007D0B685E7340D0F30894E108F1080109BE -:1006F0001109C851DC4FE114F1040105110571F72E -:10070000CDB7DEB7E6E0CFC3789484B5826084BD10 -:1007100084B5816084BD85B5826085BD85B5816005 -:1007200085BDEEE6F0E0808181608083E1E8F0E065 -:100730001082808182608083808181608083E0E894 -:10074000F0E0808181608083E1EBF0E08081846073 -:100750008083E0EBF0E0808181608083EAE7F0E075 -:1007600080818460808380818260808380818160D9 -:1007700080838081806880831092C10008951F92D9 -:100780000F920FB60F9211242F933F934F935F93C5 -:100790006F937F938F939F93AF93BF93EF93FF9349 -:1007A0004091C600E0914903F0914A03CF010196C0 -:1007B00060E870E000D39C0180914B0390914C0362 -:1007C0002817390739F0E753FD4F408330934A0328 -:1007D00020934903FF91EF91BF91AF919F918F912A -:1007E0007F916F915F914F913F912F910F900FBE2D -:1007F0000F901F9018958F92AF92CF92DF92EF9249 -:10080000FF920F931F93DF93CF93CDB7DEB7FC0119 -:100810008AEA92E091838083738362835583448361 -:100820003783268311870087F386E286D586C486C0 -:10083000A68687868D85808B8E85818B8F85828B22 -:10084000CF91DF911F910F91FF90EF90DF90CF90AC -:10085000AF908F900895A0E0B0E0E0E3F4E0FEC236 -:10086000EC013A014B01413482E458078FE06807FC -:1008700080E078070CF077C060E874E88EE190E0E3 -:10088000A4019301CDD22150304040405040CA01D4 -:10089000B90122E030E040E050E0C2D259016A01E3 -:1008A000A6019501209530954095509594E0220F32 -:1008B000331F441F551F9A95D1F760E074E284EF0F -:1008C00090E0AED2CA01B9012FEF30E040E050E035 -:1008D00053D2A4019301A4D2C90181509F4F18168D -:1008E00019061CF4522E5A9403C055245394521ADC -:1008F00060E079E08DE390E0A401930191D2215072 -:10090000304040405040CA01B90122E030E040E0B0 -:1009100050E086D2209530954095509583E0220F87 -:10092000331F441F551F8A95D1F760E074E284EFAE -:1009300090E076D2CA01B9012FEF30E040E050E0FC -:100940001BD2A40193016CD279018A01C9018150A3 -:100950009F4F181619061CF4822F815002C081E0A7 -:10096000821B8515F0F4E885F98581E090E00A881E -:1009700002C0880F991F0A94E2F7808360E079E053 -:100980008DE390E0A40193014BD2215030404040D0 -:100990005040CA01B90122E030E040E050E040D2CE -:1009A00004C0E885F98510829501EC81FD813083D2 -:1009B000EE81FF812083EA85FB85208141E050E0C4 -:1009C000CA010E8402C0880F991F0A94E2F7282BEF -:1009D0002083EA85FB852081CA010F8402C0880F2D -:1009E000991F0A94E2F7282B2083EA85FB858081F2 -:1009F000088802C0440F551F0A94E2F7842B8083B5 -:100A0000CDB7DEB7EFE046C2DC011296ED91FC9166 -:100A10001397E058FF4F8191919180589F4F20810B -:100A20003181821B930B60E870E0C5C1DC01129636 -:100A3000ED91FC911397EE57FF4F208131819291F8 -:100A40008291E058F0408217930719F42FEF3FEF9F -:100A500005C0E20FF31F8081282F30E0C9010895FF -:100A6000CF93DF93DC011296ED91FC911397EF0188 -:100A7000CE57DF4F48815981E058FF4F80819181E7 -:100A8000E058F0408417950719F42FEF3FEF0BC0A3 -:100A9000E40FF51F2081CA01019660E870E08BD158 -:100AA0009983888330E0C901DF91CF910895DC01FB -:100AB0001296ED91FC911397EE57FF4F8081918133 -:100AC000929382930895FC01A085B18521898C9130 -:100AD00090E0022E02C0959587950A94E2F780FF78 -:100AE000F6CF0484F585E02D608308958F92AF9250 -:100AF000CF92DF92EF92FF920F931F9300D00F924D -:100B0000EDB7FEB7319687E0ADB7BEB711968C93BF -:100B100085E0818381E082838DE493E069EC72E07B -:100B200045EC50E024EC30E000EC10E0B1ECEB2EB2 -:100B3000F12CA6ECCA2ED12CF4E0AF2EE3E08E2EE1 -:100B40005ADE0F900F900F901F910F91FF90EF9032 -:100B5000DF90CF90AF908F9008950F931F93CF9316 -:100B6000DF938C01EB0109C02196D801ED91FC9136 -:100B70000190F081E02DC801099568816623A1F7F5 -:100B8000DF91CF911F910F910895EF92FF920F93F4 -:100B90001F93CF93DF938C017B01EA010CC0D70137 -:100BA0006D917D01D801ED91FC910190F081E02DD6 -:100BB000C80109952197209791F7CDB7DEB7E6E0F8 -:100BC00072C1DC01ED91FC910280F381E02D099569 -:100BD0000895A0E2B0E0EEEEF5E03DC11C016A012F -:100BE0007B01411551056105710529F460E340E081 -:100BF00050E092D04EC0882499245401422E5524AE -:100C00006624772401E010E00C0F1D1F080D191D4C -:100C1000C701B601A3019201E1D0F80160830894F5 -:100C2000811C911CA11CB11CC701B601A30192013A -:100C3000D5D0C901DA016C017D01C114D104E104F0 -:100C4000F10401F781E0E82EF12CEC0EFD1EE80C1A -:100C5000F91C3E010894611C711CD501C401019767 -:100C6000A109B1096C01C818D90810C0F601EE0D30 -:100C7000FF1D60816A3010F4605D01C0695CC101D4 -:100C800040E050E049D00894E108F1086E147F0478 -:100C900069F7A096E2E1FBC0EF92FF920F931F93DA -:100CA000CF93DF93EC017A018B012115310541F4DB -:100CB000E881F9810190F081E02D642F099516C03B -:100CC0002A30310591F477FF0CC06DE240E050E02E -:100CD00023D010950095F094E094E11CF11C011DC7 -:100CE000111DCE01B801A7012AE073DFCDB7DEB731 -:100CF000E6E0D9C0EF92FF920F931F937B019A0118 -:100D00000027F7FC0095102FB801A701C5DF1F9140 -:100D10000F91FF90EF900895EF92FF920F931F9322 -:100D20009A01E62EFF2400E010E0B801A701B4DF2D -:100D30001F910F91FF90EF9008950F931F938C01D7 -:100D40006DE040E050E0E8DFC8016AE040E050E0DC -:100D5000E3DF1F910F9108950F931F938C0131DFF3 -:100D6000C801EBDF1F910F910895009721F0BC019E -:100D700080E090E00FC10895629FD001739FF00161 -:100D8000829FE00DF11D649FE00DF11D929FF00D1B -:100D9000839FF00D749FF00D659FF00D9927729F52 -:100DA000B00DE11DF91F639FB00DE11DF91FBD01DD -:100DB000CF011124089597FB092E07260AD077FD4D -:100DC00004D086D006D000201AF4709561957F4F2C -:100DD0000895F6F7909581959F4F0895A1E21A2EF8 -:100DE000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FCF -:100DF000A217B307E407F50720F0A21BB30BE40B1F -:100E0000F50B661F771F881F991F1A9469F7609565 -:100E10007095809590959B01AC01BD01CF0108951F -:100E200097FB092E05260ED057FD04D0D7DF0AD038 -:100E3000001C38F450954095309521953F4F4F4F09 -:100E40005F4F0895F6F790958095709561957F4F67 -:100E50008F4F9F4F08952F923F924F925F926F92C4 -:100E60007F928F929F92AF92BF92CF92DF92EF923A -:100E7000FF920F931F93CF93DF93CDB7DEB7CA1BBB -:100E8000DB0B0FB6F894DEBF0FBECDBF09942A88E6 -:100E9000398848885F846E847D848C849B84AA848E -:100EA000B984C884DF80EE80FD800C811B81AA811B -:100EB000B981CE0FD11D0FB6F894DEBF0FBECDBFE6 -:100EC000ED010895EE0FFF1F0590F491E02D0994B8 -:100ED000AA1BBB1B51E107C0AA1FBB1FA617B70760 -:100EE00010F0A61BB70B881F991F5A95A9F780957C -:100EF0009095BC01CD010895A0E0B0E0E1E8F7E0F5 -:100F0000B2CFEC01A880B980CA80DB80A114B10403 -:100F1000C104D10441F484E2A82E89EDB82E8BE5FA -:100F2000C82E87E0D82EC601B5012DE133EF41E090 -:100F300050E076DF27EA31E440E050E01DDF7B013E -:100F40008C01C601B5012DE133EF41E050E068DFCF -:100F5000CA01B9012CEE34EF4FEF5FEF0DDF6E0DDC -:100F60007F1D801F911F97FF04C06150704080401B -:100F70009048688379838A839B839B01AC015F7768 -:100F8000B901CA01CDB7DEB7EAE089CFB5CF81EAB2 -:100F900092E0B2CF6093A1027093A2028093A30269 -:100FA0009093A4020895FB01DC010D900020E9F765 -:100FB000119705900D920020E1F70895FB01DC01E7 -:100FC00005900D920020E1F70895FB01DC010D90E2 -:100FD0000020E9F7119701900D920020E1F70895A4 -:100FE000FB01DC0101900D920020E1F70895FC0166 -:100FF00001900020E9F7809590958E0F9F1F08952E -:10100000AEE0B0E0E5E0F8E034CF0D891E8986E07F -:101010008C831A8309838FEF9FE79E838D839E01C4 -:10102000275E3F4FCE0101966F89788DA90109D0C7 -:101030002F813885020F131FF80110822E96E4E0ED -:1010400034CFABE0B0E0E6E2F8E005CF3C012B01A5 -:101050005A01FC0117821682838181FD03C06FEF64 -:101060007FEFB9C19AE0892E1E010894211C311C22 -:10107000F3012381F20123FD859123FF81912F014B -:10108000882309F4A5C1853239F423FD859123FF16 -:1010900081912F01853221F490E0B301B6D1E8CFE0 -:1010A000982FFF24EE249924FFE1FF15D0F09B3206 -:1010B00069F09C3228F4903259F0933291F40EC0CA -:1010C0009D3249F0903369F441E024C052E0F52AA2 -:1010D00084E0F82A28C098E0F92A25C0E0E1FE2A39 -:1010E00022C0F7FC29C0892F80538A3070F4F6FEA5 -:1010F00005C0989C902C1124980E15C0E89CE02CFB -:101100001124E80EF0E2FF2A0EC09E3229F4F6FC0C -:101110005FC140E4F42A07C09C3619F450E8F52A70 -:1011200002C0983649F4F20123FD959123FF919175 -:101130002F01992309F0B8CF892F8554833018F0F7 -:101140008052833038F444E050E0A40EB51E5FE3D3 -:1011500059830FC0933631F0933779F0933509F006 -:1011600052C01FC0F5018081898342E050E0A40E87 -:10117000B51E610101E010E011C0F501C080D18011 -:10118000F6FC03C06FEF7FEF02C0692D70E042E014 -:1011900050E0A40EB51EC6012DD18C015FE7F522EB -:1011A00013C0F501C080D180F6FC03C06FEF7FEF64 -:1011B00002C0692D70E042E050E0A40EB51EC601E9 -:1011C0000ED18C0150E8F52AF3FE06C018C080E26B -:1011D00090E0B3011AD1EA948E2D90E00817190718 -:1011E000B0F30DC0F601F7FC8591F7FE81916F0118 -:1011F00090E0B3010AD1E110EA94015010400115CA -:10120000110581F7E2C0943611F0993661F5F7FEC9 -:1012100008C0F501208131814281538184E090E052 -:101220000AC0F501808191819C01442737FD4095DA -:10123000542F82E090E0A80EB91E9FE6F92257FFD6 -:1012400009C050954095309521953F4F4F4F5F4FC6 -:10125000E0E8FE2ACA01B901A1012AE030E001D18B -:10126000D82ED2183FC0953729F41F2D1F7E2AE0B3 -:1012700030E01DC01F2D197F9F3661F0903720F49C -:10128000983509F0A5C00FC0903739F0983709F0AC -:101290009FC004C028E030E00AC0106114FD146053 -:1012A00020E130E004C014FD166020E132E017FFB9 -:1012B00008C0F501608171818281938144E050E032 -:1012C00008C0F50180819181BC0180E090E042E09E -:1012D00050E0A40EB51EA101C4D0D82ED2188FE7BD -:1012E000F82EF122F6FE0BC05EEFF522D91438F489 -:1012F000F4FE07C0F2FC05C08FEEF82202C01D2DDF -:1013000001C0192DF4FE0DC0FE01ED0DF11D80810F -:10131000803319F499EEF92208C01F5FF2FE05C070 -:1013200003C08F2D867809F01F5F0F2DF3FC13C0CB -:10133000F0FE0EC01E1510F09D2C0AC09D2C9E0CB8 -:10134000911A1E2D05C080E290E0B3015ED01F5FB0 -:101350001E15C8F304C01E1510F4E11A01C0EE24D6 -:1013600004FF0EC080E390E0B3014FD002FF1BC02A -:1013700001FD03C088E790E00EC088E590E00BC057 -:10138000802F867881F001FF02C08BE201C080E2ED -:10139000F7FC8DE290E0B30138D005C080E390E027 -:1013A000B30133D09A94D914C8F3DA94F101ED0D56 -:1013B000F11D808190E0B30128D0DD20B1F705C098 -:1013C00080E290E0B30121D0EA94EE20C9F750CE3C -:1013D000F30166817781CB012B96E2E158CDFC01C8 -:1013E0000590615070400110D8F7809590958E0F50 -:1013F0009F1F0895FC016150704001900110D8F7C3 -:10140000809590958E0F9F1F08950F931F93CF93F4 -:10141000DF938C01EB018B8181FF1BC082FF0DC02C -:101420002E813F818C819D812817390764F4E881E2 -:10143000F9810193F983E88306C0E885F985802F57 -:101440000995892B31F48E819F8101969F838E832C -:1014500002C00FEF1FEFC801DF91CF911F910F91D5 -:101460000895FA01AA27283051F1203181F1E8943A -:101470006F936E7F6E5F7F4F8F4F9F4FAF4FB1E087 -:101480003ED0B4E03CD0670F781F891F9A1FA11D82 -:10149000680F791F8A1F911DA11D6A0F711D811D83 -:1014A000911DA11D20D009F468943F912AE0269F48 -:1014B00011243019305D3193DEF6CF010895462FA7 -:1014C0004770405D4193B3E00FD0C9F7F6CF462F88 -:1014D0004F70405D4A3318F0495D31FD40524193F1 -:1014E00002D0A9F7EACFB4E0A695979587957795AE -:1014F0006795BA95C9F700976105710508959B0135 -:10150000AC010A2E06945795479537952795BA95BD -:10151000C9F7620F731F841F951FA01D0895F894CB -:02152000FFCFFB -:1015220041726475696E6F00536B656C65746F6EA2 -:10153200205465737400312E2054657374206F66D5 -:101542002074727565207465737420737461747588 -:101552007300322E2054657374206F662066616CAE -:1015620073652074657374207374617475732C20B1 -:10157200746869732077696C6C206661696C2E00EF -:101582004D656D6F7279205573616765004D656DAC -:101592006F727920557361676520286C6F737420B0 -:1015A200256420627974657329002050574D2045C7 -:1015B20052524F520020202850574D3D2530326460 -:1015C2002025642525204C4F5720256425252048B9 -:1015D2004947482900454550524F4D5F627974652D -:1015E2005F7277202028616464723D203078253054 -:1015F20034582900454550524F4D5F776F72645FF2 -:101602007277202028616464723D2030782530345E -:10161200582900454550524F4D5F64776F72645FA1 -:1016220072772028616464723D2030782530345806 -:101632002900253032640020284C6F773D25346420 -:1016420020486967683D2534642068656C7065725E -:101652002070696E3D25642900202868656C7065DC -:10166200722070696E3D25303264290052616E200D -:101672000020746573747320696E20004F4B00461E -:1016820041494C454420286661696C757265733D19 -:10169200002900200041546D6567613332385000E3 -:1016A200342E332E3400312E362E37004F63742001 -:1016B200323620323031300025642062797465730D -:1016C200000100000001000000006305AD05C50532 -:0816D20004053005570516055B -:00000001FF diff --git a/testing/tests/ATS_Skeleton/build/libarduino.a b/testing/tests/ATS_Skeleton/build/libarduino.a deleted file mode 100644 index bcc51ef76616c326d1d165e33324b384d5d9dd13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56676 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 Date: Thu, 28 Oct 2010 21:10:09 -0400 Subject: [PATCH 31/37] Very rough and broken first version of running a sketch specifid with SKETCH= from a Makefile. --- testing/tests/ATS_Constants/Makefile | 8 +++- testing/tests/ATS_Constants/tmp.txt | 4 -- testing/tests/ATS_Skeleton/Makefile | 8 +++- testing/tests/Makefile.master | 62 +++++++++++++++++++++++----- testing/tests/Makefile.runner | 25 +++++++++++ testing/tests/README | 21 ++++++++++ 6 files changed, 109 insertions(+), 19 deletions(-) delete mode 100644 testing/tests/ATS_Constants/tmp.txt create mode 100755 testing/tests/Makefile.runner create mode 100644 testing/tests/README diff --git a/testing/tests/ATS_Constants/Makefile b/testing/tests/ATS_Constants/Makefile index b49354de231..5352834fe90 100755 --- a/testing/tests/ATS_Constants/Makefile +++ b/testing/tests/ATS_Constants/Makefile @@ -4,11 +4,15 @@ BOARD ?= atmega328 PORT ?= /dev/ttyUSB0 -ARD_HOME ?= ../../../build/linux/work +#ARD_HOME ?= ../../../build/linux/work +ARD_HOME ?= /home/ricklon/projects/Arduino/build/linux/work ARD_BIN ?= /usr/bin AVRDUDE_BIN ?= /usr/bin AVRDUDE_CONF ?=/etc/avrdude.conf -LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility +#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility +#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility +OUTPUT_DIR ?= OUT #SKETCH ?= #BUILD_DIR diff --git a/testing/tests/ATS_Constants/tmp.txt b/testing/tests/ATS_Constants/tmp.txt deleted file mode 100644 index 7114c678aa8..00000000000 --- a/testing/tests/ATS_Constants/tmp.txt +++ /dev/null @@ -1,4 +0,0 @@ --I../libraries/UnivGraphicsLib -I/Applications/Arduino.app/Contents/Resources/Java/libraries/EEPROM -I/Applications/Arduino.app/Contents/Resources/Java/libraries/Wire -I/Applications/Arduino.app/Contents/Resources/Java/libraries/Wire/utility -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/WInterrupts.c -o WInterrupts.o - - - -I../../../build/linux/work/libraries/EEPROM -I../../../build/linux/work/libraries/ArduinoTestSuite -I../../../build/linux/work/libraries/Wire -I../../../build/linux/work/libraries/Wire/utility -I../../../build/linux/work/hardware/arduino/cores/arduino ../../../build/linux/work/hardware/arduino/cores/arduino/pins_arduino.c -o pins_arduino.o diff --git a/testing/tests/ATS_Skeleton/Makefile b/testing/tests/ATS_Skeleton/Makefile index b49354de231..5352834fe90 100755 --- a/testing/tests/ATS_Skeleton/Makefile +++ b/testing/tests/ATS_Skeleton/Makefile @@ -4,11 +4,15 @@ BOARD ?= atmega328 PORT ?= /dev/ttyUSB0 -ARD_HOME ?= ../../../build/linux/work +#ARD_HOME ?= ../../../build/linux/work +ARD_HOME ?= /home/ricklon/projects/Arduino/build/linux/work ARD_BIN ?= /usr/bin AVRDUDE_BIN ?= /usr/bin AVRDUDE_CONF ?=/etc/avrdude.conf -LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility +#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility +#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility +OUTPUT_DIR ?= OUT #SKETCH ?= #BUILD_DIR diff --git a/testing/tests/Makefile.master b/testing/tests/Makefile.master index d15c8ae2a50..855f60ee755 100755 --- a/testing/tests/Makefile.master +++ b/testing/tests/Makefile.master @@ -95,7 +95,7 @@ UPLOAD_SPEED := \ PROGRAMMER := \ $(shell sed -n 's/$(BOARD)\.upload\.protocol=\(.*\)/\1/p' < $(ARD_BOARDS)) -BUILD_DIR ?= build +BUILD_DIR = $(OUTPUT_DIR)/build # Build tools. @@ -162,9 +162,9 @@ ifneq "$(strip $(LIB_C_SRC) $(LIB_CXX_SRC))" "" endif # Sketch. -SKT_PDE_SRC = $(wildcard *.pde) -SKT_C_SRC = $(wildcard *.c) -SKT_CXX_SRC = $(wildcard *.cpp) +SKT_PDE_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.pde) +SKT_C_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.c) +SKT_CXX_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.cpp) ifneq "$(strip $(SKT_PDE_SRC) $(SKT_C_SRC) $(SKT_CXX_SRC))" "" SKT_C_OBJ = $(patsubst %.c,%.o,$(SKT_C_SRC)) SKT_CXX_OBJ = $(patsubst %.cpp,%.o,$(SKT_CXX_SRC)) $(IMAGE).o @@ -175,20 +175,22 @@ ifneq "$(strip $(SKT_PDE_SRC) $(SKT_C_SRC) $(SKT_CXX_SRC))" "" endif # Other derived macros. +DIR_DEPTH ?= ../../ IMAGE = $(BUILD_DIR)/$(SKETCH) -INC_FLAGS = \ - $(addprefix -I,$(INC_DIRS)) $(addprefix -I,$(LIB_DIRS)) -I$(ARD_SRC_DIR) +INC_LIBDIR = $(addprefix -I,$(LIB_DIRS)) +INC_ARD_SRC = -I$(ARD_SRC_DIR) +INC_FLAGS = $(addprefix -I$(DIR_DEPTH),$(INC_DIRS)) VPATH = $(LIB_DIRS) # Definitions. define run-cc - $(CC) -c $(C_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o + $(CC) -c $(C_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $(INC_ARD_SRC) $(INC_LIBDIR) $< -o $*.o @ $(AR) rc $@ $*.o @ $(RM) $*.o endef define run-cxx - $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o + $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $(INC_ARD_SRC) $(INC_LIBDIR) $< -o $*.o @ $(AR) rc $@ $*.o @ $(RM) $*.o endef @@ -199,7 +201,7 @@ endef all : $(BUILD_DIR) $(IMAGE).hex clean : - $(RM) $(BUILD_DIR)/* + $(RM) $(OUTPUT_DIR)/* $(BUILD_DIR) : $(MKDIR) $@ @@ -208,7 +210,7 @@ $(SKT_AR)($(IMAGE).o) : $(SKT_PDE_SRC) echo '#include ' > $(IMAGE).cpp cat $^ $(ARD_MAIN) >> $(IMAGE).cpp cd $(BUILD_DIR) && $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) \ - -I.. $(subst -I../,-I../../,$(INC_FLAGS)) $(SKETCH).cpp \ + -I.. -I../.. $(subst -I../,-I../../,$(INC_FLAGS)) $(INC_ARD_SRC) $(INC_LIBDIR) $(SKETCH).cpp \ -o $(SKETCH).o @ $(AR) rc $@ $*.o @ $(RM) $*.o @@ -225,7 +227,7 @@ $(SKT_AR)($(IMAGE).o) : $(SKT_PDE_SRC) (%.o) : %.cpp $(run-cxx) -$(IMAGE).hex : $(ARD_AR_OBJ) $(LIB_AR_OBJ) $(SKT_AR_OBJ) +$(IMAGE).hex : $(ARD_AR_OBJ) $(LIB_AR_OBJ) $(SKT_AR_OBJ) $(SKT_PDE_OBJ) $(CXX) $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) -L$(BUILD_DIR) \ $(SKT_LD_FLAG) $(LIB_LD_FLAG) $(ARD_LD_FLAG) -o $(IMAGE).elf $(OBJCOPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load \ @@ -245,3 +247,41 @@ monitor : -e '$(MON_CMD) -$(MON_SPEED) $(PORT)' & upload_monitor : upload monitor + +env: + @echo ARD_AR: $(ARD_AR) + @echo ARD_AR_OBJ: "$(ARD_AR_OBJ)" + @echo ARD_C_OBJ: $(ARD_C_OBJ) + @echo ARD_C_SRC: $(ARD_C_SRC) + @echo ARD_CXX_OBJ: $(ARD_CXX_OBJ) + @echo ARD_CXX_SRC: $(ARD_CXX_SRC) + @echo ARD_FLAGS: $(ARD_FLAGS) + @echo ARD_HOME: $(ARD_HOME) + @echo ARD_LD_FLAG: $(ARD_LD_FLAG) + @echo ARD_LIB: $(ARD_LIB) + @echo ARD_SRC_HOME $(ARD_SRC_HOME) + @echo C_FLAGS: $(C_FLAGS) + @echo CXX_FLAGS: $(CXX_FLAGS) + @echo IMAGE $(IMAGE) + @echo INC_ARD_SRC: $(INC_ARD_SRC) + @echo INC_FLAGS: $(INC_FLAGS) + @echo INC_LIBDIR: $(INC_LIBDIR) + @echo LIB_C_SRC $(LIB_C_SRC) + @echo LIB_CXX_SRC $(LIB_CXX_SRC) + @echo LIB_SRC $(LIB_SRC) + @echo OPT_FLAGS: $(OPT_FLAGS) + @echo SKETCH: $(SKETCH) + @echo SKT_C_SRC $(SKT_C_SRC) + @echo SKT_CXX_SRC $(SKT_CXX_SRC) + @echo SKT_DIR $(SKT_DIR) + @echo SKT_PDE_SRC $(SKT_PDE_SRC) + @echo VPATH $(VPATH) + +.PHONY: printvars +printvars: + $(foreach V,$(sort $(.VARIABLES)), + $(if $(filter-out environment% default automatic, + $(origin $V)),$(warning $V=$($V) ($(value $V))))) + + + diff --git a/testing/tests/Makefile.runner b/testing/tests/Makefile.runner new file mode 100755 index 00000000000..51278077437 --- /dev/null +++ b/testing/tests/Makefile.runner @@ -0,0 +1,25 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +ARD_SRC_HOME ?= /home/ricklon/projects/Arduino +ARD_HOME ?= $(ARD_SRC_HOME)/build/linux/work +SKT_DIR ?= $(ARD_SRC_HOME)/testing/tests +ARD_BIN ?= /usr/bin +AVRDUDE_BIN ?= /usr/bin +AVRDUDE_CONF ?=/etc/avrdude.conf +#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility +#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility +OUTPUT_DIR ?= OUT + +#SKETCH ?= +#BUILD_DIR + +PROGRAMMER ?= stk500v1 +#PROGRAMMER ?= stk500v2 + +include Makefile.master +#include ../Makefile.master diff --git a/testing/tests/README b/testing/tests/README new file mode 100644 index 00000000000..612b875f630 --- /dev/null +++ b/testing/tests/README @@ -0,0 +1,21 @@ +#Changes being implemented for running sketches +Use boards.txt as the list of boards and properties. +Must be able to build the custom libraries. +Must be able to build the core libraries if needed. +If possible autodetect the board type. +Be able to specify a board type on command line. +Be able to query the ports and identify all the boards attached. +No need to go to any Java code for compiling. +Be able to specify upload target specify board type, port and all +appropriate targets executed, and upload occurs properly. + +Examples to start with: +Dump all vars: +make -f Makefile.runner env "SKETCH=ATS_Skeleton" + +Make a sketch: +make -f Makefile.runner all "SKETCH=ATS_Skeleton" + +Clean: +make -f Makefile.runner clean + From d54fd22795f5b8312d79878448702915d51df8b1 Mon Sep 17 00:00:00 2001 From: Ricklon Date: Fri, 29 Oct 2010 16:39:00 -0400 Subject: [PATCH 32/37] Can compile Sketches by setting there name without the pde extension? Works on Linux. Mac Windows, need checking next. --- testing/tests/ATS_Constants/Makefile | 24 ------------------------ testing/tests/ATS_Skeleton/Makefile | 24 ------------------------ testing/tests/Makefile.master | 21 ++++++++++----------- testing/tests/Makefile.runner | 28 +++++++++++++++------------- 4 files changed, 25 insertions(+), 72 deletions(-) delete mode 100755 testing/tests/ATS_Constants/Makefile delete mode 100755 testing/tests/ATS_Skeleton/Makefile diff --git a/testing/tests/ATS_Constants/Makefile b/testing/tests/ATS_Constants/Makefile deleted file mode 100755 index 5352834fe90..00000000000 --- a/testing/tests/ATS_Constants/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -#Test builder and runner make file -# each test needs make compiole, make upload, make getResult -#this also need to be done for the build for each environment - -BOARD ?= atmega328 -PORT ?= /dev/ttyUSB0 -#ARD_HOME ?= ../../../build/linux/work -ARD_HOME ?= /home/ricklon/projects/Arduino/build/linux/work -ARD_BIN ?= /usr/bin -AVRDUDE_BIN ?= /usr/bin -AVRDUDE_CONF ?=/etc/avrdude.conf -#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility -#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility -LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility -OUTPUT_DIR ?= OUT - -#SKETCH ?= -#BUILD_DIR - -PROGRAMMER ?= stk500v1 -#PROGRAMMER ?= stk500v2 - -#include Makefile.master -include ../Makefile.master diff --git a/testing/tests/ATS_Skeleton/Makefile b/testing/tests/ATS_Skeleton/Makefile deleted file mode 100755 index 5352834fe90..00000000000 --- a/testing/tests/ATS_Skeleton/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -#Test builder and runner make file -# each test needs make compiole, make upload, make getResult -#this also need to be done for the build for each environment - -BOARD ?= atmega328 -PORT ?= /dev/ttyUSB0 -#ARD_HOME ?= ../../../build/linux/work -ARD_HOME ?= /home/ricklon/projects/Arduino/build/linux/work -ARD_BIN ?= /usr/bin -AVRDUDE_BIN ?= /usr/bin -AVRDUDE_CONF ?=/etc/avrdude.conf -#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility -#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility -LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility -OUTPUT_DIR ?= OUT - -#SKETCH ?= -#BUILD_DIR - -PROGRAMMER ?= stk500v1 -#PROGRAMMER ?= stk500v2 - -#include Makefile.master -include ../Makefile.master diff --git a/testing/tests/Makefile.master b/testing/tests/Makefile.master index 855f60ee755..387290e3d7f 100755 --- a/testing/tests/Makefile.master +++ b/testing/tests/Makefile.master @@ -90,9 +90,9 @@ MCU := \ $(shell sed -n 's/$(BOARD)\.build\.mcu=\(.*\)/\1/p' < $(ARD_BOARDS)) F_CPU := \ $(shell sed -n 's/$(BOARD)\.build\.f_cpu=\(.*\)/\1/p' < $(ARD_BOARDS)) -UPLOAD_SPEED := \ +UPLOAD_SPEED ?= \ $(shell sed -n 's/$(BOARD)\.upload\.speed=\(.*\)/\1/p' < $(ARD_BOARDS)) -PROGRAMMER := \ +PROGRAMMER ?= \ $(shell sed -n 's/$(BOARD)\.upload\.protocol=\(.*\)/\1/p' < $(ARD_BOARDS)) BUILD_DIR = $(OUTPUT_DIR)/build @@ -162,9 +162,9 @@ ifneq "$(strip $(LIB_C_SRC) $(LIB_CXX_SRC))" "" endif # Sketch. -SKT_PDE_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.pde) -SKT_C_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.c) -SKT_CXX_SRC = $(SKT_DIR)/$(SKETCH)/$(wildcard *.cpp) +SKT_PDE_SRC = $(wildcard $(SKT_DIR)/$(SKETCH)/*.pde) +SKT_C_SRC = $(wildcard $(SKT_DIR)/$(SKETCH)/*.c) +SKT_CXX_SRC = $(wildcard $(SKT_DIR)/$(SKETCH)/*.cpp) ifneq "$(strip $(SKT_PDE_SRC) $(SKT_C_SRC) $(SKT_CXX_SRC))" "" SKT_C_OBJ = $(patsubst %.c,%.o,$(SKT_C_SRC)) SKT_CXX_OBJ = $(patsubst %.cpp,%.o,$(SKT_CXX_SRC)) $(IMAGE).o @@ -175,22 +175,21 @@ ifneq "$(strip $(SKT_PDE_SRC) $(SKT_C_SRC) $(SKT_CXX_SRC))" "" endif # Other derived macros. -DIR_DEPTH ?= ../../ IMAGE = $(BUILD_DIR)/$(SKETCH) INC_LIBDIR = $(addprefix -I,$(LIB_DIRS)) INC_ARD_SRC = -I$(ARD_SRC_DIR) -INC_FLAGS = $(addprefix -I$(DIR_DEPTH),$(INC_DIRS)) +INC_FLAGS = $(INC_ARD_SRC) $(INC_LIBDIR) VPATH = $(LIB_DIRS) # Definitions. define run-cc - $(CC) -c $(C_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $(INC_ARD_SRC) $(INC_LIBDIR) $< -o $*.o + $(CC) -c $(C_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o @ $(AR) rc $@ $*.o @ $(RM) $*.o endef define run-cxx - $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $(INC_ARD_SRC) $(INC_LIBDIR) $< -o $*.o + $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) $(INC_FLAGS) $< -o $*.o @ $(AR) rc $@ $*.o @ $(RM) $*.o endef @@ -201,7 +200,7 @@ endef all : $(BUILD_DIR) $(IMAGE).hex clean : - $(RM) $(OUTPUT_DIR)/* + $(RM) $(OUTPUT_DIR) $(BUILD_DIR) : $(MKDIR) $@ @@ -210,7 +209,7 @@ $(SKT_AR)($(IMAGE).o) : $(SKT_PDE_SRC) echo '#include ' > $(IMAGE).cpp cat $^ $(ARD_MAIN) >> $(IMAGE).cpp cd $(BUILD_DIR) && $(CXX) -c $(CXX_FLAGS) $(OPT_FLAGS) $(ARD_FLAGS) \ - -I.. -I../.. $(subst -I../,-I../../,$(INC_FLAGS)) $(INC_ARD_SRC) $(INC_LIBDIR) $(SKETCH).cpp \ + -I.. -I../.. $(subst -I../,-I../../,$(INC_FLAGS)) $(SKETCH).cpp \ -o $(SKETCH).o @ $(AR) rc $@ $*.o @ $(RM) $*.o diff --git a/testing/tests/Makefile.runner b/testing/tests/Makefile.runner index 51278077437..ac98b32bc04 100755 --- a/testing/tests/Makefile.runner +++ b/testing/tests/Makefile.runner @@ -2,24 +2,26 @@ # each test needs make compiole, make upload, make getResult #this also need to be done for the build for each environment -BOARD ?= atmega328 -PORT ?= /dev/ttyUSB0 -ARD_SRC_HOME ?= /home/ricklon/projects/Arduino + +#Board info +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +UPLOAD_SPEED ?= 57600 + +#Arduino info + +ARD_SRC_HOME ?= /home/ricklon/projects/Arduino ARD_HOME ?= $(ARD_SRC_HOME)/build/linux/work SKT_DIR ?= $(ARD_SRC_HOME)/testing/tests -ARD_BIN ?= /usr/bin + +#Toolchain info AVRDUDE_BIN ?= /usr/bin +ARD_BIN ?= /usr/bin AVRDUDE_CONF ?=/etc/avrdude.conf -#LIB_DIRS = $(ARD_HOME)/libraries/EEPROM $(ARD_HOME)/libraries/ArduinoTestSuite $(ARD_HOME)/libraries/Wire $(ARD_HOME)/libraries/Wire/utility -#LIB_DIRS = $(filter-out $(ARD_HOME)/libraries/Ethernet , $(wildcard $(ARD_HOME)/libraries/*)) $(ARD_HOME)/libraries/Wire/utility -LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(ARD_HOME)/libraries/Wire/utility $(ARD_HOME)/libraries/Ethernet/utility -OUTPUT_DIR ?= OUT +PROGRAMMER = stk500v1 +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(wildcard $(ARD_HOME)/libraries/*/utility) -#SKETCH ?= -#BUILD_DIR +OUTPUT_DIR ?= OUT -PROGRAMMER ?= stk500v1 -#PROGRAMMER ?= stk500v2 include Makefile.master -#include ../Makefile.master From 0dd5fefd5fb4e703cbae0e7a07d5d5e556cf9a31 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 31 Oct 2010 22:33:52 -0400 Subject: [PATCH 33/37] Makefile customize for Windows. Not complete. --- testing/tests/Makefile.master | 6 ++++++ testing/tests/Makefile.windows | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 testing/tests/Makefile.windows diff --git a/testing/tests/Makefile.master b/testing/tests/Makefile.master index 387290e3d7f..69a614622b7 100755 --- a/testing/tests/Makefile.master +++ b/testing/tests/Makefile.master @@ -99,6 +99,8 @@ BUILD_DIR = $(OUTPUT_DIR)/build # Build tools. +# if Windows append .exe to all + CC = $(ARD_BIN)/avr-gcc CXX = $(ARD_BIN)/avr-g++ OBJCOPY = $(ARD_BIN)/avr-objcopy @@ -114,6 +116,10 @@ MKDIR = mkdir -p RM = rm -rf MV = mv -f +ifeq ($(TARGET_OS), windows) + $(addusuffix .exe,$(CC) $(CXX) $(OBJCOPY) $(OBJDUMP) $(AR) $(SIZE) $(NM) $(AVRDUDE) $(RESET)) +endif + # Compiler flags. ARD_FLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARD_REV) #C_FLAGS = -std=gnu99 -Wall -Wextra -Wundef -Wstrict-prototypes -Werror -Wno-old-style-declaration -Wno-unused-parameter -fdiagnostics-show-option diff --git a/testing/tests/Makefile.windows b/testing/tests/Makefile.windows new file mode 100644 index 00000000000..e0a38cf6f86 --- /dev/null +++ b/testing/tests/Makefile.windows @@ -0,0 +1,28 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + + +#Board info +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +UPLOAD_SPEED ?= 57600 + +#Arduino info +#/home/ricklon/projects/Arduino/testing/tests +TARGET_OS ?= windows +ARD_SRC_HOME ?= /home/ricklon/projects/Arduino +ARD_HOME ?= $(ARD_SRC_HOME)/build/$(TARGET_OS)/work +SKT_DIR ?= $(ARD_SRC_HOME)/testing/tests + +#Toolchain info +AVRDUDE_BIN ?= $(ARD_HOME)/hardware/tools/avr/bin +ARD_BIN ?= $(ARD_HOME)/hardware/tools/avr/bin +AVRDUDE_CONF ?= $(ARD_HOME)/hardware/tools/avr/etc/avrdude.conf +PROGRAMMER = stk500v1 +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(wildcard $(ARD_HOME)/libraries/*/utility) + +OUTPUT_DIR ?= OUT + + +include Makefile.master From 10f018ebcd521a48e1b2384e8c755859547ed091 Mon Sep 17 00:00:00 2001 From: ricklon Date: Mon, 1 Nov 2010 00:17:39 -0400 Subject: [PATCH 34/37] Makefile for Mac OS X. --- testing/tests/Makefile.macosx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 testing/tests/Makefile.macosx diff --git a/testing/tests/Makefile.macosx b/testing/tests/Makefile.macosx new file mode 100755 index 00000000000..e29c01199bb --- /dev/null +++ b/testing/tests/Makefile.macosx @@ -0,0 +1,28 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + + +#Board info +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +UPLOAD_SPEED ?= 57600 + +#Arduino info +#/home/ricklon/projects/Arduino/testing/tests +TARGET_OS ?= macosx +ARD_SRC_HOME ?= /Users/rianders/projects/Arduino +ARD_HOME ?= $(ARD_SRC_HOME)/build/$(TARGET_OS)/work/Arduino.app/Contents/Resources/Java +SKT_DIR ?= $(ARD_SRC_HOME)/testing/tests + +#Toolchain info +AVRDUDE_BIN ?= $(ARD_HOME)/hardware/tools/avr/bin +ARD_BIN ?= $(ARD_HOME)/hardware/tools/avr/bin +AVRDUDE_CONF ?= $(ARD_HOME)/hardware/tools/avr/etc/avrdude.conf +PROGRAMMER = stk500v1 +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(wildcard $(ARD_HOME)/libraries/*/utility) + +OUTPUT_DIR ?= OUT + + +include Makefile.master From 7edde34a7dc4aa03a030ddca5203fe6f8617ee39 Mon Sep 17 00:00:00 2001 From: ricklon Date: Mon, 1 Nov 2010 00:21:15 -0400 Subject: [PATCH 35/37] Added Mark's Delay test --- libraries/ArduinoTestSuite/examples/ATS_Delay/ATS_Delay.pde | 1 + testing/tests/ATS_Delay/ATS_Delay.pde | 1 + 2 files changed, 2 insertions(+) create mode 100644 libraries/ArduinoTestSuite/examples/ATS_Delay/ATS_Delay.pde create mode 100644 testing/tests/ATS_Delay/ATS_Delay.pde diff --git a/libraries/ArduinoTestSuite/examples/ATS_Delay/ATS_Delay.pde b/libraries/ArduinoTestSuite/examples/ATS_Delay/ATS_Delay.pde new file mode 100644 index 00000000000..8ac9fd2028d --- /dev/null +++ b/libraries/ArduinoTestSuite/examples/ATS_Delay/ATS_Delay.pde @@ -0,0 +1 @@ +//************************************************************************ //* Arduino Test Suite //* ATS_ToneTest //* //* Copyright (c) 2010 Mark Sproul All right reserved. //* //* This library is free software; you can redistribute it and/or //* modify it under the terms of the GNU Lesser General Public //* License as published by the Free Software Foundation; either //* version 2.1 of the License, or (at your option) any later version. //* //* This library is distributed in the hope that it will be useful, //* but WITHOUT ANY WARRANTY; without even the implied warranty of //* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //* Lesser General Public License for more details. //* //* You should have received a copy of the GNU Lesser General Public //* License along with this library; if not, write to the Free Software //* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //************************************************************************ //* Aug 31, 2010 Started on TestArduino //* Oct 28, 2010 Started on Delay //************************************************************************ #include "WProgram.h" #include "HardwareSerial.h" #include //************************************************************************ void setup() { short ii; short testNum; int startMemoryUsage; unsigned long startMillis; unsigned long endMillis; unsigned long deltaMillis; unsigned long errMillis; boolean passed; char testNameString[80]; startMemoryUsage = ATS_GetFreeMemory(); ATS_begin("Arduino", "DelayTest"); testNum = 1; //* we start at 2 because 0/1 are RXD/TXD for (ii=0; ii<1000; ii+= 15) { startMillis = millis(); delay(ii); endMillis = millis(); deltaMillis = endMillis - startMillis; if (deltaMillis >= ii) { errMillis = deltaMillis - ii; } else { errMillis = ii - deltaMillis; } if (errMillis <= 1) { passed = true; } else { passed = false; } sprintf(testNameString, "DelayTest.%02d (delay= %4d actual delay=%ld err=%ld)", testNum, ii, deltaMillis, errMillis); ATS_PrintTestStatus(testNameString, passed); testNum++; } ATS_ReportMemoryUsage(startMemoryUsage); ATS_end(); } //************************************************************************ void loop() { } \ No newline at end of file diff --git a/testing/tests/ATS_Delay/ATS_Delay.pde b/testing/tests/ATS_Delay/ATS_Delay.pde new file mode 100644 index 00000000000..8ac9fd2028d --- /dev/null +++ b/testing/tests/ATS_Delay/ATS_Delay.pde @@ -0,0 +1 @@ +//************************************************************************ //* Arduino Test Suite //* ATS_ToneTest //* //* Copyright (c) 2010 Mark Sproul All right reserved. //* //* This library is free software; you can redistribute it and/or //* modify it under the terms of the GNU Lesser General Public //* License as published by the Free Software Foundation; either //* version 2.1 of the License, or (at your option) any later version. //* //* This library is distributed in the hope that it will be useful, //* but WITHOUT ANY WARRANTY; without even the implied warranty of //* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //* Lesser General Public License for more details. //* //* You should have received a copy of the GNU Lesser General Public //* License along with this library; if not, write to the Free Software //* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //************************************************************************ //* Aug 31, 2010 Started on TestArduino //* Oct 28, 2010 Started on Delay //************************************************************************ #include "WProgram.h" #include "HardwareSerial.h" #include //************************************************************************ void setup() { short ii; short testNum; int startMemoryUsage; unsigned long startMillis; unsigned long endMillis; unsigned long deltaMillis; unsigned long errMillis; boolean passed; char testNameString[80]; startMemoryUsage = ATS_GetFreeMemory(); ATS_begin("Arduino", "DelayTest"); testNum = 1; //* we start at 2 because 0/1 are RXD/TXD for (ii=0; ii<1000; ii+= 15) { startMillis = millis(); delay(ii); endMillis = millis(); deltaMillis = endMillis - startMillis; if (deltaMillis >= ii) { errMillis = deltaMillis - ii; } else { errMillis = ii - deltaMillis; } if (errMillis <= 1) { passed = true; } else { passed = false; } sprintf(testNameString, "DelayTest.%02d (delay= %4d actual delay=%ld err=%ld)", testNum, ii, deltaMillis, errMillis); ATS_PrintTestStatus(testNameString, passed); testNum++; } ATS_ReportMemoryUsage(startMemoryUsage); ATS_end(); } //************************************************************************ void loop() { } \ No newline at end of file From a1b51b127794319cf5e2f8d6f7705414e0eb57cf Mon Sep 17 00:00:00 2001 From: Ricklon Date: Mon, 1 Nov 2010 00:26:01 -0400 Subject: [PATCH 36/37] Makefile example for linux --- testing/tests/Makefile.linux | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 testing/tests/Makefile.linux diff --git a/testing/tests/Makefile.linux b/testing/tests/Makefile.linux new file mode 100755 index 00000000000..ac98b32bc04 --- /dev/null +++ b/testing/tests/Makefile.linux @@ -0,0 +1,27 @@ +#Test builder and runner make file +# each test needs make compiole, make upload, make getResult +#this also need to be done for the build for each environment + + +#Board info +BOARD ?= atmega328 +PORT ?= /dev/ttyUSB0 +UPLOAD_SPEED ?= 57600 + +#Arduino info + +ARD_SRC_HOME ?= /home/ricklon/projects/Arduino +ARD_HOME ?= $(ARD_SRC_HOME)/build/linux/work +SKT_DIR ?= $(ARD_SRC_HOME)/testing/tests + +#Toolchain info +AVRDUDE_BIN ?= /usr/bin +ARD_BIN ?= /usr/bin +AVRDUDE_CONF ?=/etc/avrdude.conf +PROGRAMMER = stk500v1 +LIB_DIRS = $(wildcard $(ARD_HOME)/libraries/*) $(wildcard $(ARD_HOME)/libraries/*/utility) + +OUTPUT_DIR ?= OUT + + +include Makefile.master From 8b9433cafeb2aa27c3082d3b0a3d387dd8b18594 Mon Sep 17 00:00:00 2001 From: ricklon Date: Wed, 3 Nov 2010 18:31:12 -0400 Subject: [PATCH 37/37] Updated PORT for Mac OS X example. --- testing/tests/Makefile.macosx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/tests/Makefile.macosx b/testing/tests/Makefile.macosx index e29c01199bb..614c39fdaad 100755 --- a/testing/tests/Makefile.macosx +++ b/testing/tests/Makefile.macosx @@ -5,7 +5,7 @@ #Board info BOARD ?= atmega328 -PORT ?= /dev/ttyUSB0 +PORT ?= /dev/tty.usbserial-A7004qgI UPLOAD_SPEED ?= 57600 #Arduino info