~ruther/qmk_firmware

f03b10b6c1c9a5b0e07f7f78c6060610246b4a7f — Joel Challis 4 years ago 810eafa
Migrate python tests away from onekey (#11367)

* Migrate python tests away from onekey

* Add stub files to stop lint complaints

* Make all the pytest keymaps compile
27 files changed, 113 insertions(+), 82 deletions(-)

D keyboards/handwired/onekey/pytest/config.h
D keyboards/handwired/onekey/pytest/readme.md
D keyboards/handwired/onekey/pytest/rules.mk
R keyboards/handwired/{onekey => }/pytest/.noci
A keyboards/handwired/pytest/basic/.noci
A keyboards/handwired/pytest/basic/keymaps/default/keymap.c
R keyboards/handwired/{onekey => pytest/basic}/keymaps/default_json/keymap.json
A keyboards/handwired/pytest/basic/readme.md
A keyboards/handwired/pytest/basic/rules.mk
A keyboards/handwired/pytest/config.h
A keyboards/handwired/pytest/has_community/.noci
A keyboards/handwired/pytest/has_community/readme.md
A keyboards/handwired/pytest/has_community/rules.mk
A keyboards/handwired/pytest/has_template/.noci
A keyboards/handwired/pytest/has_template/keymaps/.noci
A keyboards/handwired/pytest/has_template/keymaps/default/keymap.c
A keyboards/handwired/pytest/has_template/keymaps/default_json/keymap.json
R keyboards/handwired/{onekey/keymaps/pytest_nocpp => pytest/has_template/keymaps/nocpp}/keymap.c
A keyboards/handwired/pytest/has_template/readme.md
A keyboards/handwired/pytest/has_template/rules.mk
R keyboards/handwired/{onekey/pytest => pytest/has_template}/templates/keymap.c
R keyboards/handwired/{onekey/pytest => pytest/has_template}/templates/keymap.json
A keyboards/handwired/pytest/pytest.h
R lib/python/qmk/tests/{onekey_export => pytest_export}.json
M lib/python/qmk/tests/test_cli_commands.py
M lib/python/qmk/tests/test_qmk_keymap.py
M lib/python/qmk/tests/test_qmk_path.py
D keyboards/handwired/onekey/pytest/config.h => keyboards/handwired/onekey/pytest/config.h +0 -23
@@ 1,23 0,0 @@
/* Copyright 2019
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include "config_common.h"

#define MATRIX_COL_PINS { A3 }
#define MATRIX_ROW_PINS { A2 }
#define UNUSED_PINS

D keyboards/handwired/onekey/pytest/readme.md => keyboards/handwired/onekey/pytest/readme.md +0 -3
@@ 1,3 0,0 @@
# PyTest onekey

This is used by the python test framework. It's probably not useful otherwise.

D keyboards/handwired/onekey/pytest/rules.mk => keyboards/handwired/onekey/pytest/rules.mk +0 -2
@@ 1,2 0,0 @@
# MCU name
MCU = STM32F303

R keyboards/handwired/onekey/pytest/.noci => keyboards/handwired/pytest/.noci +0 -0
A keyboards/handwired/pytest/basic/.noci => keyboards/handwired/pytest/basic/.noci +0 -0
A keyboards/handwired/pytest/basic/keymaps/default/keymap.c => keyboards/handwired/pytest/basic/keymaps/default/keymap.c +5 -0
@@ 0,0 1,5 @@
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    LAYOUT_ortho_1x1(KC_A)
};

R keyboards/handwired/onekey/keymaps/default_json/keymap.json => keyboards/handwired/pytest/basic/keymaps/default_json/keymap.json +2 -2
@@ 1,9 1,9 @@
{
    "keyboard": "handwired/onekey/pytest",
    "keyboard": "handwired/pytest/basic",
    "keymap": "default_json",
    "layout": "LAYOUT_ortho_1x1",
    "layers": [["KC_A"]],
    "author": "qmk",
    "notes": "This file is a keymap.json file for handwired/onekey/pytest",
    "notes": "This file is a keymap.json file for handwired/pytest/basic",
    "version": 1
}

A keyboards/handwired/pytest/basic/readme.md => keyboards/handwired/pytest/basic/readme.md +0 -0
A keyboards/handwired/pytest/basic/rules.mk => keyboards/handwired/pytest/basic/rules.mk +1 -0
@@ 0,0 1,1 @@
MCU = atmega32u4

A keyboards/handwired/pytest/config.h => keyboards/handwired/pytest/config.h +18 -0
@@ 0,0 1,18 @@
#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x6465
#define DEVICE_VER      0x0001
#define MANUFACTURER    none
#define PRODUCT         pytest

/* key matrix size */
#define MATRIX_ROWS 1
#define MATRIX_COLS 1

#define MATRIX_COL_PINS { F4 }
#define MATRIX_ROW_PINS { F5 }
#define DIODE_DIRECTION COL2ROW

A keyboards/handwired/pytest/has_community/.noci => keyboards/handwired/pytest/has_community/.noci +0 -0
A keyboards/handwired/pytest/has_community/readme.md => keyboards/handwired/pytest/has_community/readme.md +0 -0
A keyboards/handwired/pytest/has_community/rules.mk => keyboards/handwired/pytest/has_community/rules.mk +3 -0
@@ 0,0 1,3 @@
MCU = atmega32u4

LAYOUTS = ortho_1x1

A keyboards/handwired/pytest/has_template/.noci => keyboards/handwired/pytest/has_template/.noci +0 -0
A keyboards/handwired/pytest/has_template/keymaps/.noci => keyboards/handwired/pytest/has_template/keymaps/.noci +0 -0
A keyboards/handwired/pytest/has_template/keymaps/default/keymap.c => keyboards/handwired/pytest/has_template/keymaps/default/keymap.c +5 -0
@@ 0,0 1,5 @@
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    LAYOUT_ortho_1x1(KC_A)
};

