[Notes] [Git][BuildStream/buildstream][mandatory_suffix] 2 commits: Added tests for .bst suffix and completions



Title: GitLab

Phillip Smyth pushed to branch mandatory_suffix at BuildStream / buildstream

Commits:

8 changed files:

Changes:

  • NEWS
    ... ... @@ -2,6 +2,10 @@
    2 2
     buildstream 1.3.1
    
    3 3
     =================
    
    4 4
     
    
    5
    +  o All elements must now be suffixed with `.bst`
    
    6
    +    Attempting to use an element that does not have the `.bst` extension,
    
    7
    +    will result in a warning.
    
    8
    +
    
    5 9
       o BREAKING CHANGE: The 'manual' element lost its default 'MAKEFLAGS' and 'V'
    
    6 10
         environment variables. There is already a 'make' element with the same
    
    7 11
         variables. Note that this is a breaking change, it will require users to
    

  • buildstream/_frontend/cli.py
    ... ... @@ -111,7 +111,7 @@ def complete_target(args, incomplete):
    111 111
     
    
    112 112
         complete_list = []
    
    113 113
         for p in complete_path("File", incomplete, base_directory=base_directory):
    
    114
    -        if p.endswith(".bst ") or p.endswith("/") or p.endswith(".conf "):
    
    114
    +        if p.endswith(".bst ") or p.endswith("/"):
    
    115 115
                 complete_list.append(p)
    
    116 116
         return complete_list
    
    117 117
     
    

  • tests/completions/completions.py
    ... ... @@ -66,6 +66,13 @@ PROJECT_ELEMENTS = [
    66 66
         "target.bst"
    
    67 67
     ]
    
    68 68
     
    
    69
    +INVALID_ELEMENTS = [
    
    70
    +    "target.foo"
    
    71
    +    "target.bst.bar"
    
    72
    +]
    
    73
    +
    
    74
    +MIXED_ELEMENTS = PROJECT_ELEMENTS + INVALID_ELEMENTS
    
    75
    +
    
    69 76
     
    
    70 77
     def assert_completion(cli, cmd, word_idx, expected, cwd=None):
    
    71 78
         result = cli.run(cwd=cwd, env={
    
    ... ... @@ -85,6 +92,24 @@ def assert_completion(cli, cmd, word_idx, expected, cwd=None):
    85 92
         assert words == expected
    
    86 93
     
    
    87 94
     
    
    95
    +def assert_completion_failed(cli, cmd, word_idx, expected, cwd=None):
    
    96
    +    result = cli.run(cwd=cwd, env={
    
    97
    +        '_BST_COMPLETION': 'complete',
    
    98
    +        'COMP_WORDS': cmd,
    
    99
    +        'COMP_CWORD': str(word_idx)
    
    100
    +    })
    
    101
    +    words = []
    
    102
    +    if result.output:
    
    103
    +        words = result.output.splitlines()
    
    104
    +
    
    105
    +    # The order is meaningless, bash will
    
    106
    +    # take the results and order it by its
    
    107
    +    # own little heuristics
    
    108
    +    words = sorted(words)
    
    109
    +    expected = sorted(expected)
    
    110
    +    assert words != expected
    
    111
    +
    
    112
    +
    
    88 113
     @pytest.mark.parametrize("cmd,word_idx,expected", [
    
    89 114
         ('bst', 0, []),
    
    90 115
         ('bst ', 1, MAIN_COMMANDS),
    
    ... ... @@ -172,6 +197,26 @@ def test_option_directory(datafiles, cli, cmd, word_idx, expected, subdir):
    172 197
     
    
    173 198
     @pytest.mark.datafiles(DATA_DIR)
    
    174 199
     @pytest.mark.parametrize("project,cmd,word_idx,expected,subdir", [
    
    200
    +    # When running in the project directory
    
    201
    +    ('no-element-path', 'bst show ', 2,
    
    202
    +     [e + ' ' for e in PROJECT_ELEMENTS] + ['files/'], None),
    
    203
    +    ('no-element-path', 'bst build com', 2,
    
    204
    +     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], None),
    
    205
    +
    
    206
    +    # When running from the files subdir
    
    207
    +    ('no-element-path', 'bst show ', 2,
    
    208
    +     [e + ' ' for e in PROJECT_ELEMENTS] + ['files/'], 'files'),
    
    209
    +    ('no-element-path', 'bst build com', 2,
    
    210
    +     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], 'files'),
    
    211
    +
    
    212
    +    # When passing the project directory
    
    213
    +    ('no-element-path', 'bst --directory ../ show ', 4,
    
    214
    +     [e + ' ' for e in PROJECT_ELEMENTS] + ['files/'], 'files'),
    
    215
    +    ('no-element-path', 'bst --directory ../ show f', 4, ['files/'], 'files'),
    
    216
    +    ('no-element-path', 'bst --directory ../ show files/', 4, ['files/bin-files/', 'files/dev-files/'], 'files'),
    
    217
    +    ('no-element-path', 'bst --directory ../ build com', 4,
    
    218
    +     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], 'files'),
    
    219
    +
    
    175 220
         # When running in the project directory
    
    176 221
         ('project', 'bst show ', 2, [e + ' ' for e in PROJECT_ELEMENTS], None),
    
    177 222
         ('project', 'bst build com', 2,
    
    ... ... @@ -191,26 +236,6 @@ def test_option_directory(datafiles, cli, cmd, word_idx, expected, subdir):
    191 236
         ('project', 'bst --directory ../ checkout t ', 4, ['target.bst '], 'files'),
    
    192 237
         ('project', 'bst --directory ../ checkout target.bst ', 5, ['bin-files/', 'dev-files/'], 'files'),
    
    193 238
     
    
    194
    -    # When running in the project directory
    
    195
    -    ('no-element-path', 'bst show ', 2,
    
    196
    -     [e + ' ' for e in (PROJECT_ELEMENTS + ['project.conf'])] + ['files/'], None),
    
    197
    -    ('no-element-path', 'bst build com', 2,
    
    198
    -     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], None),
    
    199
    -
    
    200
    -    # When running from the files subdir
    
    201
    -    ('no-element-path', 'bst show ', 2,
    
    202
    -     [e + ' ' for e in (PROJECT_ELEMENTS + ['project.conf'])] + ['files/'], 'files'),
    
    203
    -    ('no-element-path', 'bst build com', 2,
    
    204
    -     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], 'files'),
    
    205
    -
    
    206
    -    # When passing the project directory
    
    207
    -    ('no-element-path', 'bst --directory ../ show ', 4,
    
    208
    -     [e + ' ' for e in (PROJECT_ELEMENTS + ['project.conf'])] + ['files/'], 'files'),
    
    209
    -    ('no-element-path', 'bst --directory ../ show f', 4, ['files/'], 'files'),
    
    210
    -    ('no-element-path', 'bst --directory ../ show files/', 4, ['files/bin-files/', 'files/dev-files/'], 'files'),
    
    211
    -    ('no-element-path', 'bst --directory ../ build com', 4,
    
    212
    -     ['compose-all.bst ', 'compose-include-bin.bst ', 'compose-exclude-dev.bst '], 'files'),
    
    213
    -
    
    214 239
         # Also try multi arguments together
    
    215 240
         ('no-element-path', 'bst --directory ../ checkout t ', 4, ['target.bst '], 'files'),
    
    216 241
         ('no-element-path', 'bst --directory ../ checkout target.bst ', 5, ['bin-files/', 'dev-files/'], 'files'),
    
    ... ... @@ -226,6 +251,19 @@ def test_argument_element(datafiles, cli, project, cmd, word_idx, expected, subd
    226 251
         assert_completion(cli, cmd, word_idx, expected, cwd=cwd)
    
    227 252
     
    
    228 253
     
    
    254
    +@pytest.mark.datafiles(DATA_DIR)
    
    255
    +@pytest.mark.parametrize("project,cmd,word_idx,expected,subdir", [
    
    256
    +
    
    257
    +    # When element has invalid suffix
    
    258
    +    ('project', 'bst --directory ../ show ', 4, [e + ' ' for e in MIXED_ELEMENTS], 'files')
    
    259
    +])
    
    260
    +def test_argument_element_invalid(datafiles, cli, project, cmd, word_idx, expected, subdir):
    
    261
    +    cwd = os.path.join(str(datafiles), project)
    
    262
    +    if subdir:
    
    263
    +        cwd = os.path.join(cwd, subdir)
    
    264
    +    assert_completion_failed(cli, cmd, word_idx, expected, cwd=cwd)
    
    265
    +
    
    266
    +
    
    229 267
     @pytest.mark.parametrize("cmd,word_idx,expected", [
    
    230 268
         ('bst he', 1, ['help ']),
    
    231 269
         ('bst help ', 2, MAIN_COMMANDS),
    

  • tests/frontend/buildcheckout.py
    ... ... @@ -60,6 +60,31 @@ def test_build_checkout(datafiles, cli, strict, hardlinks):
    60 60
         assert os.path.exists(filename)
    
    61 61
     
    
    62 62
     
    
    63
    +@pytest.mark.datafiles(DATA_DIR)
    
    64
    +@pytest.mark.parametrize("strict,hardlinks", [
    
    65
    +    ("non-strict", "hardlinks"),
    
    66
    +])
    
    67
    +def test_build_invalid_suffix(datafiles, cli, strict, hardlinks):
    
    68
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    69
    +    checkout = os.path.join(cli.directory, 'checkout')
    
    70
    +
    
    71
    +    result = cli.run(project=project, args=strict_args(['build', 'target.foo'], strict))
    
    72
    +    result.assert_main_error(ErrorDomain.LOAD, "bad-element-suffix")
    
    73
    +
    
    74
    +
    
    75
    +@pytest.mark.datafiles(DATA_DIR)
    
    76
    +@pytest.mark.parametrize("strict,hardlinks", [
    
    77
    +    ("non-strict", "hardlinks"),
    
    78
    +])
    
    79
    +def test_build_invalid_suffix_dep(datafiles, cli, strict, hardlinks):
    
    80
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    81
    +    checkout = os.path.join(cli.directory, 'checkout')
    
    82
    +
    
    83
    +    # target2.bst depends on an element called target.foo
    
    84
    +    result = cli.run(project=project, args=strict_args(['build', 'target2.bst'], strict))
    
    85
    +    result.assert_main_error(ErrorDomain.LOAD, "bad-element-suffix")
    
    86
    +
    
    87
    +
    
    63 88
     @pytest.mark.datafiles(DATA_DIR)
    
    64 89
     @pytest.mark.parametrize("deps", [("run"), ("none")])
    
    65 90
     def test_build_checkout_deps(datafiles, cli, deps):
    

  • tests/frontend/project/elements/target.foo
    1
    +kind: stack
    
    2
    +description: |
    
    3
    +
    
    4
    +  Main stack target for the bst build test

  • tests/frontend/project/elements/target2.bst
    1
    +kind: stack
    
    2
    +description: |
    
    3
    +
    
    4
    +  Main stack target for the bst build test
    
    5
    +
    
    6
    +depends:
    
    7
    +- target.foo

  • tests/frontend/project/project.conf
    ... ... @@ -2,3 +2,6 @@
    2 2
     name: test
    
    3 3
     
    
    4 4
     element-path: elements
    
    5
    +
    
    6
    +fatal-warnings:
    
    7
    +- bad-element-suffix

  • tests/integration/source-determinism.py
    ... ... @@ -33,7 +33,7 @@ def create_test_directory(*path, mode=0o644):
    33 33
     @pytest.mark.skipif(IS_LINUX and not HAVE_BWRAP, reason='Only available with bubblewrap on Linux')
    
    34 34
     def test_deterministic_source_umask(cli, tmpdir, datafiles, kind, integration_cache):
    
    35 35
         project = str(datafiles)
    
    36
    -    element_name = 'list'
    
    36
    +    element_name = 'list.bst'
    
    37 37
         element_path = os.path.join(project, 'elements', element_name)
    
    38 38
         repodir = os.path.join(str(tmpdir), 'repo')
    
    39 39
         sourcedir = os.path.join(project, 'source')
    
    ... ... @@ -108,7 +108,7 @@ def test_deterministic_source_local(cli, tmpdir, datafiles, integration_cache):
    108 108
         """Only user rights should be considered for local source.
    
    109 109
         """
    
    110 110
         project = str(datafiles)
    
    111
    -    element_name = 'test'
    
    111
    +    element_name = 'test.bst'
    
    112 112
         element_path = os.path.join(project, 'elements', element_name)
    
    113 113
         sourcedir = os.path.join(project, 'source')
    
    114 114
     
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]