123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- import pytest
- import checkpackagelib.test_util as util
- import checkpackagelib.lib_config as m
- AttributesOrder = [
- ('good example',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'default y\n'
- 'depends on BR2_USE_BAR # runtime\n'
- 'select BR2_PACKAGE_BAZ\n'
- 'help\n'
- '\t help text\n',
- []),
- ('depends before default',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'depends on BR2_USE_BAR\n'
- 'default y\n',
- [['any:4: attributes order: type, default, depends on, select, help (url#_config_files)',
- 'default y\n']]),
- ('select after help',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'help\n'
- '\t help text\n'
- 'select BR2_PACKAGE_BAZ\n',
- [['any:5: attributes order: type, default, depends on, select, help (url#_config_files)',
- 'select BR2_PACKAGE_BAZ\n']]),
- ('string',
- 'any',
- 'config BR2_PACKAGE_FOO_PLUGINS\n'
- 'string "foo plugins"\n'
- 'default "all"\n',
- []),
- ('ignore tabs',
- 'any',
- 'config\tBR2_PACKAGE_FOO_PLUGINS\n'
- 'default\t"all"\n'
- 'string\t"foo plugins"\n',
- [['any:3: attributes order: type, default, depends on, select, help (url#_config_files)',
- 'string\t"foo plugins"\n']]),
- ('choice',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'if BR2_PACKAGE_FOO\n'
- '\n'
- 'choice\n'
- 'prompt "type of foo"\n'
- 'default BR2_PACKAGE_FOO_STRING\n'
- '\n'
- 'config BR2_PACKAGE_FOO_NONE\n'
- 'bool "none"\n'
- '\n'
- 'config BR2_PACKAGE_FOO_STRING\n'
- 'bool "string"\n'
- '\n'
- 'endchoice\n'
- '\n'
- 'endif\n'
- '\n',
- []),
- ('type after default',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'if BR2_PACKAGE_FOO\n'
- '\n'
- 'choice\n'
- 'default BR2_PACKAGE_FOO_STRING\n'
- 'prompt "type of foo"\n',
- [['any:7: attributes order: type, default, depends on, select, help (url#_config_files)',
- 'prompt "type of foo"\n']]),
- ('menu',
- 'any',
- 'menuconfig BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'help\n'
- '\t help text\n'
- '\t help text\n'
- '\n'
- 'if BR2_PACKAGE_FOO\n'
- '\n'
- 'menu "foo plugins"\n'
- 'config BR2_PACKAGE_FOO_COUNTER\n'
- 'bool "counter"\n'
- '\n'
- 'endmenu\n'
- '\n'
- 'endif\n',
- []),
- ]
- @pytest.mark.parametrize('testname,filename,string,expected', AttributesOrder)
- def test_AttributesOrder(testname, filename, string, expected):
- warnings = util.check_file(m.AttributesOrder, filename, string)
- assert warnings == expected
- CommentsMenusPackagesOrder = [
- ('top menu (good)',
- 'package/Config.in',
- 'menu "Target packages"\n'
- 'source "package/busybox/Config.in"\n'
- 'source "package/skeleton/Config.in"\n',
- []),
- ('top menu (bad)',
- 'package/Config.in',
- 'source "package/skeleton/Config.in"\n'
- 'source "package/busybox/Config.in"\n',
- [['package/Config.in:2: Packages in: The top level menu,\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: busybox',
- 'source "package/busybox/Config.in"\n']]),
- ('menu (bad)',
- 'package/Config.in',
- 'menu "Target packages"\n'
- 'source "package/skeleton/Config.in"\n'
- 'source "package/busybox/Config.in"\n',
- [['package/Config.in:3: Packages in: menu "Target packages",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: busybox',
- 'source "package/busybox/Config.in"\n']]),
- ('underscore (good)',
- 'package/Config.in.host',
- 'menu "Hardware handling"\n'
- 'menu "Firmware"\n'
- 'endmenu\n'
- 'source "package/usb_modeswitch/Config.in"\n'
- 'source "package/usbmount/Config.in"\n',
- []),
- ('underscore (bad)',
- 'package/Config.in.host',
- 'menu "Hardware handling"\n'
- 'menu "Firmware"\n'
- 'endmenu\n'
- 'source "package/usbmount/Config.in"\n'
- 'source "package/usb_modeswitch/Config.in"\n',
- [['package/Config.in.host:5: Packages in: menu "Hardware handling",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: usb_modeswitch',
- 'source "package/usb_modeswitch/Config.in"\n']]),
- ('ignore other files',
- 'any other file',
- 'menu "Hardware handling"\n'
- 'source "package/bbb/Config.in"\n'
- 'source "package/aaa/Config.in"\n',
- []),
- ('dash (bad)',
- 'package/Config.in',
- 'menu "packages"\n'
- 'source "package/a_a/Config.in"\n'
- 'source "package/a-a/Config.in"\n'
- 'source "package/a1a/Config.in"\n'
- 'source "package/aAa/Config.in"\n'
- 'source "package/aaa/Config.in"\n',
- [['package/Config.in:3: Packages in: menu "packages",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: a-a',
- 'source "package/a-a/Config.in"\n']]),
- ('underscore (bad)',
- 'package/Config.in',
- 'menu "packages"\n'
- 'source "package/a-a/Config.in"\n'
- 'source "package/a1a/Config.in"\n'
- 'source "package/a_a/Config.in"\n'
- 'source "package/aAa/Config.in"\n'
- 'source "package/aaa/Config.in"\n',
- [['package/Config.in:4: Packages in: menu "packages",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: a_a',
- 'source "package/a_a/Config.in"\n']]),
- ('digit (bad)',
- 'package/Config.in',
- 'menu "packages"\n'
- 'source "package/a-a/Config.in"\n'
- 'source "package/a_a/Config.in"\n'
- 'source "package/aAa/Config.in"\n'
- 'source "package/a1a/Config.in"\n'
- 'source "package/aaa/Config.in"\n',
- [['package/Config.in:5: Packages in: menu "packages",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: a1a',
- 'source "package/a1a/Config.in"\n']]),
- ('capitals (bad)',
- 'package/Config.in',
- 'menu "packages"\n'
- 'source "package/a-a/Config.in"\n'
- 'source "package/a_a/Config.in"\n'
- 'source "package/a1a/Config.in"\n'
- 'source "package/aaa/Config.in"\n'
- 'source "package/aAa/Config.in"\n',
- [['package/Config.in:6: Packages in: menu "packages",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: aAa',
- 'source "package/aAa/Config.in"\n']]),
- ('digits, capitals, underscore (good)',
- 'package/Config.in',
- 'menu "packages"\n'
- 'source "package/a-a/Config.in"\n'
- 'source "package/a_a/Config.in"\n'
- 'source "package/a1a/Config.in"\n'
- 'source "package/aAa/Config.in"\n'
- 'source "package/aaa/Config.in"\n',
- []),
- ('conditional menu (good)',
- 'package/Config.in',
- 'menu "Other"\n'
- 'source "package/linux-pam/Config.in"\n'
- 'if BR2_PACKAGE_LINUX_PAM\n'
- 'comment "linux-pam plugins"\n'
- 'source "package/libpam-radius-auth/Config.in"\n'
- 'source "package/libpam-tacplus/Config.in"\n'
- 'endif\n'
- 'source "package/liquid-dsp/Config.in"\n',
- []),
- ('conditional menu (bad)',
- 'package/Config.in',
- 'menu "Other"\n'
- 'source "package/linux-pam/Config.in"\n'
- 'if BR2_PACKAGE_LINUX_PAM\n'
- 'comment "linux-pam plugins"\n'
- 'source "package/libpam-tacplus/Config.in"\n'
- 'source "package/libpam-radius-auth/Config.in"\n'
- 'endif\n'
- 'source "package/liquid-dsp/Config.in"\n',
- [['package/Config.in:6: Packages in: comment "linux-pam plugins",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: libpam-radius-auth',
- 'source "package/libpam-radius-auth/Config.in"\n']]),
- ('no conditional (bad)',
- 'package/Config.in',
- 'menu "Other"\n'
- 'source "package/linux-pam/Config.in"\n'
- 'source "package/libpam-radius-auth/Config.in"\n'
- 'source "package/libpam-tacplus/Config.in"\n'
- 'source "package/liquid-dsp/Config.in"\n',
- [['package/Config.in:3: Packages in: menu "Other",\n'
- ' are not alphabetically ordered;\n'
- " correct order: '-', '_', digits, capitals, lowercase;\n"
- ' first incorrect package: libpam-radius-auth',
- 'source "package/libpam-radius-auth/Config.in"\n']]),
- ]
- @pytest.mark.parametrize('testname,filename,string,expected', CommentsMenusPackagesOrder)
- def test_CommentsMenusPackagesOrder(testname, filename, string, expected):
- warnings = util.check_file(m.CommentsMenusPackagesOrder, filename, string)
- assert warnings == expected
- HelpText = [
- ('single line',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'default y\n'
- 'depends on BR2_USE_BAR # runtime\n'
- 'select BR2_PACKAGE_BAZ\n'
- 'help\n'
- '\t help text\n',
- []),
- ('larger than 72',
- 'any',
- 'help\n'
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12\n'
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 123\n'
- '\t help text\n',
- [['any:3: help text: <tab><2 spaces><62 chars> (url#writing-rules-config-in)',
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 123\n',
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12']]),
- ('long url at beginning of line',
- 'any',
- 'help\n'
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12\n'
- '\t http://url.that.is.longer.than.seventy.two.characthers/folder_name\n'
- '\t https://url.that.is.longer.than.seventy.two.characthers/folder_name\n'
- '\t git://url.that.is.longer.than.seventy.two.characthers/folder_name\n',
- []),
- ('long url not at beginning of line',
- 'any',
- 'help\n'
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12\n'
- '\t refer to http://url.that.is.longer.than.seventy.two.characthers/folder_name\n'
- '\n'
- '\t http://url.that.is.longer.than.seventy.two.characthers/folder_name\n',
- [['any:3: help text: <tab><2 spaces><62 chars> (url#writing-rules-config-in)',
- '\t refer to http://url.that.is.longer.than.seventy.two.characthers/folder_name\n',
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12']]),
- ('allow beautified items',
- 'any',
- 'help\n'
- '\t 123456789 123456789 123456789 123456789 123456789 123456789 12\n'
- '\t summary:\n'
- '\t - enable that config\n'
- '\t - built it\n',
- []),
- ]
- @pytest.mark.parametrize('testname,filename,string,expected', HelpText)
- def test_HelpText(testname, filename, string, expected):
- warnings = util.check_file(m.HelpText, filename, string)
- assert warnings == expected
- Indent = [
- ('good example',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- '\tbool "foo"\n'
- '\tdefault y\n'
- '\tdepends on BR2_TOOLCHAIN_HAS_THREADS\n'
- '\tdepends on BR2_INSTALL_LIBSTDCPP\n'
- '# very useful comment\n'
- '\tselect BR2_PACKAGE_BAZ\n'
- '\thelp\n'
- '\t help text\n'
- '\n'
- 'comment "foo needs toolchain w/ C++, threads"\n'
- '\tdepends on !BR2_INSTALL_LIBSTDCPP || \\\n'
- '\t\t!BR2_TOOLCHAIN_HAS_THREADS\n'
- '\n'
- 'source "package/foo/bar/Config.in"\n',
- []),
- ('spaces',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- ' bool "foo"\n',
- [['any:2: should be indented with one tab (url#_config_files)',
- ' bool "foo"\n']]),
- ('without indent',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'default y\n',
- [['any:2: should be indented with one tab (url#_config_files)',
- 'default y\n']]),
- ('too much tabs',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- '\t\tdepends on BR2_TOOLCHAIN_HAS_THREADS\n',
- [['any:2: should be indented with one tab (url#_config_files)',
- '\t\tdepends on BR2_TOOLCHAIN_HAS_THREADS\n']]),
- ('help',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- ' help\n',
- [['any:2: should be indented with one tab (url#_config_files)',
- ' help\n']]),
- ('continuation line',
- 'any',
- 'comment "foo needs toolchain w/ C++, threads"\n'
- '\tdepends on !BR2_INSTALL_LIBSTDCPP || \\\n'
- ' !BR2_TOOLCHAIN_HAS_THREADS\n',
- [['any:3: continuation line should be indented using tabs',
- ' !BR2_TOOLCHAIN_HAS_THREADS\n']]),
- ('comment with tabs',
- 'any',
- '\tcomment "foo needs toolchain w/ C++, threads"\n',
- [['any:1: should not be indented',
- '\tcomment "foo needs toolchain w/ C++, threads"\n']]),
- ('comment with spaces',
- 'any',
- ' comment "foo needs toolchain w/ C++, threads"\n',
- [['any:1: should not be indented',
- ' comment "foo needs toolchain w/ C++, threads"\n']]),
- ]
- @pytest.mark.parametrize('testname,filename,string,expected', Indent)
- def test_Indent(testname, filename, string, expected):
- warnings = util.check_file(m.Indent, filename, string)
- assert warnings == expected
- RedefinedConfig = [
- ('no redefinition',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'config BR2_PACKAGE_FOO_BAR\n'
- 'bool "foo"\n',
- []),
- ('no conditional',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'config BR2_PACKAGE_BAR\n'
- 'bool "bar"\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n',
- [['any:5: config BR2_PACKAGE_FOO redeclared (previous line: 1)',
- 'config BR2_PACKAGE_FOO\n']]),
- ('three times',
- 'any',
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n',
- [['any:3: config BR2_PACKAGE_FOO redeclared (previous line: 1)',
- 'config BR2_PACKAGE_FOO\n'],
- ['any:5: config BR2_PACKAGE_FOO redeclared (previous line: 1)',
- 'config BR2_PACKAGE_FOO\n']]),
- ('same conditional',
- 'any',
- 'if BR2_PACKAGE_BAZ\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'config BR2_PACKAGE_BAR\n'
- 'bool "bar"\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'endif\n',
- [['any:6: config BR2_PACKAGE_FOO redeclared (previous line: 2)',
- 'config BR2_PACKAGE_FOO\n']]),
- ('equivalent conditional',
- 'any',
- 'if BR2_PACKAGE_BAZ\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'endif\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'if BR2_PACKAGE_BAZ\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'endif\n',
- [['any:8: config BR2_PACKAGE_FOO redeclared (previous line: 2)',
- 'config BR2_PACKAGE_FOO\n']]),
- ('not equivalent conditional',
- 'any',
- 'if BR2_PACKAGE_BAZ\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'endif\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'if !BR2_PACKAGE_BAZ\n'
- 'config BR2_PACKAGE_FOO\n'
- 'bool "foo"\n'
- 'endif\n',
- []),
- ]
- @pytest.mark.parametrize('testname,filename,string,expected', RedefinedConfig)
- def test_RedefinedConfig(testname, filename, string, expected):
- warnings = util.check_file(m.RedefinedConfig, filename, string)
- assert warnings == expected
|