A keyboards/handwired/pytest/has_template/keymaps/default_json/keymap.json => keyboards/handwired/pytest/has_template/keymaps/default_json/keymap.json +9 -0
@@ 0,0 1,9 @@
{
    "keyboard": "handwired/pytest/has_template",
    "keymap": "default_json",
    "layout": "LAYOUT_ortho_1x1",
    "layers": [["KC_A"]],
    "author": "qmk",
    "notes": "This file is a keymap.json file for handwired/pytest/has_template",
    "version": 1
}

R keyboards/handwired/onekey/keymaps/pytest_nocpp/keymap.c => keyboards/handwired/pytest/has_template/keymaps/nocpp/keymap.c +0 -0
A keyboards/handwired/pytest/has_template/readme.md => keyboards/handwired/pytest/has_template/readme.md +0 -0
A keyboards/handwired/pytest/has_template/rules.mk => keyboards/handwired/pytest/has_template/rules.mk +1 -0
@@ 0,0 1,1 @@
MCU = atmega32u4

R keyboards/handwired/onekey/pytest/templates/keymap.c => keyboards/handwired/pytest/has_template/templates/keymap.c +0 -0
R keyboards/handwired/onekey/pytest/templates/keymap.json => keyboards/handwired/pytest/has_template/templates/keymap.json +1 -1
@@ 1,3 1,3 @@
{
  "documentation": "This file is a keymap.json file for handwired/onekey/pytest"
  "documentation": "This file is a keymap.json file for handwired/pytest/has_template"
}

A keyboards/handwired/pytest/pytest.h => keyboards/handwired/pytest/pytest.h +11 -0
@@ 0,0 1,11 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_1x1( \
    k00 \
) { \
    { k00 } \
}

#define LAYOUT LAYOUT_ortho_1x1

