Lee Kai Xuan / mbed-os

Fork of mbed-os by erkin yucel

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