Nitin Shukla / LED_Demo

Dependencies:   MAX44000 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