R lib/python/qmk/tests/onekey_export.json => lib/python/qmk/tests/pytest_export.json +1 -1
@@ 1,5 1,5 @@
{
    "keyboard":"handwired/onekey/pytest",
    "keyboard":"handwired/pytest/basic",
    "keymap":"pytest_unittest",
    "layout":"LAYOUT",
    "layers":[["KC_A"]]

M lib/python/qmk/tests/test_cli_commands.py => lib/python/qmk/tests/test_cli_commands.py +37 -31
@@ 38,17 38,17 @@ def test_cformat():


def test_compile():
    result = check_subcommand('compile', '-kb', 'handwired/onekey/pytest', '-km', 'default', '-n')
    result = check_subcommand('compile', '-kb', 'handwired/pytest/basic', '-km', 'default', '-n')
    check_returncode(result)


def test_compile_json():
    result = check_subcommand('compile', '-kb', 'handwired/onekey/pytest', '-km', 'default_json', '-n')
    result = check_subcommand('compile', '-kb', 'handwired/pytest/basic', '-km', 'default_json', '-n')
    check_returncode(result)


def test_flash():
    result = check_subcommand('flash', '-kb', 'handwired/onekey/pytest', '-km', 'default', '-n')
    result = check_subcommand('flash', '-kb', 'handwired/pytest/basic', '-km', 'default', '-n')
    check_returncode(result)




@@ 92,20 92,26 @@ def test_list_keyboards():
    result = check_subcommand('list-keyboards')
    check_returncode(result)
    # check to see if a known keyboard is returned
    # this will fail if handwired/onekey/pytest is removed
    assert 'handwired/onekey/pytest' in result.stdout
    # this will fail if handwired/pytest/basic is removed
    assert 'handwired/pytest/basic' in result.stdout


def test_list_keymaps():
    result = check_subcommand('list-keymaps', '-kb', 'handwired/onekey/pytest')
    result = check_subcommand('list-keymaps', '-kb', 'handwired/pytest/basic')
    check_returncode(result)
    assert 'default' and 'test' in result.stdout
    assert 'default' and 'default_json' in result.stdout


def test_list_keymaps_long():
    result = check_subcommand('list-keymaps', '--keyboard', 'handwired/onekey/pytest')
    result = check_subcommand('list-keymaps', '--keyboard', 'handwired/pytest/basic')
    check_returncode(result)
    assert 'default' and 'test' in result.stdout
    assert 'default' and 'default_json' in result.stdout


def test_list_keymaps_community():
    result = check_subcommand('list-keymaps', '--keyboard', 'handwired/pytest/has_community')
    check_returncode(result)
    assert 'test' in result.stdout


def test_list_keymaps_kb_only():


@@ 133,40 139,40 @@ def test_list_keymaps_no_keyboard_found():


def test_json2c():
    result = check_subcommand('json2c', 'keyboards/handwired/onekey/keymaps/default_json/keymap.json')
    result = check_subcommand('json2c', 'keyboards/handwired/pytest/has_template/keymaps/default_json/keymap.json')
    check_returncode(result)
    assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT_ortho_1x1(KC_A)};\n\n'


def test_json2c_stdin():
    result = check_subcommand_stdin('keyboards/handwired/onekey/keymaps/default_json/keymap.json', 'json2c', '-')
    result = check_subcommand_stdin('keyboards/handwired/pytest/has_template/keymaps/default_json/keymap.json', 'json2c', '-')
    check_returncode(result)
    assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT_ortho_1x1(KC_A)};\n\n'


def test_info():
    result = check_subcommand('info', '-kb', 'handwired/onekey/pytest')
    result = check_subcommand('info', '-kb', 'handwired/pytest/basic')
    check_returncode(result)
    assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
    assert 'Processor: STM32F303' in result.stdout
    assert 'Keyboard Name: handwired/pytest/basic' in result.stdout
    assert 'Processor: atmega32u4' in result.stdout
    assert 'Layout:' not in result.stdout
    assert 'k0' not in result.stdout


def test_info_keyboard_render():
    result = check_subcommand('info', '-kb', 'handwired/onekey/pytest', '-l')
    result = check_subcommand('info', '-kb', 'handwired/pytest/basic', '-l')
    check_returncode(result)
    assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
    assert 'Processor: STM32F303' in result.stdout
    assert 'Keyboard Name: handwired/pytest/basic' in result.stdout
    assert 'Processor: atmega32u4' in result.stdout
    assert 'Layouts:' in result.stdout
    assert 'k0' in result.stdout


def test_info_keymap_render():
    result = check_subcommand('info', '-kb', 'handwired/onekey/pytest', '-km', 'default_json')
    result = check_subcommand('info', '-kb', 'handwired/pytest/basic', '-km', 'default_json')
    check_returncode(result)
    assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
    assert 'Processor: STM32F303' in result.stdout
    assert 'Keyboard Name: handwired/pytest/basic' in result.stdout
    assert 'Processor: atmega32u4' in result.stdout

    if is_windows:
        assert '|A |' in result.stdout


