joey shelton / LED_Demo

Dependencies:   MAX44000 PWM_Tone_Library nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers tests.py Source File

tests.py

00001 """
00002 mbed SDK
00003 Copyright (c) 2011-2013 ARM Limited
00004 
00005 Licensed under the Apache License, Version 2.0 (the "License");
00006 you may not use this file except in compliance with the License.
00007 You may obtain a copy of the License at
00008 
00009     http://www.apache.org/licenses/LICENSE-2.0
00010 
00011 Unless required by applicable law or agreed to in writing, software
00012 distributed under the License is distributed on an "AS IS" BASIS,
00013 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014 See the License for the specific language governing permissions and
00015 limitations under the License.
00016 """
00017 from tools.paths import *
00018 from tools.data.support import *
00019 from argparse import ArgumentTypeError
00020 from utils import columnate
00021 
00022 try:
00023     import tools.private_settings as ps
00024 except:
00025     ps = object()
00026 
00027 TEST_CMSIS_LIB = join(TEST_DIR, "cmsis", "lib")
00028 TEST_MBED_LIB = join(TEST_DIR, "mbed", "env")
00029 
00030 PERIPHERALS = join(TEST_DIR, "peripherals")
00031 BENCHMARKS_DIR = join(TEST_DIR, "benchmarks")
00032 
00033 SD = join(TEST_DIR, "sd")
00034 TMP102 = join(PERIPHERALS, 'TMP102')
00035 AT30TSE75X = join(PERIPHERALS, 'AT30TSE75X')
00036 
00037 """
00038 Wiring:
00039   * Ground:
00040     * LPC1*: p1
00041     * KL25Z: GND
00042 
00043   * Vout
00044     * LPC1*: p40
00045     * KL25Z: P3V3
00046 
00047   * TMP102 (I2C):
00048       * LPC1*: (SDA=p28 , SCL=p27)
00049       * KL25Z: (SDA=PTC9, SCL=PTC8)
00050       * MAXWSNENV: (SDA=TP6, SCL=TP5)
00051 
00052   * digital_loop (Digital(In|Out|InOut), InterruptIn):
00053       * Arduino headers: (D0 <-> D7)
00054       * LPC1549: (D2 <-> D7)
00055       * LPC1*: (p5   <-> p25 )
00056       * KL25Z: (PTA5<-> PTC6)
00057       * NUCLEO_F103RB: (PC_6 <-> PB_8)
00058       * MAXWSNENV: (TP3 <-> TP4)
00059       * MAX32600MBED: (P1_0 <-> P4_7)
00060       * VK_RZ_A1H: (P3_2 <-> P5_6)
00061 
00062   * port_loop (Port(In|Out|InOut)):
00063       * Arduino headers: (D0 <-> D7), (D1 <-> D6)
00064       * LPC1*: (p5   <-> p25), (p6   <-> p26)
00065       * KL25Z: (PTA5 <-> PTC6), (PTA4 <-> PTC5)
00066       * NUCLEO_F103RB: (PC_6 <-> PB_8), (PC_5 <-> PB_9)
00067       * MAXWSNENV: (TP1 <-> TP3), (TP2 <-> TP4)
00068       * MAX32600MBED: (P1_0 <-> P4_7), (P1_1 <-> P4_6)
00069       * VK_RZ_A1H: (P3_2 <-> P5_6), (P3_7 <-> P5_1)
00070 
00071   * analog_loop (AnalogIn, AnalogOut):
00072       * Arduino headers: (A0 <-> A5)
00073       * LPC1549: (A0 <-> D12)
00074       * LPC1*: (p17   <-> p18 )
00075       * KL25Z: (PTE30 <-> PTC2)
00076 
00077   * analog_pot (AnalogIn):
00078       * Arduino headers: (A0, A1)
00079       * VK_RZ_A1H: (AN0, AN1)
00080 
00081   * SD (SPI):
00082       * LPC1*: (mosi=p11 , miso=p12 , sclk=p13 , cs=p14 )
00083       * KL25Z: (mosi=PTD2, miso=PTD3, sclk=PTD1, cs=PTD0)
00084 
00085   * MMA7660 (I2C):
00086       * LPC1*: (SDA=p28 , SCL=p27)
00087 
00088   * i2c_loop:
00089       * LPC1768: (p28 <-> p9), (p27 <-> p10)
00090 
00091   * i2c_eeprom:
00092       * LPC1*: (SDA=p28 , SCL=p27)
00093       * KL25Z: (SDA=PTE0, SCL=PTE1)
00094       * VK_RZ_A1H:(SDA=P1_1, SCL=P1_0)
00095 
00096   * can_transceiver:
00097      * LPC1768: (RX=p9,   TX=p10)
00098      * LPC1549: (RX=D9,   TX=D8)
00099      * LPC4088: (RX=p9,   TX=p10)
00100      * VK_RZ_A1H:(RX=P5_9, TX=P5_10)
00101      * NUCLEO_F091RC: (RX=PA_11, TX=PA_12)
00102      * NUCLEO_F072RB: (RX=PA_11, TX=PA_12)
00103      * NUCLEO_F042K6: (RX=PA_11, TX=PA_12)
00104      * NUCLEO_F334R8: (RX=PA_11, TX=PA_12)
00105      * NUCLEO_F303RE: (RX=PA_11, TX=PA_12)
00106      * NUCLEO_F303K8: (RX=PA_11, TX=PA_12)
00107      * NUCLEO_F302R8: (RX=PA_11, TX=PA_12)
00108      * NUCLEO_F446RE: (RX=PA_11, TX=PA_12)
00109      * NUCLEO_F446ZE: (RX=PA_11, TX=PA_12)
00110      * DISCO_F469NI:  (RX=PB_8, TX=PB_9)
00111      * DISCO_F4269ZI: (RX=PA_11, TX=PA_12)
00112      * NUCLEO_F103RB: (RX=PA_11, TX=PA_12)
00113      * NUCLEO_F746ZG: (RX=PA_11, TX=PA_12)
00114      * DISCO_F746NG:  (RX=PB_8, TX=PB_9)
00115      * DISCO_L476VG:  (RX=PA_11, TX=PA_12)
00116      * NUCLEO_L476RG:  (RX=PA_11, TX=PA_12)
00117      * NUCLEO_L432KC:  (RX=PA_11, TX=PA_12)
00118 
00119 """
00120 TESTS = [
00121     # Automated MBED tests
00122     {
00123         "id": "MBED_A1", "description": "Basic",
00124         "source_dir": join(TEST_DIR, "mbed", "basic"),
00125         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00126         "automated": True,
00127     },
00128     {
00129         "id": "MBED_A2", "description": "Semihost file system",
00130         "source_dir": join(TEST_DIR, "mbed", "file"),
00131         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00132         "automated": True,
00133         "mcu": ["LPC1768", "LPC2368", "LPC11U24"]
00134     },
00135     {
00136         "id": "MBED_A3", "description": "C++ STL",
00137         "source_dir": join(TEST_DIR, "mbed", "stl"),
00138         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00139         "automated": False,
00140     },
00141     {
00142         "id": "MBED_A4", "description": "I2C TMP102",
00143         "source_dir": join(TEST_DIR, "mbed", "i2c_TMP102"),
00144         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, TMP102],
00145         "automated": True,
00146         "peripherals": ["TMP102"]
00147     },
00148     {
00149         "id": "MBED_AT30TSE75X", "description": "I2C Temperature Sensor / EEPROM",
00150         "source_dir": join(TEST_DIR, "mbed", "i2c_at30tse75x"),
00151         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, AT30TSE75X],
00152         "automated": False,
00153         "peripherals": ["AT30TSE75X"]
00154     },
00155     {
00156         "id": "MBED_A5", "description": "DigitalIn DigitalOut",
00157         "source_dir": join(TEST_DIR, "mbed", "digitalin_digitalout"),
00158         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00159         "automated": True,
00160         "peripherals": ["digital_loop"]
00161     },
00162     {
00163         "id": "MBED_A6", "description": "DigitalInOut",
00164         "source_dir": join(TEST_DIR, "mbed", "digitalinout"),
00165         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00166         "automated": True,
00167         "peripherals": ["digital_loop"]
00168     },
00169     {
00170         "id": "MBED_A7", "description": "InterruptIn",
00171         "source_dir": join(TEST_DIR, "mbed", "interruptin"),
00172         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00173         "duration": 15,
00174         "automated": True,
00175         "peripherals": ["digital_loop"]
00176     },
00177     {
00178         "id": "MBED_A8", "description": "Analog",
00179         "source_dir": join(TEST_DIR, "mbed", "analog"),
00180         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00181         "automated": True,
00182         "peripherals": ["analog_loop"],
00183         "mcu": ["LPC1768", "LPC2368", "LPC2460", "KL25Z", "K64F", "K66F", "K22F", "LPC4088", "LPC1549",
00184                 "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_F302R8", "NUCLEO_F303K8", "NUCLEO_F303RE", "NUCLEO_F207ZG",
00185                 "NUCLEO_F334R8", "NUCLEO_F303ZE", "NUCLEO_L053R8", "NUCLEO_L073RZ", "NUCLEO_L152RE",
00186                 "NUCLEO_F410RB", "NUCLEO_F411RE", "NUCLEO_F446RE", "NUCLEO_F446ZE",
00187                 "DISCO_F407VG", "DISCO_F746NG", "NUCLEO_F746ZG",
00188                 "ARCH_MAX", "MAX32600MBED", "MOTE_L152RC", "B96B_F446VE"]
00189     },
00190     {
00191         "id": "MBED_A9", "description": "Serial Echo at 115200",
00192         "source_dir": join(TEST_DIR, "mbed", "echo"),
00193         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00194         "automated": True,
00195         #"host_test": "echo"
00196     },
00197     {
00198         "id": "MBED_A10", "description": "PortOut PortIn",
00199         "source_dir": join(TEST_DIR, "mbed", "portout_portin"),
00200         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00201         "peripherals": ["port_loop"],
00202         "supported": DEFAULT_SUPPORT,
00203         "automated": True,
00204     },
00205     {
00206         "id": "MBED_A11", "description": "PortInOut",
00207         "source_dir": join(TEST_DIR, "mbed", "portinout"),
00208         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00209         "peripherals": ["port_loop"],
00210         "supported": DEFAULT_SUPPORT,
00211         "automated": True,
00212     },
00213     {
00214         "id": "MBED_A12", "description": "SD File System",
00215         "source_dir": join(TEST_DIR, "mbed", "sd"),
00216         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
00217         "automated": True,
00218         "duration": 15,
00219         "peripherals": ["SD"]
00220     },
00221     {
00222         "id": "MBED_A13", "description": "I2C MMA7660 accelerometer",
00223         "source_dir": join(TEST_DIR, "mbed", "i2c_MMA7660"),
00224         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'MMA7660')],
00225         "automated": True,
00226         "peripherals": ["MMA7660"]
00227     },
00228     {
00229         "id": "MBED_A14", "description": "I2C Master",
00230         "source_dir": join(TEST_DIR, "mbed", "i2c_master"),
00231         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00232     },
00233     {
00234         "id": "MBED_A15", "description": "I2C Slave",
00235         "source_dir": join(TEST_DIR, "mbed", "i2c_slave"),
00236         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00237     },
00238     {
00239         "id": "MBED_A16", "description": "SPI Master",
00240         "source_dir": join(TEST_DIR, "mbed", "spi_master"),
00241         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00242     },
00243     {
00244         "id": "MBED_A17", "description": "SPI Slave",
00245         "source_dir": join(TEST_DIR, "mbed", "spi_slave"),
00246         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00247     },
00248     {
00249         "id": "MBED_A18", "description": "Interrupt vector relocation",
00250         "source_dir": join(TEST_DIR, "mbed", "vtor_reloc"),
00251         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00252         "mcu": ["LPC1768"],
00253         "automated": True,
00254     },
00255     {
00256         "id": "MBED_A19", "description": "I2C EEPROM read/write test",
00257         "source_dir": join(TEST_DIR, "mbed", "i2c_eeprom"),
00258         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00259         "peripherals": ["24LC256"],
00260         "automated": True,
00261         "duration": 15,
00262     },
00263     {
00264         "id": "MBED_A20", "description": "I2C master/slave test",
00265         "source_dir": join(TEST_DIR, "mbed", "i2c_master_slave"),
00266         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB,],
00267         "mcu": ["LPC1768", "RZ_A1H"],
00268         "peripherals": ["i2c_loop"]
00269     },
00270     {
00271         "id": "MBED_A21", "description": "Call function before main (mbed_main)",
00272         "source_dir": join(TEST_DIR, "mbed", "call_before_main"),
00273         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00274         "automated": True,
00275     },
00276     {
00277         "id": "MBED_A22", "description": "SPIFI for LPC4088 (test 1)",
00278         "source_dir": join(TEST_DIR, "mbed", "spifi1"),
00279         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00280         "automated": True,
00281         "duration": 30,
00282         "mcu": ["LPC4088","LPC4088_DM"]
00283     },
00284     {
00285         "id": "MBED_A23", "description": "SPIFI for LPC4088 (test 2)",
00286         "source_dir": join(TEST_DIR, "mbed", "spifi2"),
00287         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00288         "automated": True,
00289         "duration": 30,
00290         "mcu": ["LPC4088","LPC4088_DM"]
00291     },
00292     {
00293         "id": "MBED_A24", "description": "Serial echo with RTS/CTS flow control",
00294         "source_dir": join(TEST_DIR, "mbed", "echo_flow_control"),
00295         "dependencies": [MBED_LIBRARIES],
00296         "automated": "True",
00297         "host_test": "echo_flow_control",
00298         "mcu": ["LPC1768"],
00299         "peripherals": ["extra_serial"]
00300     },
00301     {
00302         "id": "MBED_A25", "description": "I2C EEPROM line read/write test",
00303         "source_dir": join(TEST_DIR, "mbed", "i2c_eeprom_line"),
00304         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00305         "peripherals": ["24LC256"],
00306         "automated": True,
00307         "duration": 10,
00308     },
00309     {
00310         "id": "MBED_A26", "description": "AnalogIn potentiometer test",
00311         "source_dir": join(TEST_DIR, "mbed", "analog_pot"),
00312         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00313         "peripherals": ["analog_pot"],
00314         "automated": True,
00315         "duration": 10,
00316     },
00317     {
00318         "id": "MBED_A27", "description": "CAN loopback test",
00319         "source_dir": join(TEST_DIR, "mbed", "can_loopback"),
00320         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00321         "automated": True,
00322         "duration": 20,
00323         "peripherals": ["can_transceiver"],
00324         "mcu": ["LPC1549", "LPC1768","B96B_F446VE", "VK_RZ_A1H",
00325                 "NUCLEO_F091RC", "NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F207ZG",
00326         "NUCLEO_F303RE", "NUCLEO_F303K8", "NUCLEO_F302R8", "NUCLEO_F446RE","NUCLEO_F446ZE",
00327         "DISCO_F469NI", "DISCO_F429ZI", "NUCLEO_F103RB", "NUCLEO_F746ZG",
00328         "DISCO_F746NG", "DISCO_L476VG", "NUCLEO_L476RG", "NUCLEO_L432KC",
00329         "DISCO_F769NI"]
00330     },
00331     {
00332         "id": "MBED_A28", "description": "CAN loopback test",
00333         "source_dir": join(TEST_DIR, "mbed", "can_loopback"),
00334         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00335         "automated": True,
00336         "duration": 20,
00337         "mcu": ["B96B_F446VE",
00338                 "NUCLEO_F091RC", "NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F207ZG",
00339         "NUCLEO_F303RE", "NUCLEO_F303K8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F446RE","NUCLEO_F446ZE",
00340         "DISCO_F469NI", "DISCO_F429ZI", "NUCLEO_F103RB", "NUCLEO_F746ZG",
00341         "DISCO_F746NG", "DISCO_L476VG", "NUCLEO_L476RG", "NUCLEO_L432KC",
00342         "DISCO_F769NI"]
00343     },
00344     {
00345         "id": "MBED_BLINKY", "description": "Blinky",
00346         "source_dir": join(TEST_DIR, "mbed", "blinky"),
00347         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00348         "automated": False,
00349     },
00350     {
00351         "id": "MBED_BUS", "description": "Blinky BUS",
00352         "source_dir": join(TEST_DIR, "mbed", "bus"),
00353         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00354         "automated": False,
00355         "duration": 15,
00356     },
00357 
00358     {
00359         "id": "MBED_BUSOUT", "description": "BusOut",
00360         "source_dir": join(TEST_DIR, "mbed", "bus_out"),
00361         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00362         "exclude_mcu": ["NUCLEO_L011K4"],
00363         "automated": True,
00364         "duration": 15,
00365     },
00366 
00367     # Size benchmarks
00368     {
00369         "id": "BENCHMARK_1", "description": "Size (c environment)",
00370         "source_dir": join(BENCHMARKS_DIR, "cenv"),
00371         "dependencies": [MBED_LIBRARIES]
00372     },
00373     {
00374         "id": "BENCHMARK_2", "description": "Size (float math)",
00375         "source_dir": join(BENCHMARKS_DIR, "float_math"),
00376         "dependencies": [MBED_LIBRARIES]
00377     },
00378     {
00379         "id": "BENCHMARK_3", "description": "Size (printf)",
00380         "source_dir": join(BENCHMARKS_DIR, "printf"),
00381         "dependencies": [MBED_LIBRARIES]
00382     },
00383     {
00384         "id": "BENCHMARK_4", "description": "Size (mbed libs)",
00385         "source_dir": join(BENCHMARKS_DIR, "mbed"),
00386         "dependencies": [MBED_LIBRARIES]
00387     },
00388     {
00389         "id": "BENCHMARK_5", "description": "Size (all)",
00390         "source_dir": join(BENCHMARKS_DIR, "all"),
00391         "dependencies": [MBED_LIBRARIES]
00392     },
00393 
00394     # performance related tests
00395     {
00396         "id": "PERF_1", "description": "SD Stdio R/W Speed",
00397         "source_dir": join(TEST_DIR, "mbed", "sd_perf_stdio"),
00398         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
00399         "automated": True,
00400         "duration": 15,
00401         "peripherals": ["SD"]
00402     },
00403     {
00404         "id": "PERF_2", "description": "SD FileHandle R/W Speed",
00405         "source_dir": join(TEST_DIR, "mbed", "sd_perf_fhandle"),
00406         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
00407         "automated": True,
00408         "duration": 15,
00409         "peripherals": ["SD"]
00410     },
00411     {
00412         "id": "PERF_3", "description": "SD FatFS R/W Speed",
00413         "source_dir": join(TEST_DIR, "mbed", "sd_perf_fatfs"),
00414         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
00415         "automated": True,
00416         "duration": 15,
00417         "peripherals": ["SD"]
00418     },
00419 
00420 
00421     # Not automated MBED tests
00422     {
00423         "id": "MBED_1", "description": "I2C SRF08",
00424         "source_dir": join(TEST_DIR, "mbed", "i2c_SRF08"),
00425         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'SRF08')],
00426         "peripherals": ["SRF08"]
00427     },
00428     {
00429         "id": "MBED_2", "description": "stdio",
00430         "source_dir": join(TEST_DIR, "mbed", "stdio"),
00431         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00432         "duration": 20,
00433         "automated": True,
00434         #"host_test": "stdio_auto"
00435     },
00436     {
00437         "id": "MBED_3", "description": "PortOut",
00438         "source_dir": join(TEST_DIR, "mbed", "portout"),
00439         "dependencies": [MBED_LIBRARIES],
00440     },
00441     {
00442         "id": "MBED_4", "description": "Sleep",
00443         "source_dir": join(TEST_DIR, "mbed", "sleep"),
00444         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00445         "duration": 30,
00446         "mcu": ["LPC1768", "LPC11U24", "LPC4088","LPC4088_DM","NRF51822", "LPC11U68"]
00447     },
00448     {
00449         "id": "MBED_5", "description": "PWM",
00450         "source_dir": join(TEST_DIR, "mbed", "pwm"),
00451         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB]
00452     },
00453     {
00454         "id": "MBED_6", "description": "SW Reset",
00455         "source_dir": join(TEST_DIR, "mbed", "reset"),
00456         "dependencies": [MBED_LIBRARIES],
00457         "duration": 15
00458     },
00459     {
00460         "id": "MBED_7", "description": "stdio  benchmark",
00461         "source_dir": join(TEST_DIR, "mbed", "stdio_benchmark"),
00462         "dependencies": [MBED_LIBRARIES],
00463         "duration": 40
00464     },
00465     {
00466         "id": "MBED_8", "description": "SPI",
00467         "source_dir": join(TEST_DIR, "mbed", "spi"),
00468         "dependencies": [MBED_LIBRARIES],
00469     },
00470     {
00471         "id": "MBED_9", "description": "Sleep Timeout",
00472         "source_dir": join(TEST_DIR, "mbed", "sleep_timeout"),
00473         "dependencies": [MBED_LIBRARIES],
00474     },
00475     {
00476         "id": "MBED_10", "description": "Hello World",
00477         "source_dir": join(TEST_DIR, "mbed", "hello"),
00478         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00479         "automated": True,
00480         #"host_test": "hello_auto",
00481     },
00482     {
00483         "id": "MBED_11", "description": "Ticker Int",
00484         "source_dir": join(TEST_DIR, "mbed", "ticker"),
00485         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00486         "automated": True,
00487         #"host_test": "wait_us_auto",
00488         "duration": 20,
00489     },
00490     {
00491         "id": "MBED_12", "description": "C++",
00492         "source_dir": join(TEST_DIR, "mbed", "cpp"),
00493         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00494         "automated": True
00495     },
00496     {
00497         "id": "MBED_13", "description": "Heap & Stack",
00498         "source_dir": join(TEST_DIR, "mbed", "heap_and_stack"),
00499         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00500     },
00501     {
00502         "id": "MBED_14", "description": "Serial Interrupt",
00503         "source_dir": join(TEST_DIR, "mbed", "serial_interrupt"),
00504         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00505     },
00506     {
00507         "id": "MBED_15", "description": "RPC",
00508         "source_dir": join(TEST_DIR, "mbed", "rpc"),
00509         "dependencies": [MBED_LIBRARIES, join(LIB_DIR, "rpc"), TEST_MBED_LIB],
00510         "automated": False,
00511         "mcu": ["LPC1768"]
00512     },
00513     {
00514         "id": "MBED_16", "description": "RTC",
00515         "source_dir": join(TEST_DIR, "mbed", "rtc"),
00516         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00517         "automated": True,
00518         "exclude_mcu": ["NRF51822", "NRF51822_BOOT", "NRF51822_OTA", "NRF51822_Y5_MBUG",
00519                         "NRF51_DK", "NRF51_DK_BOOT", "NRF51_DK_OTA",
00520                         "NRF51_MICROBIT", "NRF51_MICROBIT_B", "NRF51_MICROBIT_BOOT",
00521                         "NRF51_MICROBIT_B_BOOT", "NRF51_MICROBIT_B_OTA", "NRF51_MICROBIT_OTA",
00522                         "HRM1017", "HRM1017_BOOT", "HRM1701_OTA",
00523                         "NUCLEO_L011K4",
00524                         "TY51822R3", "TY51822R3_BOOT", "TY51822R3_OTA",
00525                         "NRF15_DONGLE", "NRF15_DONGLE_BOOT", "NRF15_DONGLE_OTA",
00526                         "ARCH_BLE", "ARCH_BLE_BOOT", "ARCH_BLE_OTA",
00527                         "ARCH_LINK", "ARCH_LINK_BOOT", "ARCH_LINK_OTA",
00528                         "RBLAB_BLENANO", "RBLAB_BLENANO_BOOT", "RBLAB_BLENANO_OTA",
00529                         "RBLAB_NRF51822", "RBLAB_NRF51822_BOOT", "RBLAB_NRF51822_OTA",
00530                         "SEEED_TINY_BLE", "SEEED_TINY_BLE_BOOT", "SEEED_TINY_BLE_OTA",
00531                         "WALLBOT_BLE", "WALLBOT_BLE_BOOT", "WALLBOT_BLE_OTA",
00532                         "DELTA_DFCM_NNN40", "DELTA_DFCM_NNN40_BOOT", "DELTA_DFCM_NNN40_OTA",
00533                         "LPC1114"],
00534         #"host_test": "rtc_auto",
00535         "duration": 15
00536     },
00537     {
00538         "id": "MBED_17", "description": "Serial Interrupt 2",
00539         "source_dir": join(TEST_DIR, "mbed", "serial_interrupt_2"),
00540         "dependencies": [MBED_LIBRARIES],
00541     },
00542     {
00543         "id": "MBED_18", "description": "Local FS Directory",
00544         "source_dir": join(TEST_DIR, "mbed", "dir"),
00545         "dependencies": [MBED_LIBRARIES],
00546     },
00547     {
00548         "id": "MBED_19", "description": "SD FS Directory",
00549         "source_dir": join(TEST_DIR, "mbed", "dir_sd"),
00550         "dependencies": [MBED_LIBRARIES, FS_LIBRARY],
00551         "peripherals": ["SD"]
00552     },
00553     {
00554         "id": "MBED_20", "description": "InterruptIn 2",
00555         "source_dir": join(TEST_DIR, "mbed", "interruptin_2"),
00556         "dependencies": [MBED_LIBRARIES],
00557     },
00558     {
00559         "id": "MBED_21", "description": "freopen Stream",
00560         "source_dir": join(TEST_DIR, "mbed", "freopen"),
00561         "dependencies": [MBED_LIBRARIES],
00562     },
00563     {
00564         "id": "MBED_22", "description": "Semihost",
00565         "source_dir": join(TEST_DIR, "mbed", "semihost"),
00566         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00567         "automated": True,
00568         "mcu": ["LPC1768", "LPC2368", "LPC11U24"]
00569     },
00570     {
00571         "id": "MBED_23", "description": "Ticker Int us",
00572         "source_dir": join(TEST_DIR, "mbed", "ticker_2"),
00573         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00574         "duration": 15,
00575         "automated": True,
00576         #"host_test": "wait_us_auto"
00577     },
00578     {
00579         "id": "MBED_24", "description": "Timeout Int us",
00580         "source_dir": join(TEST_DIR, "mbed", "timeout"),
00581         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00582         "duration": 15,
00583         "automated": True,
00584         #"host_test": "wait_us_auto"
00585     },
00586     {
00587         "id": "MBED_25", "description": "Time us",
00588         "source_dir": join(TEST_DIR, "mbed", "time_us"),
00589         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00590         "duration": 15,
00591         "automated": True,
00592         #"host_test": "wait_us_auto"
00593     },
00594     {
00595         "id": "MBED_26", "description": "Integer constant division",
00596         "source_dir": join(TEST_DIR, "mbed", "div"),
00597         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00598         "automated": True,
00599     },
00600     {
00601         "id": "MBED_27", "description": "SPI ADXL345",
00602         "source_dir": join(TEST_DIR, "mbed", "spi_ADXL345"),
00603         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'ADXL345')],
00604         "peripherals": ["ADXL345"]
00605     },
00606     {
00607         "id": "MBED_28", "description": "Interrupt chaining (InterruptManager)",
00608         "source_dir": join(TEST_DIR, "mbed", "interrupt_chaining"),
00609         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00610     },
00611     {
00612         "id": "MBED_29", "description": "CAN network test",
00613         "source_dir": join(TEST_DIR, "mbed", "can"),
00614         "dependencies": [MBED_LIBRARIES],
00615         "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC",
00616                 "NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F303RE",
00617                 "NUCLEO_F303K8", "NUCLEO_F302R8", "NUCLEO_F446RE","NUCLEO_F446ZE", "DISCO_F469NI", "NUCLEO_F207ZG",
00618                 "DISCO_F429ZI", "NUCLEO_F103RB", "NUCLEO_F746ZG", "DISCO_F746NG",
00619                 "NUCLEO_L476RG", "NUCLEO_L432KC"]
00620     },
00621     {
00622         "id": "MBED_30", "description": "CAN network test using interrupts",
00623         "source_dir": join(TEST_DIR, "mbed", "can_interrupt"),
00624         "dependencies": [MBED_LIBRARIES],
00625         "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC", "NUCLEO_F207ZG",
00626                 "NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F303RE",
00627                 "NUCLEO_F303K8", "NUCLEO_F302R8", "NUCLEO_F446RE", "NUCLEO_F446ZE", "DISCO_F469NI",
00628                 "DISCO_F429ZI", "NUCLEO_F103RB", "NUCLEO_F746ZG", "DISCO_F746NG",
00629                 "NUCLEO_L476RG", "NUCLEO_L432KC"]
00630     },
00631     {
00632         "id": "MBED_31", "description": "PWM LED test",
00633         "source_dir": join(TEST_DIR, "mbed", "pwm_led"),
00634         "dependencies": [MBED_LIBRARIES],
00635     },
00636     {
00637         "id": "MBED_32", "description": "Pin toggling",
00638         "source_dir": join(TEST_DIR, "mbed", "pin_toggling"),
00639         "dependencies": [MBED_LIBRARIES],
00640     },
00641     {
00642         "id": "MBED_33", "description": "C string operations",
00643         "source_dir": join(TEST_DIR, "mbed", "cstring"),
00644         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00645         "duration": 10,
00646         "automated": False,
00647     },
00648     {
00649         "id": "MBED_34", "description": "Ticker Two callbacks",
00650         "source_dir": join(TEST_DIR, "mbed", "ticker_3"),
00651         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00652         "duration": 15,
00653         "automated": True,
00654         #"host_test": "wait_us_auto"
00655     },
00656     {
00657         "id": "MBED_35", "description": "SPI C12832 display",
00658         "source_dir": join(TEST_DIR, "mbed", "spi_C12832"),
00659         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'C12832')],
00660         "peripherals": ["C12832"],
00661         "automated": True,
00662         "duration": 10,
00663     },
00664     {
00665         "id": "MBED_36", "description": "WFI correct behavior",
00666         "source_dir": join(TEST_DIR, "mbed", "wfi"),
00667         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00668         "automated": False
00669     },
00670     {
00671         "id": "MBED_37", "description": "Serial NC RX",
00672         "source_dir": join(TEST_DIR, "mbed", "serial_nc_rx"),
00673         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00674         "exclude_mcu": ["NUCLEO_L011K4"],
00675         "automated": True
00676     },
00677     {
00678         "id": "MBED_38", "description": "Serial NC TX",
00679         "source_dir": join(TEST_DIR, "mbed", "serial_nc_tx"),
00680         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00681         "exclude_mcu": ["NUCLEO_L011K4"],
00682         "automated": True
00683     },
00684     {
00685         "id": "MBED_39", "description": "Serial Complete",
00686         "source_dir": join(TEST_DIR, "mbed", "serial_complete"),
00687         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
00688         "automated": False
00689     },
00690 
00691     # CMSIS RTOS tests
00692     {
00693         "id": "CMSIS_RTOS_1", "description": "Basic",
00694         "source_dir": join(TEST_DIR, "rtos", "cmsis", "basic"),
00695         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00696     },
00697     {
00698         "id": "CMSIS_RTOS_2", "description": "Mutex",
00699         "source_dir": join(TEST_DIR, "rtos", "cmsis", "mutex"),
00700         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00701         "duration": 20
00702     },
00703     {
00704         "id": "CMSIS_RTOS_3", "description": "Semaphore",
00705         "source_dir": join(TEST_DIR, "rtos", "cmsis", "semaphore"),
00706         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00707         "duration": 20
00708     },
00709     {
00710         "id": "CMSIS_RTOS_4", "description": "Signals",
00711         "source_dir": join(TEST_DIR, "rtos", "cmsis", "signals"),
00712         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00713     },
00714     {
00715         "id": "CMSIS_RTOS_5", "description": "Queue",
00716         "source_dir": join(TEST_DIR, "rtos", "cmsis", "queue"),
00717         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00718         "duration": 20
00719     },
00720     {
00721         "id": "CMSIS_RTOS_6", "description": "Mail",
00722         "source_dir": join(TEST_DIR, "rtos", "cmsis", "mail"),
00723         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00724         "duration": 20
00725     },
00726     {
00727         "id": "CMSIS_RTOS_7", "description": "Timer",
00728         "source_dir": join(TEST_DIR, "rtos", "cmsis", "timer"),
00729         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00730     },
00731     {
00732         "id": "CMSIS_RTOS_8", "description": "ISR",
00733         "source_dir": join(TEST_DIR, "rtos", "cmsis", "isr"),
00734         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES],
00735     },
00736 
00737     # mbed RTOS tests
00738     {
00739         "id": "RTOS_1", "description": "Basic thread",
00740         "source_dir": join(TEST_DIR, "rtos", "mbed", "basic"),
00741         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00742         "duration": 15,
00743         "automated": True,
00744         #"host_test": "wait_us_auto",
00745         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00746                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00747                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00748                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00749                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00750                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303ZE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE", "NUCLEO_F446RE", "NUCLEO_F446ZE", "NUCLEO_F103RB", "DISCO_F746NG", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00751                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00752                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00753     },
00754     {
00755         "id": "RTOS_2", "description": "Mutex resource lock",
00756         "source_dir": join(TEST_DIR, "rtos", "mbed", "mutex"),
00757         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00758         "duration": 20,
00759         "automated": True,
00760         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00761                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00762                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00763                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00764                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00765                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE", "NUCLEO_F446RE", "NUCLEO_F103RB", "DISCO_F746NG",
00766                 "NUCLEO_F446ZE", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00767                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00768                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00769     },
00770     {
00771         "id": "RTOS_3", "description": "Semaphore resource lock",
00772         "source_dir": join(TEST_DIR, "rtos", "mbed", "semaphore"),
00773         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00774         "duration": 20,
00775         "automated": True,
00776         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00777                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00778                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00779                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00780                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00781                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE", "NUCLEO_F446RE",  "NUCLEO_F446ZE",
00782                 "NUCLEO_F103RB", "DISCO_F746NG",
00783                 "NUCLEO_F746ZG",  "MOTE_L152RC", "B96B_F446VE",
00784                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00785                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00786     },
00787     {
00788         "id": "RTOS_4", "description": "Signals messaging",
00789         "source_dir": join(TEST_DIR, "rtos", "mbed", "signals"),
00790         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00791         "automated": True,
00792         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00793                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00794                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00795                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00796                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00797                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE", "NUCLEO_F446RE", "NUCLEO_F446ZE",
00798                 "NUCLEO_F103RB", "DISCO_F746NG",
00799                 "NUCLEO_F746ZG",  "MOTE_L152RC", "B96B_F446VE",
00800                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00801                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00802     },
00803     {
00804         "id": "RTOS_5", "description": "Queue messaging",
00805         "source_dir": join(TEST_DIR, "rtos", "mbed", "queue"),
00806         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00807         "automated": True,
00808         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00809                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00810                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00811                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00812                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00813                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE",
00814                 "NUCLEO_F446RE", "NUCLEO_F446ZE", "NUCLEO_F103RB", "DISCO_F746NG", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00815                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00816                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00817     },
00818     {
00819         "id": "RTOS_6", "description": "Mail messaging",
00820         "source_dir": join(TEST_DIR, "rtos", "mbed", "mail"),
00821         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00822         "automated": True,
00823         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00824                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00825                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00826                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00827                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00828                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE",
00829                 "NUCLEO_F446RE", "NUCLEO_F446ZE", "NUCLEO_F103RB", "DISCO_F746NG", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00830                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00831                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00832     },
00833     {
00834         "id": "RTOS_7", "description": "Timer",
00835         "source_dir": join(TEST_DIR, "rtos", "mbed", "timer"),
00836         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00837         "duration": 15,
00838         "automated": True,
00839         #"host_test": "wait_us_auto",
00840         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00841                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00842                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00843                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00844                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00845                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE",
00846                 "NUCLEO_F446RE", "NUCLEO_F446ZE", "NUCLEO_F103RB", "DISCO_F746NG", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00847                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00848                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00849     },
00850     {
00851         "id": "RTOS_8", "description": "ISR (Queue)",
00852         "source_dir": join(TEST_DIR, "rtos", "mbed", "isr"),
00853         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB],
00854         "automated": True,
00855         "mcu": ["LPC1768", "LPC1549", "LPC11U24", "LPC812", "LPC2460", "LPC824", "SSCI824",
00856                 "KL25Z", "KL05Z", "K64F", "K66F", "KL46Z", "HEXIWEAR",
00857                 "RZ_A1H", "VK_RZ_A1H", "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F411RE", "DISCO_F469NI", "NUCLEO_F410RB", "NUCLEO_F429ZI",
00858                 "NUCLEO_F401RE", "NUCLEO_F334R8", "DISCO_F334C8", "NUCLEO_F302R8", "NUCLEO_F303ZE", "NUCLEO_F070RB", "NUCLEO_F207ZG",
00859                 "NUCLEO_L073RZ", "NUCLEO_F072RB", "NUCLEO_F091RC", "NUCLEO_L432KC", "DISCO_L476VG", "NUCLEO_L476RG",
00860                 "DISCO_F401VC", "NUCLEO_F303RE", "NUCLEO_F303K8", "MAXWSNENV", "MAX32600MBED", "NUCLEO_L152RE",
00861                 "NUCLEO_F446RE", "NUCLEO_F446ZE", "NUCLEO_F103RB", "DISCO_F746NG", "NUCLEO_F746ZG", "MOTE_L152RC", "B96B_F446VE",
00862                 "EFM32HG_STK3400", "EFM32PG_STK3401", "EFM32LG_STK3600", "EFM32GG_STK3700", "EFM32WG_STK3800",
00863                 "NRF51822", "NRF51_DK", "SEEED_TINY_BLE", "ARM_BEETLE_SOC", "NUCLEO_F767ZI", "DISCO_F769NI"],
00864     },
00865     {
00866         "id": "RTOS_9", "description": "SD File write-read",
00867         "source_dir": join(TEST_DIR, "rtos", "mbed", "file"),
00868         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
00869         "automated": True,
00870         "peripherals": ["SD"],
00871         "mcu": ["LPC1768", "LPC11U24", "LPC812", "KL25Z", "HEXIWEAR",
00872                 "KL05Z", "K64F", "K66F", "KL46Z", "RZ_A1H",
00873                 "DISCO_F407VG", "DISCO_F429ZI", "NUCLEO_F429ZI", "NUCLEO_F411RE", "NUCLEO_F401RE", "NUCLEO_F410RB", "DISCO_F469NI", "NUCLEO_F207ZG"],
00874     },
00875 
00876     # Networking Tests
00877     {
00878         "id": "NET_1", "description": "TCP client hello world",
00879         "source_dir": join(TEST_DIR, "net", "helloworld", "tcpclient"),
00880         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00881         "duration": 15,
00882         "automated": True,
00883         "peripherals": ["ethernet"],
00884     },
00885     {
00886         "id": "NET_2", "description": "NIST Internet Time Service",
00887         "source_dir": join(TEST_DIR, "net", "helloworld", "udpclient"),
00888         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00889         "duration": 15,
00890         "automated": True,
00891         "peripherals": ["ethernet"],
00892     },
00893     {
00894         "id": "NET_3", "description": "TCP echo server",
00895         "source_dir": join(TEST_DIR, "net", "echo", "tcp_server"),
00896         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00897         "automated": True,
00898         #"host_test" : "tcpecho_server_auto",
00899         "peripherals": ["ethernet"],
00900     },
00901     {
00902         "id": "NET_4", "description": "TCP echo client",
00903         "source_dir": join(TEST_DIR, "net", "echo", "tcp_client"),
00904         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00905         "automated": True,
00906         #"host_test": "tcpecho_client_auto",
00907         "peripherals": ["ethernet"]
00908     },
00909     {
00910         "id": "NET_5", "description": "UDP echo server",
00911         "source_dir": join(TEST_DIR, "net", "echo", "udp_server"),
00912         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00913         "automated": True,
00914         #"host_test" : "udpecho_server_auto",
00915         "peripherals": ["ethernet"]
00916     },
00917     {
00918         "id": "NET_6", "description": "UDP echo client",
00919         "source_dir": join(TEST_DIR, "net", "echo", "udp_client"),
00920         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00921         "automated": True,
00922         #"host_test" : "udpecho_client_auto",
00923         "peripherals": ["ethernet"],
00924     },
00925     {
00926         "id": "NET_7", "description": "HTTP client hello world",
00927         "source_dir": join(TEST_DIR, "net", "protocols", "HTTPClient_HelloWorld"),
00928         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00929         "automated": True,
00930         "duration": 15,
00931         "peripherals": ["ethernet"],
00932     },
00933     {
00934         "id": "NET_8", "description": "NTP client",
00935         "source_dir": join(TEST_DIR, "net", "protocols", "NTPClient_HelloWorld"),
00936         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00937         "automated": True,
00938         "peripherals": ["ethernet"],
00939     },
00940     {
00941         "id": "NET_9", "description": "Multicast Send",
00942         "source_dir": join(TEST_DIR, "net", "helloworld", "multicast_send"),
00943         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY],
00944         "peripherals": ["ethernet"],
00945     },
00946     {
00947         "id": "NET_10", "description": "Multicast Receive",
00948         "source_dir": join(TEST_DIR, "net", "helloworld", "multicast_receive"),
00949         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY],
00950         "peripherals": ["ethernet"],
00951     },
00952     {
00953         "id": "NET_11", "description": "Broadcast Send",
00954         "source_dir": join(TEST_DIR, "net", "helloworld", "broadcast_send"),
00955         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY],
00956         "peripherals": ["ethernet"],
00957     },
00958     {
00959         "id": "NET_12", "description": "Broadcast Receive",
00960         "source_dir": join(TEST_DIR, "net", "helloworld", "broadcast_receive"),
00961         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY],
00962         "peripherals": ["ethernet"],
00963     },
00964     {
00965         "id": "NET_13", "description": "TCP client echo loop",
00966         "source_dir": join(TEST_DIR, "net", "echo", "tcp_client_loop"),
00967         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY, TEST_MBED_LIB],
00968         "automated": True,
00969         "duration": 15,
00970         #"host_test": "tcpecho_client_auto",
00971         "peripherals": ["ethernet"],
00972     },
00973     {
00974         "id": "NET_14", "description": "UDP PHY/Data link layer",
00975         "source_dir": join(TEST_DIR, "net", "echo", "udp_link_layer"),
00976         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, ETH_LIBRARY],
00977         "automated": False,
00978         "duration": 20,
00979         "host_test": "udp_link_layer_auto",
00980         "peripherals": ["ethernet"],
00981     },
00982 
00983     # u-blox tests
00984     {
00985         "id": "UB_1", "description": "u-blox USB modem: HTTP client",
00986         "source_dir": [join(TEST_DIR, "net", "cellular", "http", "ubloxusb"), join(TEST_DIR, "net", "cellular", "http", "common")],
00987         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, USB_HOST_LIBRARIES, UBLOX_LIBRARY],
00988         "supported": CORTEX_ARM_SUPPORT,
00989     },
00990     {
00991         "id": "UB_2", "description": "u-blox USB modem: SMS test",
00992         "source_dir": [join(TEST_DIR, "net", "cellular", "sms", "ubloxusb"), join(TEST_DIR, "net", "cellular", "sms", "common")],
00993         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, USB_HOST_LIBRARIES, UBLOX_LIBRARY],
00994         "supported": CORTEX_ARM_SUPPORT,
00995     },
00996 
00997     # USB Tests
00998     {
00999         "id": "USB_1", "description": "Mouse",
01000         "source_dir": join(TEST_DIR, "usb", "device", "basic"),
01001         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01002     },
01003     {
01004         "id": "USB_2", "description": "Keyboard",
01005         "source_dir": join(TEST_DIR, "usb", "device", "keyboard"),
01006         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01007     },
01008     {
01009         "id": "USB_3", "description": "Mouse_Keyboard",
01010         "source_dir": join(TEST_DIR, "usb", "device", "keyboard"),
01011         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01012     },
01013     {
01014         "id": "USB_4", "description": "Serial Port",
01015         "source_dir": join(TEST_DIR, "usb", "device", "serial"),
01016         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01017         "supported": CORTEX_ARM_SUPPORT,
01018     },
01019     {
01020         "id": "USB_5", "description": "Generic HID",
01021         "source_dir": join(TEST_DIR, "usb", "device", "raw_hid"),
01022         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01023     },
01024     {
01025         "id": "USB_6", "description": "MIDI",
01026         "source_dir": join(TEST_DIR, "usb", "device", "midi"),
01027         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01028     },
01029     {
01030         "id": "USB_7", "description": "AUDIO",
01031         "source_dir": join(TEST_DIR, "usb", "device", "audio"),
01032         "dependencies": [MBED_LIBRARIES, USB_LIBRARIES],
01033     },
01034 
01035     # CMSIS DSP
01036     {
01037         "id": "CMSIS_DSP_1", "description": "FIR",
01038         "source_dir": join(TEST_DIR, "dsp", "cmsis", "fir_f32"),
01039         "dependencies": [MBED_LIBRARIES, DSP_LIBRARIES],
01040     },
01041 
01042     # mbed DSP
01043     {
01044         "id": "DSP_1", "description": "FIR",
01045         "source_dir": join(TEST_DIR, "dsp", "mbed", "fir_f32"),
01046         "dependencies": [MBED_LIBRARIES, DSP_LIBRARIES],
01047     },
01048 
01049     # KL25Z
01050     {
01051         "id": "KL25Z_1", "description": "LPTMR",
01052         "source_dir": join(TEST_DIR, "KL25Z", "lptmr"),
01053         "dependencies": [MBED_LIBRARIES],
01054         "supported": CORTEX_ARM_SUPPORT,
01055         "mcu": ["KL25Z"],
01056     },
01057     {
01058         "id": "KL25Z_2", "description": "PIT",
01059         "source_dir": join(TEST_DIR, "KL25Z", "pit"),
01060         "dependencies": [MBED_LIBRARIES],
01061         "supported": CORTEX_ARM_SUPPORT,
01062         "mcu": ["KL25Z"],
01063     },
01064     {
01065         "id": "KL25Z_3", "description": "TSI Touch Sensor",
01066         "source_dir": join(TEST_DIR, "mbed", "tsi"),
01067         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'TSI')],
01068         "mcu": ["KL25Z"],
01069     },
01070     {
01071         "id": "KL25Z_4", "description": "RTC",
01072         "source_dir": join(TEST_DIR, "KL25Z", "rtc"),
01073         "dependencies": [MBED_LIBRARIES],
01074         "mcu": ["KL25Z"],
01075     },
01076     {
01077         "id": "KL25Z_5", "description": "MMA8451Q accelerometer",
01078         "source_dir": join(TEST_DIR, "mbed", "i2c_MMA8451Q"),
01079         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, join(PERIPHERALS, 'MMA8451Q')],
01080         "mcu": ["KL25Z", "KL05Z", "KL46Z", "K20D50M"],
01081         "automated": True,
01082         "duration": 15,
01083         },
01084 
01085     # Examples
01086     {
01087         "id": "EXAMPLE_1", "description": "/dev/null",
01088         "source_dir": join(TEST_DIR, "mbed", "dev_null"),
01089         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
01090         "exclude_mcu": ["NUCLEO_L011K4"],
01091         "automated": True,
01092         #"host_test" : "dev_null_auto",
01093     },
01094     {
01095         "id": "EXAMPLE_2", "description": "FS + RTOS",
01096         "source_dir": join(TEST_DIR, "mbed", "fs"),
01097         "dependencies": [MBED_LIBRARIES, RTOS_LIBRARIES, TEST_MBED_LIB, FS_LIBRARY],
01098     },
01099 
01100     # CPPUTEST Library provides Unit testing Framework
01101     #
01102     # To write TESTs and TEST_GROUPs please add CPPUTEST_LIBRARY to 'dependencies'
01103     #
01104     # This will also include:
01105     # 1. test runner - main function with call to CommandLineTestRunner::RunAllTests(ac, av)
01106     # 2. Serial console object to print test result on serial port console
01107     #
01108 
01109     # Unit testing with cpputest library
01110     {
01111         "id": "UT_1", "description": "Basic",
01112         "source_dir": join(TEST_DIR, "utest", "basic"),
01113         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01114         "automated": False,
01115     },
01116     {
01117         "id": "UT_2", "description": "Semihost file system",
01118         "source_dir": join(TEST_DIR, "utest", "semihost_fs"),
01119         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01120         "automated": False,
01121         "mcu": ["LPC1768", "LPC2368", "LPC11U24"]
01122     },
01123     {
01124         "id": "UT_3", "description": "General tests",
01125         "source_dir": join(TEST_DIR, "utest", "general"),
01126         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01127         "automated": False,
01128     },
01129     {
01130         "id": "UT_BUSIO", "description": "BusIn BusOut",
01131         "source_dir": join(TEST_DIR, "utest", "bus"),
01132         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01133         "automated": False,
01134     },
01135     {
01136         "id": "UT_I2C_EEPROM_ASYNCH", "description": "I2C Asynch eeprom",
01137         "source_dir": join(TEST_DIR, "utest", "i2c_eeprom_asynch"),
01138         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01139         "automated": False,
01140     },
01141     {
01142         "id": "UT_SERIAL_ASYNCH", "description": "Asynch serial test (req 2 serial peripherals)",
01143         "source_dir": join(TEST_DIR, "utest", "serial_asynch"),
01144         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01145         "automated": False,
01146     },
01147     {
01148         "id": "UT_SPI_ASYNCH", "description": "Asynch spi test",
01149         "source_dir": join(TEST_DIR, "utest", "spi_asynch"),
01150         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01151         "automated": False,
01152     },
01153     {
01154         "id": "UT_LP_TICKER", "description": "Low power ticker test",
01155         "source_dir": join(TEST_DIR, "utest", "lp_ticker"),
01156         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB, CPPUTEST_LIBRARY],
01157         "automated": False,
01158     },
01159 
01160     # Tests used for target information purposes
01161     {
01162         "id": "DTCT_1", "description": "Simple detect test",
01163         "source_dir": join(TEST_DIR, "mbed", "detect"),
01164         "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB],
01165         "automated": True,
01166         #"host_test" : "detect_auto",
01167     },
01168 
01169 ]
01170 
01171 # Group tests with the same goals into categories
01172 GROUPS = {
01173     "core": ["MBED_A1", "MBED_A2", "MBED_A3", "MBED_A18"],
01174     "digital_io": ["MBED_A5", "MBED_A6", "MBED_A7", "MBED_A10", "MBED_A11"],
01175     "analog_io": ["MBED_A8"],
01176     "i2c": ["MBED_A19", "MBED_A20"],
01177     "spi": ["MBED_A12"],
01178 }
01179 GROUPS["rtos"] = [test["id"] for test in TESTS if test["id"].startswith("RTOS_")]
01180 GROUPS["net"] = [test["id"] for test in TESTS if test["id"].startswith("NET_")]
01181 GROUPS["automated"] = [test["id"] for test in TESTS if test.get("automated", False)]
01182 # Look for 'TEST_GROUPS' in mbed_settings.py and update the GROUPS dictionary
01183 # with the information in test_groups if found
01184 try:
01185     from mbed_settings import TEST_GROUPS
01186 except:
01187     TEST_GROUPS = {}
01188 GROUPS.update(TEST_GROUPS)
01189 
01190 class Test:
01191     DEFAULTS = {
01192         #'mcu': None,
01193         'description': None,
01194         'dependencies': None,
01195         'duration': 10,
01196         'host_test': 'host_test',
01197         'automated': False,
01198         'peripherals': None,
01199         #'supported': None,
01200         'source_dir': None,
01201         'extra_files': None
01202     }
01203     def __init__(self, n):
01204         self.n = n
01205         self.__dict__.update(Test.DEFAULTS)
01206         self.__dict__.update(TESTS[n])
01207 
01208     def is_supported(self, target, toolchain):
01209         if hasattr(self, 'mcu') and not target in self.mcu:
01210             return False
01211         if hasattr(self, 'exclude_mcu') and target in self.exclude_mcu:
01212             return False
01213         if not hasattr(self, 'supported'):
01214             return True
01215         return (target in self.supported) and (toolchain in self.supported[target])
01216 
01217     def get_description(self):
01218         if self.description:
01219             return self.description
01220         else:
01221             return self.id
01222 
01223     def __cmp__(self, other):
01224         return cmp(self.n, other.n)
01225 
01226     def __str__(self):
01227         return "[%3d] %s: %s" % (self.n, self.id, self.get_description())
01228 
01229     def __getitem__(self, key):
01230         if key == "id": return self.id
01231         elif key == "mcu": return self.mcu
01232         elif key == "exclude_mcu": return self.exclude_mcu
01233         elif key == "dependencies": return self.dependencies
01234         elif key == "description": return self.description
01235         elif key == "duration": return self.duration
01236         elif key == "host_test": return self.host_test
01237         elif key == "automated": return self.automated
01238         elif key == "peripherals": return self.peripherals
01239         elif key == "supported": return self.supported
01240         elif key == "source_dir": return self.source_dir
01241         elif key == "extra_files": return self.extra_files
01242         else:
01243             return None
01244 
01245 TEST_MAP = dict([(test['id'], Test(i)) for i, test in enumerate(TESTS)])
01246 
01247 # parser helpers
01248 def test_known(string):
01249     i = int(string)
01250     if i >= 0 and i < len(TESTS):
01251         return i
01252     else:
01253         raise ArgumentTypeError("{0} does not index a test. The accepted range is 0 to {1}\nThe test mapping is:\n{2}".format(i, len(TEST_MAP) - 1, columnate([str(i) + ":" + t['id'] for i,t in zip(range(len(TESTS)), TESTS)])))
01254 
01255 def test_name_known(string):
01256     if string not in TEST_MAP.keys() and \
01257        (getattr(ps, "test_alias", None) is None or \
01258         ps.test_alias.get(string, "") not in TEST_MAP.keys()):
01259         raise ArgumentTypeError("Program with name '{0}' not found. Supported tests are: \n{1}".format(string, columnate([t['id'] for t in TESTS])))
01260 
01261     return TEST_MAP[string].n