@@ 175,10 181,10 @@ def test_info_keymap_render():


def test_info_matrix_render():
    result = check_subcommand('info', '-kb', 'handwired/onekey/pytest', '-m')
    result = check_subcommand('info', '-kb', 'handwired/pytest/basic', '-m')
    check_returncode(result)
    assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
    assert 'Processor: STM32F303' in result.stdout
    assert 'Keyboard Name: handwired/pytest/basic' in result.stdout
    assert 'Processor: atmega32u4' in result.stdout
    assert 'LAYOUT_ortho_1x1' in result.stdout

    if is_windows:


@@ 190,27 196,27 @@ def test_info_matrix_render():


def test_c2json():
    result = check_subcommand("c2json", "-kb", "handwired/onekey/pytest", "-km", "default", "keyboards/handwired/onekey/keymaps/default/keymap.c")
    result = check_subcommand("c2json", "-kb", "handwired/pytest/has_template", "-km", "default", "keyboards/handwired/pytest/has_template/keymaps/default/keymap.c")
    check_returncode(result)
    assert result.stdout.strip() == '{"keyboard": "handwired/onekey/pytest", "documentation": "This file is a keymap.json file for handwired/onekey/pytest", "keymap": "default", "layout": "LAYOUT_ortho_1x1", "layers": [["KC_A"]]}'
    assert result.stdout.strip() == '{"keyboard": "handwired/pytest/has_template", "documentation": "This file is a keymap.json file for handwired/pytest/has_template", "keymap": "default", "layout": "LAYOUT_ortho_1x1", "layers": [["KC_A"]]}'


def test_c2json_nocpp():
    result = check_subcommand("c2json", "--no-cpp", "-kb", "handwired/onekey/pytest", "-km", "default", "keyboards/handwired/onekey/keymaps/pytest_nocpp/keymap.c")
    result = check_subcommand("c2json", "--no-cpp", "-kb", "handwired/pytest/has_template", "-km", "default", "keyboards/handwired/pytest/has_template/keymaps/nocpp/keymap.c")
    check_returncode(result)
    assert result.stdout.strip() == '{"keyboard": "handwired/onekey/pytest", "documentation": "This file is a keymap.json file for handwired/onekey/pytest", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_ENTER"]]}'
    assert result.stdout.strip() == '{"keyboard": "handwired/pytest/has_template", "documentation": "This file is a keymap.json file for handwired/pytest/has_template", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_ENTER"]]}'


def test_c2json_stdin():
    result = check_subcommand_stdin("keyboards/handwired/onekey/keymaps/default/keymap.c", "c2json", "-kb", "handwired/onekey/pytest", "-km", "default", "-")
    result = check_subcommand_stdin("keyboards/handwired/pytest/has_template/keymaps/default/keymap.c", "c2json", "-kb", "handwired/pytest/has_template", "-km", "default", "-")
    check_returncode(result)
    assert result.stdout.strip() == '{"keyboard": "handwired/onekey/pytest", "documentation": "This file is a keymap.json file for handwired/onekey/pytest", "keymap": "default", "layout": "LAYOUT_ortho_1x1", "layers": [["KC_A"]]}'
    assert result.stdout.strip() == '{"keyboard": "handwired/pytest/has_template", "documentation": "This file is a keymap.json file for handwired/pytest/has_template", "keymap": "default", "layout": "LAYOUT_ortho_1x1", "layers": [["KC_A"]]}'


def test_c2json_nocpp_stdin():
    result = check_subcommand_stdin("keyboards/handwired/onekey/keymaps/pytest_nocpp/keymap.c", "c2json", "--no-cpp", "-kb", "handwired/onekey/pytest", "-km", "default", "-")
    result = check_subcommand_stdin("keyboards/handwired/pytest/has_template/keymaps/nocpp/keymap.c", "c2json", "--no-cpp", "-kb", "handwired/pytest/has_template", "-km", "default", "-")
    check_returncode(result)
    assert result.stdout.strip() == '{"keyboard": "handwired/onekey/pytest", "documentation": "This file is a keymap.json file for handwired/onekey/pytest", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_ENTER"]]}'
    assert result.stdout.strip() == '{"keyboard": "handwired/pytest/has_template", "documentation": "This file is a keymap.json file for handwired/pytest/has_template", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_ENTER"]]}'


def test_clean():

M lib/python/qmk/tests/test_qmk_keymap.py => lib/python/qmk/tests/test_qmk_keymap.py +16 -16
@@ 1,38 1,38 @@
import qmk.keymap


def test_template_c_onekey_proton_c():
    templ = qmk.keymap.template_c('handwired/onekey/proton_c')
def test_template_c_pytest_basic():
    templ = qmk.keymap.template_c('handwired/pytest/basic')
    assert templ == qmk.keymap.DEFAULT_KEYMAP_C


def test_template_json_onekey_proton_c():
    templ = qmk.keymap.template_json('handwired/onekey/proton_c')
    assert templ == {'keyboard': 'handwired/onekey/proton_c'}
def test_template_json_pytest_basic():
    templ = qmk.keymap.template_json('handwired/pytest/basic')
    assert templ == {'keyboard': 'handwired/pytest/basic'}


def test_template_c_onekey_pytest():
    templ = qmk.keymap.template_c('handwired/onekey/pytest')
def test_template_c_pytest_has_template():
    templ = qmk.keymap.template_c('handwired/pytest/has_template')
    assert templ == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {__KEYMAP_GOES_HERE__};\n'


def test_template_json_onekey_pytest():
    templ = qmk.keymap.template_json('handwired/onekey/pytest')
    assert templ == {'keyboard': 'handwired/onekey/pytest', "documentation": "This file is a keymap.json file for handwired/onekey/pytest"}
def test_template_json_pytest_has_template():
    templ = qmk.keymap.template_json('handwired/pytest/has_template')
    assert templ == {'keyboard': 'handwired/pytest/has_template', "documentation": "This file is a keymap.json file for handwired/pytest/has_template"}


def test_generate_c_onekey_pytest():
    templ = qmk.keymap.generate_c('handwired/onekey/pytest', 'LAYOUT', [['KC_A']])
def test_generate_c_pytest_has_template():
    templ = qmk.keymap.generate_c('handwired/pytest/has_template', 'LAYOUT', [['KC_A']])
    assert templ == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT(KC_A)};\n'


def test_generate_json_onekey_pytest():
    templ = qmk.keymap.generate_json('default', 'handwired/onekey/pytest', 'LAYOUT', [['KC_A']])
    assert templ == {"keyboard": "handwired/onekey/pytest", "documentation": "This file is a keymap.json file for handwired/onekey/pytest", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_A"]]}
def test_generate_json_pytest_has_template():
    templ = qmk.keymap.generate_json('default', 'handwired/pytest/has_template', 'LAYOUT', [['KC_A']])
    assert templ == {"keyboard": "handwired/pytest/has_template", "documentation": "This file is a keymap.json file for handwired/pytest/has_template", "keymap": "default", "layout": "LAYOUT", "layers": [["KC_A"]]}


def test_parse_keymap_c():
    parsed_keymap_c = qmk.keymap.parse_keymap_c('keyboards/handwired/onekey/keymaps/default/keymap.c')
    parsed_keymap_c = qmk.keymap.parse_keymap_c('keyboards/handwired/pytest/basic/keymaps/default/keymap.c')
    assert parsed_keymap_c == {'layers': [{'name': '0', 'layout': 'LAYOUT_ortho_1x1', 'keycodes': ['KC_A']}]}



M lib/python/qmk/tests/test_qmk_path.py => lib/python/qmk/tests/test_qmk_path.py +3 -3
@@ 4,9 4,9 @@ from pathlib import Path
import qmk.path


def test_keymap_onekey_pytest():
    path = qmk.path.keymap('handwired/onekey/pytest')
    assert path.samefile('keyboards/handwired/onekey/keymaps')
def test_keymap_pytest_basic():
    path = qmk.path.keymap('handwired/pytest/basic')
    assert path.samefile('keyboards/handwired/pytest/basic/keymaps')


def test_normpath():