vim-flavor 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. data/features/.nav +3 -0
  2. data/features/caching.feature +16 -17
  3. data/features/command_line/progress_messages.feature +12 -16
  4. data/features/flavorfile/comments.feature +6 -7
  5. data/features/flavorfile/groups.feature +20 -19
  6. data/features/flavorfile/repository_name.feature +18 -19
  7. data/features/flavorfile/version_constraint.feature +16 -15
  8. data/features/step_definitions/bootstrap_script_steps.rb +5 -6
  9. data/features/step_definitions/cli_steps.rb +8 -40
  10. data/features/step_definitions/dependency_steps.rb +4 -2
  11. data/features/step_definitions/directory_steps.rb +4 -21
  12. data/features/step_definitions/file_steps.rb +8 -8
  13. data/features/step_definitions/flavor_steps.rb +22 -14
  14. data/features/step_definitions/flavorfile_steps.rb +12 -7
  15. data/features/step_definitions/lockfile_steps.rb +18 -7
  16. data/features/support/env.rb +19 -22
  17. data/features/testing_vim_plugins/dependencies.feature +12 -15
  18. data/features/testing_vim_plugins/failures.feature +60 -0
  19. data/features/testing_vim_plugins/typical_usage.feature +12 -15
  20. data/features/typical_usage/deploy_to_arbitrary_place.feature +8 -9
  21. data/features/typical_usage/install_vim_plugins.feature +7 -8
  22. data/features/typical_usage/uninstall_vim_plugins.feature +11 -11
  23. data/features/typical_usage/upgrade_vim_plugins.feature +7 -8
  24. data/features/version_lock.feature +7 -8
  25. data/lib/vim-flavor/cli.rb +3 -9
  26. data/lib/vim-flavor/facade.rb +8 -6
  27. data/lib/vim-flavor/flavor.rb +3 -4
  28. data/lib/vim-flavor/version.rb +1 -1
  29. data/vim-flavor.gemspec +1 -0
  30. metadata +20 -2
@@ -12,3 +12,6 @@
12
12
  - caching.feature
13
13
  - resolve_dependencies.feature
14
14
  - testing_vim_plugins:
15
+ - typical_usage.feature
16
+ - dependencies.feature
17
+ - failures.feature
@@ -4,47 +4,46 @@ Feature: Caching
4
4
  I want to cache repositories of plugins which are installed before.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
10
- And flavorfile
7
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
8
+ And a flavorfile with:
11
9
  """ruby
12
10
  flavor '$foo_uri', '~> 1.0'
13
11
  """
14
12
  And I run `vim-flavor install`
15
- And I disable network to the original repository of 'foo'
13
+ And I disable network to the original repository of "foo"
16
14
 
17
15
  Scenario: Install plugins - locked and compatible with new flavorfile
18
- Given I delete '$home/.vim'
19
- When I run `vim-flavor install` again
20
- Then I get lockfile
16
+ Given I remove the directory "home/.vim"
17
+ When I run `vim-flavor install`
18
+ Then it should pass
19
+ And a lockfile is created with:
21
20
  """
22
21
  $foo_uri (1.0.2)
23
22
  """
24
- And I get flavor '$foo_uri' with '1.0.2' in '$home/.vim'
23
+ And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
25
24
 
26
25
  Scenario: Install plugins - locked but incompatible with new flavorfile
27
- Given I edit flavorfile as
26
+ Given I edit the flavorfile as:
28
27
  """ruby
29
28
  flavor '$foo_uri', '~> 2.0'
30
29
  """
31
- When I run `vim-flavor install` but
32
- Then it fails with messages like
30
+ When I run `vim-flavor install`
31
+ Then it should fail with regexp:
33
32
  """
34
33
  fatal: \S+ does not appear to be a git repository
35
34
  """
36
35
 
37
36
  Scenario: Install plugins - not locked
38
- Given I delete lockfile
39
- When I run `vim-flavor install` but
40
- Then it fails with messages like
37
+ Given I delete the lockfile
38
+ When I run `vim-flavor install`
39
+ Then it should fail with regexp:
41
40
  """
42
41
  fatal: \S+ does not appear to be a git repository
43
42
  """
44
43
 
45
44
  Scenario: Upgrading plugins
46
- When I run `vim-flavor upgrade` but
47
- Then it fails with messages like
45
+ When I run `vim-flavor upgrade`
46
+ Then it should fail with regexp:
48
47
  """
49
48
  fatal: \S+ does not appear to be a git repository
50
49
  """
@@ -3,20 +3,16 @@ Feature: Progress messages
3
3
  as a lazy Vim user,
4
4
  I want to see messages about the current progress.
5
5
 
6
- Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
-
10
6
  Scenario: Install Vim plugins successfully
11
- Given a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
12
- And a repository 'bar' with versions '2.0.0 2.0.1 2.0.2'
13
- And flavorfile
7
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
8
+ And a repository "bar" with versions "2.0.0 2.0.1 2.0.2"
9
+ And a flavorfile with:
14
10
  """ruby
15
11
  flavor '$foo_uri', '~> 1.0'
16
12
  flavor '$bar_uri'
17
13
  """
18
14
  When I run `vim-flavor install`
19
- Then it outputs progress as follows
15
+ Then it should pass with template:
20
16
  """
21
17
  Checking versions...
22
18
  Use $bar_uri ... 2.0.2
@@ -28,17 +24,17 @@ Feature: Progress messages
28
24
  """
29
25
 
30
26
  Scenario: Install Vim plugins which are not existing
31
- Given flavorfile
27
+ Given a flavorfile with:
32
28
  """ruby
33
- flavor 'no-such-plugin'
29
+ flavor 'file://$tmp/no-such-plugin'
34
30
  """
35
- When I run `vim-flavor install` but
36
- Then it fails with messages like
31
+ When I run `vim-flavor install`
32
+ Then it should fail with template:
37
33
  """
38
- fatal: '\S+' does not appear to be a git repository
34
+ Checking versions...
35
+ Use file://$tmp/no-such-plugin ... failed
39
36
  """
40
- And it outputs progress as follows
37
+ And it should fail with regexp:
41
38
  """
42
- Checking versions...
43
- Use no-such-plugin ... failed
39
+ fatal: '\S+' does not appear to be a git repository
44
40
  """
@@ -4,12 +4,10 @@ Feature: Comments
4
4
  I want to leave comments in my flavorfile.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'foo' with versions '1.0 1.1 1.2 2.0'
7
+ Given a repository "foo" with versions "1.0 1.1 1.2 2.0"
10
8
 
11
9
  Scenario: Comment out declarations
12
- Given flavorfile
10
+ Given a flavorfile with:
13
11
  """ruby
14
12
  # Since flavorfile is parsed as a Ruby script,
15
13
  # you can comment out arbitrary lines like this.
@@ -17,8 +15,9 @@ Feature: Comments
17
15
  # flavor '$foo_uri', '~> 1.0'
18
16
  """
19
17
  When I run `vim-flavor install`
20
- Then I get lockfile
18
+ Then it should pass
19
+ And a lockfile is created with:
21
20
  """
22
21
  """
23
- And I get a bootstrap script in '$home/.vim'
24
- But I don't have flavor '$foo_uri' in '$home/.vim'
22
+ And a bootstrap script is created in "$home/.vim"
23
+ But a flavor "$foo_uri" is not deployed to "$home/.vim"
@@ -4,45 +4,45 @@ Feature: Groups
4
4
  I want to declare groups of flavors.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'foo' with versions '1.0 1.1 1.2'
10
- And a repository 'bar' with versions '2.0 2.1 2.2'
7
+ Given a repository "foo" with versions "1.0 1.1 1.2"
8
+ And a repository "bar" with versions "2.0 2.1 2.2"
11
9
 
12
10
  Scenario: Install only runtime dependencies
13
- Given flavorfile
11
+ Given a flavorfile with:
14
12
  """ruby
15
13
  flavor '$foo_uri', :group => :runtime
16
14
  flavor '$bar_uri', :group => :development
17
15
  """
18
16
  When I run `vim-flavor install`
19
- Then I get lockfile
17
+ Then it should pass
18
+ And a lockfile is created with:
20
19
  """
21
20
  $bar_uri (2.2)
22
21
  $foo_uri (1.2)
23
22
  """
24
- And I get a bootstrap script in '$home/.vim'
25
- And I get flavor '$foo_uri' with '1.2' in '$home/.vim'
26
- But I don't have flavor '$bar_uri' in '$home/.vim'
23
+ And a bootstrap script is created in "$home/.vim"
24
+ And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
25
+ But a flavor "$bar_uri" is not deployed to "$home/.vim"
27
26
 
28
27
  Scenario: The default group
29
- Given flavorfile
28
+ Given a flavorfile with:
30
29
  """ruby
31
30
  flavor '$foo_uri'
32
31
  flavor '$bar_uri', :group => :development
33
32
  """
34
33
  When I run `vim-flavor install`
35
- Then I get lockfile
34
+ Then it should pass
35
+ And a lockfile is created with:
36
36
  """
37
37
  $bar_uri (2.2)
38
38
  $foo_uri (1.2)
39
39
  """
40
- And I get a bootstrap script in '$home/.vim'
41
- And I get flavor '$foo_uri' with '1.2' in '$home/.vim'
42
- But I don't have flavor '$bar_uri' in '$home/.vim'
40
+ And a bootstrap script is created in "$home/.vim"
41
+ And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
42
+ But a flavor "$bar_uri" is not deployed to "$home/.vim"
43
43
 
44
44
  Scenario: Group a bunch of flavors at once
45
- Given flavorfile
45
+ Given a flavorfile with:
46
46
  """ruby
47
47
  group :development do
48
48
  flavor '$foo_uri'
@@ -50,11 +50,12 @@ Feature: Groups
50
50
  end
51
51
  """
52
52
  When I run `vim-flavor install`
53
- Then I get lockfile
53
+ Then it should pass
54
+ And a lockfile is created with:
54
55
  """
55
56
  $bar_uri (2.2)
56
57
  $foo_uri (1.2)
57
58
  """
58
- And I get a bootstrap script in '$home/.vim'
59
- But I don't have flavor '$foo_uri' in '$home/.vim'
60
- But I don't have flavor '$bar_uri' in '$home/.vim'
59
+ And a bootstrap script is created in "$home/.vim"
60
+ But a flavor "$foo_uri" is not deployed to "$home/.vim"
61
+ But a flavor "$bar_uri" is not deployed to "$home/.vim"
@@ -3,51 +3,50 @@ Feature: Repository name
3
3
  as a lazy Vim user,
4
4
  I also want to use shorthands for frequently used repositories.
5
5
 
6
- Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
-
10
6
  Scenario: Declare using a Vim plugin from www.vim.org
11
- Given a repository 'vim-scripts/vspec' with versions '0.0.4 1.2.0'
12
- And flavorfile
7
+ Given a GitHub repository "vim-scripts/vspec" with versions "0.0.4 1.2.0"
8
+ And a flavorfile with:
13
9
  """ruby
14
10
  # Fetch the plugin from git://github.com/vim-scripts/vspec.git
15
11
  flavor 'vspec', '~> 0.0'
16
12
  """
17
13
  When I run `vim-flavor install`
18
- Then I get lockfile
14
+ Then it should pass
15
+ And a lockfile is created with:
19
16
  """
20
17
  vspec (0.0.4)
21
18
  """
22
- And I get a bootstrap script in '$home/.vim'
23
- And I get flavor 'vspec' with '0.0.4' in '$home/.vim'
19
+ And a bootstrap script is created in "$home/.vim"
20
+ And a flavor "vspec" version "0.0.4" is deployed to "$home/.vim"
24
21
 
25
22
  Scenario: Declare using a Vim plugin from GitHub
26
- Given a repository 'kana/vim-vspec' with versions '0.0.4 1.2.0'
27
- And flavorfile
23
+ Given a GitHub repository "kana/vim-vspec" with versions "0.0.4 1.2.0"
24
+ And a flavorfile with:
28
25
  """ruby
29
26
  # Fetch the plugin from git://github.com/kana/vim-vspec.git
30
27
  flavor 'kana/vim-vspec', '~> 0.0'
31
28
  """
32
29
  When I run `vim-flavor install`
33
- Then I get lockfile
30
+ Then it should pass
31
+ And a lockfile is created with:
34
32
  """
35
33
  kana/vim-vspec (0.0.4)
36
34
  """
37
- And I get a bootstrap script in '$home/.vim'
38
- And I get flavor 'kana/vim-vspec' with '0.0.4' in '$home/.vim'
35
+ And a bootstrap script is created in "$home/.vim"
36
+ And a flavor "kana/vim-vspec" version "0.0.4" is deployed to "$home/.vim"
39
37
 
40
38
  Scenario: Declare using a Vim plugin from an arbitrary URI
41
- Given a repository 'vspec' with versions '0.0.4 1.2.0'
42
- And flavorfile
39
+ Given a local repository "vspec" with versions "0.0.4 1.2.0"
40
+ And a flavorfile with:
43
41
  """ruby
44
42
  # Fetch the plugin from the URI.
45
43
  flavor '$vspec_uri', '~> 0.0'
46
44
  """
47
45
  When I run `vim-flavor install`
48
- Then I get lockfile
46
+ Then it should pass
47
+ And a lockfile is created with:
49
48
  """
50
49
  $vspec_uri (0.0.4)
51
50
  """
52
- And I get a bootstrap script in '$home/.vim'
53
- And I get flavor '$vspec_uri' with '0.0.4' in '$home/.vim'
51
+ And a bootstrap script is created in "$home/.vim"
52
+ And a flavor "$vspec_uri" version "0.0.4" is deployed to "$home/.vim"
@@ -8,45 +8,46 @@ Feature: Version constraint
8
8
  compatibility of plugins. See also [Philosophy](philosophy) for the details.
9
9
 
10
10
  Background:
11
- Given a temporary directory called 'tmp'
12
- And a home directory called 'home' in '$tmp/home'
13
- And a repository 'foo' with versions '1.0 1.1 1.2 2.0'
11
+ Given a repository "foo" with versions "1.0 1.1 1.2 2.0"
14
12
 
15
13
  Scenario: Declare using the latest version of a Vim plugin
16
- Given flavorfile
14
+ Given a flavorfile with:
17
15
  """ruby
18
16
  flavor '$foo_uri'
19
17
  """
20
18
  When I run `vim-flavor install`
21
- Then I get lockfile
19
+ Then it should pass
20
+ And a lockfile is created with:
22
21
  """
23
22
  $foo_uri (2.0)
24
23
  """
25
- And I get a bootstrap script in '$home/.vim'
26
- And I get flavor '$foo_uri' with '2.0' in '$home/.vim'
24
+ And a bootstrap script is created in "$home/.vim"
25
+ And a flavor "$foo_uri" version "2.0" is deployed to "$home/.vim"
27
26
 
28
27
  Scenario: Declare using a Vim plugin not older than a specific version
29
- Given flavorfile
28
+ Given a flavorfile with:
30
29
  """ruby
31
30
  flavor '$foo_uri', '>= 1.1'
32
31
  """
33
32
  When I run `vim-flavor install`
34
- Then I get lockfile
33
+ Then it should pass
34
+ And a lockfile is created with:
35
35
  """
36
36
  $foo_uri (2.0)
37
37
  """
38
- And I get a bootstrap script in '$home/.vim'
39
- And I get flavor '$foo_uri' with '2.0' in '$home/.vim'
38
+ And a bootstrap script is created in "$home/.vim"
39
+ And a flavor "$foo_uri" version "2.0" is deployed to "$home/.vim"
40
40
 
41
41
  Scenario: Declare using the latest and compatible version of a Vim plugin
42
- Given flavorfile
42
+ Given a flavorfile with:
43
43
  """ruby
44
44
  flavor '$foo_uri', '~> 1.0'
45
45
  """
46
46
  When I run `vim-flavor install`
47
- Then I get lockfile
47
+ Then it should pass
48
+ And a lockfile is created with:
48
49
  """
49
50
  $foo_uri (1.2)
50
51
  """
51
- And I get a bootstrap script in '$home/.vim'
52
- And I get flavor '$foo_uri' with '1.2' in '$home/.vim'
52
+ And a bootstrap script is created in "$home/.vim"
53
+ And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
@@ -1,7 +1,6 @@
1
- Then /^I get a bootstrap script in '(.+)'$/ do |virtual_path|
2
- File.should exist(
3
- expand(virtual_path).
4
- to_flavors_path.
5
- to_bootstrap_path
6
- )
1
+ Then /^a bootstrap script is created in "(.+)"$/ do |v_vimfiles_path|
2
+ p = expand(v_vimfiles_path).to_flavors_path.to_bootstrap_path
3
+ steps %Q{
4
+ Then a file named "#{p}" should exist
5
+ }
7
6
  end
@@ -1,43 +1,11 @@
1
- When /^I run `vim-flavor(.*)`(?: again)?(?:,? (but))?$/ do |args, mode|
2
- begin
3
- original_home = ENV['HOME']
4
- ENV['HOME'] = expand('$home')
5
- Dir.chdir(expand('$tmp')) do
6
- original_stdout = $stdout
7
- begin
8
- $stdout = @output = StringIO.new()
9
- Vim::Flavor::CLI.start(args.strip().split(/\s+/).map {|a| expand(a)})
10
- rescue RuntimeError => e
11
- @last_error = e
12
- ensure
13
- $stdout = original_stdout
14
- end
15
- if mode == 'but'
16
- raise RuntimeError, 'Command succeeded unexpectedly' if not @last_error
17
- else
18
- raise @last_error if @last_error
19
- end
20
- end
21
- ensure
22
- ENV['HOME'] = original_home
23
- end
1
+ Then 'it should pass' do
2
+ steps %Q{
3
+ Then it should pass with:
4
+ """
5
+ """
6
+ }
24
7
  end
25
8
 
26
- Then /^it succeeds$/ do
27
- @last_error.should be_nil
28
- end
29
-
30
- Then /^it fails with messages like$/ do |pattern|
31
- @last_error.should_not be_nil
32
- @last_error.message.should match Regexp.new(pattern.strip().gsub(/\s+/, '\s+'))
33
- end
34
-
35
- Then 'it outputs progress as follows' do |text|
36
- # For some reason, Cucumber drops the last newline from every docstring...
37
- @output.string.should include expand(text + "\n")
38
- end
39
-
40
- Then 'it outputs progress like' do |pattern|
41
- # For some reason, Cucumber drops the last newline from every docstring...
42
- @output.string.should match Regexp.new(expand(pattern + "\n"))
9
+ Then /^it should (pass|fail) with template:$/ do |pass_fail, template|
10
+ self.__send__("assert_#{pass_fail}ing_with", expand(template))
43
11
  end
@@ -1,3 +1,5 @@
1
- Then /^it stores a dependency '(.*)' in '(.*)'$/ do |repo_name, vdir|
2
- Dir.should exist expand("#{vdir}/#{repo_name.zap}")
1
+ Then /^a dependency "(.*)" is stored in "(.*)"$/ do |repo_name, deps_path|
2
+ steps %Q{
3
+ Then a directory named "#{deps_path}/#{repo_name.zap}" should exist
4
+ }
3
5
  end
@@ -1,23 +1,6 @@
1
- require 'tmpdir'
2
-
3
- Given /^a temporary directory called '(.+)'$/ do |name|
4
- path = Dir.mktmpdir
5
- at_exit do
6
- delete_path path
1
+ When /^I remove the directory "([^"]*)"$/ do |dir_name|
2
+ in_current_dir do
3
+ # FileUtils#rmdir cannot delete non-empty directories.
4
+ FileUtils.rm_r(dir_name)
7
5
  end
8
- variable_table[name] = path
9
- end
10
-
11
- Given /^a home directory called '(.+)' in '(.+)'$/ do |name, virtual_path|
12
- actual_path = expand(virtual_path)
13
- Dir.mkdir actual_path, 0700
14
- variable_table[name] = actual_path
15
- end
16
-
17
- Given /^I don't have a directory called '(.+)'$/ do |virtual_path|
18
- Dir.should_not exist(expand(virtual_path))
19
- end
20
-
21
- Given /^I delete '(.+)'$/ do |virtual_path|
22
- delete_path expand(virtual_path)
23
6
  end
@@ -1,9 +1,9 @@
1
- Given /^a file called '(.*)'$/ do |virtual_path, content|
2
- create_file expand(virtual_path), expand(content)
3
- end
4
-
5
- Given /^an executable called '(.*)'$/ do |virtual_path, content|
6
- path = expand(virtual_path)
7
- create_file path, expand(content)
8
- File.chmod(0755, path)
1
+ Given /^an executable file named "(.*)" with:$/ do |file_path, content|
2
+ steps %Q{
3
+ Given a file named "#{file_path}" with:
4
+ """
5
+ #{content}
6
+ """
7
+ }
8
+ File.chmod(0755, File.join([current_dir, file_path]))
9
9
  end
@@ -1,4 +1,4 @@
1
- Given /^a repository '(.+)' with versions '(.+)'$/ do |basename, versions|
1
+ Given /^a (?:(?:GitHub|local) )?repository "(.+)" with versions "(.+)"$/ do |basename, versions|
2
2
  repository_path = make_repo_path(basename)
3
3
  doc_name = basename.split('/').last.sub(/^vim-/, '')
4
4
  variable_table["#{basename}_uri"] = make_repo_uri(basename)
@@ -19,28 +19,36 @@ Given /^a repository '(.+)' with versions '(.+)'$/ do |basename, versions|
19
19
  END
20
20
  end
21
21
 
22
- Given /^a repository '(.+)' from offline cache$/ do |repo_name|
23
- repository_path = make_repo_path(repo_name)
22
+ Given /^a repository "(.+)" from offline cache$/ do |repo_name|
23
+ repository_path = make_repo_path(repo_name).sub(expand('$tmp/'), '')
24
24
  sh <<-"END"
25
25
  {
26
- git clone 'vendor/#{repo_name}' '#{repository_path}'
26
+ git clone 'vendor/#{repo_name}' '#{current_dir}/#{repository_path}'
27
27
  } >/dev/null
28
28
  END
29
29
  end
30
30
 
31
- Given /^I disable network to the original repository of '(.+)'$/ do |basename|
32
- delete_path make_repo_path(basename)
31
+ Given /^I disable network to the original repository of "(.+)"$/ do |basename|
32
+ steps %Q{
33
+ Given I remove the directory "#{make_repo_path(basename)}"
34
+ }
33
35
  end
34
36
 
35
- Then /^I get flavor '(.+)' with '(.+)' in '(.+)'$/ do |v_repo_name, version, virtual_path|
36
- flavor_path = make_flavor_path(expand(virtual_path), expand(v_repo_name))
37
+ Then /^a flavor "(.+)" version "(.+)" is deployed to "(.+)"$/ do |v_repo_name, version, v_vimfiles_path|
38
+ flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
37
39
  basename = expand(v_repo_name).split('/').last.sub(/^vim-/, '')
38
- File.open("#{flavor_path}/doc/#{basename}.txt", 'r').read().should ==
39
- "*#{basename}* #{version}\n"
40
- File.should exist("#{flavor_path}/doc/tags")
40
+ steps %Q{
41
+ Then the file "#{flavor_path}/doc/#{basename}.txt" should contain:
42
+ """
43
+ *#{basename}* #{version}
44
+ """
45
+ Then a file named "#{flavor_path}/doc/tags" should exist
46
+ }
41
47
  end
42
48
 
43
- Then /^I don't have flavor '(.+)' in '(.+)'$/ do |v_repo_name, virtual_path|
44
- flavor_path = make_flavor_path(expand(virtual_path), expand(v_repo_name))
45
- Dir.should_not exist(flavor_path)
49
+ Then /^a flavor "(.+)" is not deployed to "(.+)"$/ do |v_repo_name, v_vimfiles_path|
50
+ flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
51
+ steps %Q{
52
+ Then a directory named "#{flavor_path}" should not exist
53
+ }
46
54
  end
@@ -1,12 +1,17 @@
1
- Given 'flavorfile' do |content|
2
- create_file expand('$tmp').to_flavorfile_path, expand(content)
1
+ Given 'a flavorfile with:' do |content|
2
+ steps %Q{
3
+ Given a file named "#{'.'.to_flavorfile_path}" with:
4
+ """
5
+ #{expand(content)}
6
+ """
7
+ }
3
8
  end
4
9
 
5
- When 'I edit flavorfile as' do |content|
10
+ When 'I edit the flavorfile as:' do |content|
6
11
  steps %Q{
7
- Given flavorfile
8
- """
9
- #{content}
10
- """
12
+ Given a flavorfile with:
13
+ """
14
+ #{content}
15
+ """
11
16
  }
12
17
  end
@@ -1,13 +1,24 @@
1
- Given 'lockfile' do |content|
2
- create_file expand('$tmp').to_lockfile_path, expand(content)
1
+ Given 'a lockfile with:' do |content|
2
+ steps %Q{
3
+ Given a file named "#{'.'.to_lockfile_path}" with:
4
+ """
5
+ #{expand(content)}
6
+ """
7
+ }
3
8
  end
4
9
 
5
- Given /^I delete lockfile$/ do
6
- delete_path expand('$tmp').to_lockfile_path
10
+ Given 'I delete the lockfile' do
11
+ steps %Q{
12
+ Given I remove the file "#{'.'.to_lockfile_path}"
13
+ }
7
14
  end
8
15
 
9
- Then 'I get lockfile' do |content|
16
+ Then /^(?:a|the) lockfile is (?:created|updated) with:$/ do |content|
10
17
  # For some reason, Cucumber drops the last newline from every docstring...
11
- File.open(expand('$tmp').to_lockfile_path, 'r').read().should ==
12
- (content == '' ? '' : expand(content) + "\n")
18
+ steps %Q{
19
+ Then the file "#{'.'.to_lockfile_path}" should contain exactly:
20
+ """
21
+ #{content == '' ? '' : expand(content) + "\n"}
22
+ """
23
+ }
13
24
  end
@@ -1,29 +1,11 @@
1
+ require 'aruba/api'
2
+ require 'aruba/cucumber'
1
3
  require 'fileutils'
2
4
  require 'vim-flavor'
3
5
 
4
6
  class FakeUserEnvironment
5
7
  include Vim::Flavor::ShellUtility
6
8
 
7
- def initialize()
8
- env = self
9
- Vim::Flavor::Flavor.instance_eval do
10
- @github_repo_uri = lambda {|user, repo|
11
- "file://#{env.expand('$tmp')}/repos/#{user}/#{repo}"
12
- }
13
- end
14
- end
15
-
16
- def create_file path, content
17
- FileUtils.mkdir_p(File.dirname(path))
18
- File.open(path, 'w') do |f|
19
- f.write(content)
20
- end
21
- end
22
-
23
- def delete_path path
24
- FileUtils.remove_entry_secure(path)
25
- end
26
-
27
9
  def expand(virtual_path)
28
10
  virtual_path.gsub(/\$([a-z_]+)/) {
29
11
  variable_table[$1]
@@ -47,8 +29,23 @@ class FakeUserEnvironment
47
29
  end
48
30
  end
49
31
 
32
+ Before do
33
+ variable_table['tmp'] = File.absolute_path(current_dir)
34
+
35
+ steps %Q{
36
+ Given a directory named "home"
37
+ }
38
+ variable_table['home'] = File.absolute_path(File.join([current_dir, 'home']))
39
+ end
40
+
41
+ Aruba.configure do |config|
42
+ config.before_cmd do |cmd|
43
+ set_env 'HOME', variable_table['home']
44
+ set_env 'VIM_FLAVOR_GITHUB_URI_PREFIX', expand('file://$tmp/repos/')
45
+ set_env 'VIM_FLAVOR_GITHUB_URI_SUFFIX', ''
46
+ end
47
+ end
48
+
50
49
  World do
51
50
  FakeUserEnvironment.new
52
51
  end
53
-
54
- ENV['THOR_DEBUG'] = '1' # To raise an exception as is.
@@ -4,18 +4,16 @@ Feature: Dependencies
4
4
  I want to hide details to do proper testing.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'kana/vim-vspec' from offline cache
10
- And a repository 'kana/vim-textobj-user' from offline cache
7
+ Given a repository "kana/vim-vspec" from offline cache
8
+ And a repository "kana/vim-textobj-user" from offline cache
11
9
 
12
10
  Scenario: Testing a Vim plugin with dependencies
13
- Given flavorfile
14
- """
11
+ Given a flavorfile with:
12
+ """ruby
15
13
  flavor 'kana/vim-textobj-user', '~> 0.3'
16
14
  """
17
- And a file called '$tmp/plugin/textobj/date.vim'
18
- """
15
+ And a file named "plugin/textobj/date.vim" with:
16
+ """vim
19
17
  call textobj#user#plugin('date', {
20
18
  \ '-': {
21
19
  \ '*pattern*': '\v<\d{4}-\d{2}-\d{2}>',
@@ -23,8 +21,8 @@ Feature: Dependencies
23
21
  \ }
24
22
  \ })
25
23
  """
26
- And a file called '$tmp/t/basics.vim'
27
- """
24
+ And a file named "t/basics.vim" with:
25
+ """vim
28
26
  " Tests are written with vim-vspec.
29
27
  runtime! plugin/textobj/date.vim
30
28
  describe 'Text object: date'
@@ -34,8 +32,7 @@ Feature: Dependencies
34
32
  end
35
33
  """
36
34
  When I run `vim-flavor test`
37
- Then it succeeds
38
- And it outputs progress like
35
+ Then it should pass with regexp:
39
36
  """
40
37
  -------- Preparing dependencies
41
38
  Checking versions...
@@ -52,10 +49,10 @@ Feature: Dependencies
52
49
  Files=1, Tests=1, \d+ wallclock secs .*
53
50
  Result: PASS
54
51
  """
55
- And I get lockfile
52
+ And a lockfile is created with:
56
53
  """
57
54
  kana/vim-textobj-user (0.3.12)
58
55
  kana/vim-vspec (1.1.0)
59
56
  """
60
- And it stores a dependency 'kana/vim-vspec' in '$tmp/.vim-flavor/deps'
61
- And it stores a dependency 'kana/vim-textobj-user' in '$tmp/.vim-flavor/deps'
57
+ And a dependency "kana/vim-vspec" is stored in ".vim-flavor/deps"
58
+ And a dependency "kana/vim-textobj-user" is stored in ".vim-flavor/deps"
@@ -0,0 +1,60 @@
1
+ Feature: Failures
2
+ In order to automate varisous processes about testing Vim plugins,
3
+ As a lazy Vim user,
4
+ I want to get a proper exit status according to test results.
5
+
6
+ Background:
7
+ Given a repository "kana/vim-vspec" from offline cache
8
+
9
+ Scenario: Failed test cases
10
+ Given a flavorfile with:
11
+ """ruby
12
+ # No dependency
13
+ """
14
+ And a file named "plugin/foo.vim" with:
15
+ """vim
16
+ let g:foo = 3
17
+ """
18
+ And a file named "t/basics.vim" with:
19
+ """vim
20
+ runtime! plugin/foo.vim
21
+ describe 'g:foo'
22
+ it 'is equal to 5'
23
+ Expect g:foo == 5
24
+ end
25
+ end
26
+ """
27
+ When I run `vim-flavor test`
28
+ Then it should fail with regexp:
29
+ """
30
+ -------- Preparing dependencies
31
+ Checking versions...
32
+ Use kana/vim-vspec ... 1.1.0
33
+ Deploying plugins...
34
+ kana/vim-vspec 1.1.0 ... done
35
+ -------- Testing a Vim plugin
36
+ Files=0, Tests=0, 0 wallclock secs (.*)
37
+ Result: NOTESTS
38
+ t/basics.vim ..\s
39
+ not ok 1 - g:foo is equal to 5\r
40
+ # Expected g:foo == 5\r
41
+ # Actual value: 3\r
42
+ # Expected value: 5\r
43
+ Failed 1/1 subtests
44
+
45
+ Test Summary Report
46
+ -------------------
47
+ t/basics.vim \(Wstat: 0 Tests: 1 Failed: 1\)
48
+ Failed test: 1
49
+ Files=1, Tests=1, 0 wallclock secs (.*)
50
+ Result: FAIL
51
+ """
52
+ And the output should not contain:
53
+ """
54
+ :in `test':
55
+ """
56
+ And a lockfile with:
57
+ """
58
+ kana/vim-vspec (1.1.0)
59
+ """
60
+ And a dependency "kana/vim-vspec" is stored in ".vim-flavor/deps"
@@ -4,21 +4,19 @@ Feature: Typical usage
4
4
  I want to hide details to do proper testing.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'kana/vim-vspec' from offline cache
7
+ Given a repository "kana/vim-vspec" from offline cache
10
8
 
11
9
  Scenario: Testing a Vim plugin without any dependency
12
- Given flavorfile
13
- """
10
+ Given a flavorfile with:
11
+ """ruby
14
12
  # No dependency
15
13
  """
16
- And a file called '$tmp/plugin/foo.vim'
17
- """
14
+ And a file named "plugin/foo.vim" with:
15
+ """vim
18
16
  let g:foo = 3
19
17
  """
20
- And a file called '$tmp/t/basics.vim'
21
- """
18
+ And a file named "t/basics.vim" with:
19
+ """vim
22
20
  " Tests are written with vim-vspec.
23
21
  runtime! plugin/foo.vim
24
22
  describe 'g:foo'
@@ -27,8 +25,8 @@ Feature: Typical usage
27
25
  end
28
26
  end
29
27
  """
30
- And an executable called '$tmp/t/sh.t'
31
- """
28
+ And an executable file named "t/sh.t" with:
29
+ """bash
32
30
  #!/bin/bash
33
31
  # It is also possible to write tests with arbitrary tools.
34
32
  # Such tests must output results in Test Anything Protocol.
@@ -36,8 +34,7 @@ Feature: Typical usage
36
34
  echo '1..1'
37
35
  """
38
36
  When I run `vim-flavor test`
39
- Then it succeeds
40
- And it outputs progress like
37
+ Then it should pass with regexp:
41
38
  """
42
39
  -------- Preparing dependencies
43
40
  Checking versions...
@@ -54,8 +51,8 @@ Feature: Typical usage
54
51
  Files=1, Tests=1, \d+ wallclock secs .*
55
52
  Result: PASS
56
53
  """
57
- And I get lockfile
54
+ And a lockfile is created with:
58
55
  """
59
56
  kana/vim-vspec (1.1.0)
60
57
  """
61
- And it stores a dependency 'kana/vim-vspec' in '$tmp/.vim-flavor/deps'
58
+ And a dependency "kana/vim-vspec" is stored in ".vim-flavor/deps"
@@ -5,20 +5,19 @@ Feature: Deploy Vim plugins to a non-standard directory
5
5
  I want to deploy Vim plugins to arbitrary place.
6
6
 
7
7
  Background:
8
- Given a temporary directory called 'tmp'
9
- And a home directory called 'home' in '$tmp/home'
10
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
8
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
11
9
 
12
10
  Scenario: Install to specified vimfiles path which does not exist
13
- Given flavorfile
11
+ Given a flavorfile with:
14
12
  """ruby
15
13
  flavor '$foo_uri'
16
14
  """
17
- And I don't have a directory called '$tmp/my-vimfiles'
18
- When I run `vim-flavor install --vimfiles-path=$tmp/my-vimfiles`
19
- Then I get lockfile
15
+ And a directory named "my-vimfiles" should not exist
16
+ When I run `vim-flavor install --vimfiles-path=my-vimfiles`
17
+ Then it should pass
18
+ And a lockfile is created with:
20
19
  """
21
20
  $foo_uri (1.0.2)
22
21
  """
23
- And I get a bootstrap script in '$tmp/my-vimfiles'
24
- And I get flavor '$foo_uri' with '1.0.2' in '$tmp/my-vimfiles'
22
+ And a bootstrap script is created in "my-vimfiles"
23
+ And a flavor "$foo_uri" version "1.0.2" is deployed to "my-vimfiles"
@@ -5,22 +5,21 @@ Feature: Install Vim plugins
5
5
  I want to use a declarative way to start using new Vim plugins.
6
6
 
7
7
  Background:
8
- Given a temporary directory called 'tmp'
9
- And a home directory called 'home' in '$tmp/home'
10
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
8
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
11
9
 
12
10
  Scenario: Install from scratch
13
- Given flavorfile
11
+ Given a flavorfile with:
14
12
  """ruby
15
13
  """
16
- When I edit flavorfile as
14
+ When I edit the flavorfile as:
17
15
  """ruby
18
16
  flavor '$foo_uri'
19
17
  """
20
18
  And I run `vim-flavor install`
21
- Then I get lockfile
19
+ Then it should pass
20
+ And a lockfile is created with:
22
21
  """
23
22
  $foo_uri (1.0.2)
24
23
  """
25
- And I get a bootstrap script in '$home/.vim'
26
- And I get flavor '$foo_uri' with '1.0.2' in '$home/.vim'
24
+ And a bootstrap script is created in "$home/.vim"
25
+ And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
@@ -5,27 +5,27 @@ Feature: Uninstall Vim plugins
5
5
  I want to use a declarative way to delete Vim plugins from my configuration.
6
6
 
7
7
  Background:
8
- Given a temporary directory called 'tmp'
9
- And a home directory called 'home' in '$tmp/home'
10
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
11
- And a repository 'bar' with versions '2.0.0 2.0.1 2.0.2'
8
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
9
+ And a repository "bar" with versions "2.0.0 2.0.1 2.0.2"
12
10
 
13
11
  Scenario: Install after deleting some flavors in flavorfile
14
- Given flavorfile
12
+ Given a flavorfile with:
15
13
  """ruby
16
14
  flavor '$foo_uri'
17
15
  flavor '$bar_uri'
18
16
  """
19
17
  And I run `vim-flavor install`
20
- When I edit flavorfile as
18
+ And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
19
+ When I edit the flavorfile as:
21
20
  """ruby
22
21
  flavor '$bar_uri'
23
22
  """
24
- And I run `vim-flavor install` again
25
- Then I get lockfile
23
+ And I run `vim-flavor install`
24
+ Then it should pass
25
+ And a lockfile is created with:
26
26
  """
27
27
  $bar_uri (2.0.2)
28
28
  """
29
- And I get a bootstrap script in '$home/.vim'
30
- And I get flavor '$bar_uri' with '2.0.2' in '$home/.vim'
31
- But I don't have flavor '$foo_uri' in '$home/.vim'
29
+ And a bootstrap script is created in "$home/.vim"
30
+ And a flavor "$bar_uri" version "2.0.2" is deployed to "$home/.vim"
31
+ But a flavor "$foo_uri" is not deployed to "$home/.vim"
@@ -5,23 +5,22 @@ Feature: Upgrade Vim plugins
5
5
  I want to use a declarative way to upgrade my favorite Vim plugins.
6
6
 
7
7
  Background:
8
- Given a temporary directory called 'tmp'
9
- And a home directory called 'home' in '$tmp/home'
10
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
8
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
11
9
 
12
10
  Scenario: Upgrade with lockfile
13
- Given flavorfile
11
+ Given a flavorfile with:
14
12
  """ruby
15
13
  flavor '$foo_uri'
16
14
  """
17
- And lockfile
15
+ And a lockfile with:
18
16
  """
19
17
  $foo_uri (1.0.0)
20
18
  """
21
19
  When I run `vim-flavor upgrade`
22
- Then I get lockfile
20
+ Then it should pass
21
+ And the lockfile is updated with:
23
22
  """
24
23
  $foo_uri (1.0.2)
25
24
  """
26
- And I get a bootstrap script in '$home/.vim'
27
- And I get flavor '$foo_uri' with '1.0.2' in '$home/.vim'
25
+ And a bootstrap script is created in "$home/.vim"
26
+ And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
@@ -4,23 +4,22 @@ Feature: Version lock
4
4
  I want to keep versions of Vim plugins which I installed before.
5
5
 
6
6
  Background:
7
- Given a temporary directory called 'tmp'
8
- And a home directory called 'home' in '$tmp/home'
9
- And a repository 'foo' with versions '1.0.0 1.0.1 1.0.2'
7
+ Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
10
8
 
11
9
  Scenario: Install with lockfile
12
- Given flavorfile
10
+ Given a flavorfile with:
13
11
  """ruby
14
12
  flavor '$foo_uri'
15
13
  """
16
- And lockfile
14
+ And a lockfile with:
17
15
  """
18
16
  $foo_uri (1.0.0)
19
17
  """
20
18
  When I run `vim-flavor install`
21
- Then I get lockfile
19
+ Then it should pass
20
+ And the lockfile is updated with:
22
21
  """
23
22
  $foo_uri (1.0.0)
24
23
  """
25
- And I get a bootstrap script in '$home/.vim'
26
- And I get flavor '$foo_uri' with '1.0.0' in '$home/.vim'
24
+ And a bootstrap script is created in "$home/.vim"
25
+ And a flavor "$foo_uri" version "1.0.0" is deployed to "$home/.vim"
@@ -34,16 +34,10 @@ module Vim
34
34
  def default_vimfiles_path
35
35
  ENV['HOME'].to_vimfiles_path
36
36
  end
37
+ end
37
38
 
38
- def normalize_groups(s)
39
- groups =
40
- (s || '').
41
- split(/,/).
42
- map(&:strip).
43
- reject(&:empty?).
44
- map(&:to_sym)
45
- 0 < groups.length ? groups : nil
46
- end
39
+ def self.exit_on_failure?
40
+ true
47
41
  end
48
42
  end
49
43
  end
@@ -24,7 +24,7 @@ module Vim
24
24
 
25
25
  deploy_flavors(
26
26
  lockfile.flavors.select {|f| f.group == :runtime},
27
- vimfiles_path.to_flavors_path
27
+ File.absolute_path(vimfiles_path).to_flavors_path
28
28
  )
29
29
 
30
30
  trace "Completed.\n"
@@ -69,19 +69,21 @@ module Vim
69
69
  def deploy_flavors(flavors, flavors_path)
70
70
  trace "Deploying plugins...\n"
71
71
 
72
+ a_flavors_path = File.absolute_path(flavors_path)
73
+
72
74
  FileUtils.rm_rf(
73
- [flavors_path],
75
+ [a_flavors_path],
74
76
  :secure => true
75
77
  )
76
78
 
77
- create_vim_script_for_bootstrap(flavors_path)
79
+ create_vim_script_for_bootstrap(a_flavors_path)
78
80
 
79
81
  flavors.
80
82
  before_each {|f| trace " #{f.repo_name} #{f.locked_version} ..."}.
81
83
  after_each {|f| trace " done\n"}.
82
84
  on_failure {trace " failed\n"}.
83
85
  each do |f|
84
- f.deploy(flavors_path)
86
+ f.deploy(a_flavors_path)
85
87
  end
86
88
  end
87
89
 
@@ -150,12 +152,12 @@ module Vim
150
152
  plugin_paths = lockfile.flavors.map {|f|
151
153
  "#{deps_path}/#{f.repo_name.zap}"
152
154
  }
153
- # FIXME: Testing messages are not outputted in real time.
154
- print sh %Q{
155
+ succeeded = system %Q{
155
156
  prove --ext '.t' #{prove_options} &&
156
157
  prove --ext '.vim' #{prove_options} \
157
158
  --exec '#{vspec} #{Dir.getwd()} #{plugin_paths.join(' ')}'
158
159
  }
160
+ exit(1) unless succeeded
159
161
  end
160
162
  end
161
163
  end
@@ -27,10 +27,9 @@ module Vim
27
27
  end
28
28
 
29
29
  def self.github_repo_uri(user, repo)
30
- @github_repo_uri ||= lambda {|user, repo|
31
- "git://github.com/#{user}/#{repo}.git"
32
- }
33
- @github_repo_uri.call(user, repo)
30
+ p = (ENV['VIM_FLAVOR_GITHUB_URI_PREFIX'] ||= 'git://github.com/')
31
+ s = (ENV['VIM_FLAVOR_GITHUB_URI_SUFFIX'] ||= '.git')
32
+ "#{p}#{user}/#{repo}#{s}"
34
33
  end
35
34
 
36
35
  def repo_uri
@@ -1,5 +1,5 @@
1
1
  module Vim
2
2
  module Flavor
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end
5
5
  end
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.add_dependency('parslet', '~> 1.0')
19
19
  gem.add_dependency('thor', '~> 0.14')
20
20
 
21
+ gem.add_development_dependency('aruba', '~> 0.5')
21
22
  gem.add_development_dependency('cucumber', '~> 1.2')
22
23
  gem.add_development_dependency('rspec', '~> 2.8')
23
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vim-flavor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-04 00:00:00.000000000 Z
12
+ date: 2012-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0.14'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.5'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: cucumber
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +132,7 @@ files:
116
132
  - features/support/env.rb
117
133
  - features/testing_vim_plugins/README.md
118
134
  - features/testing_vim_plugins/dependencies.feature
135
+ - features/testing_vim_plugins/failures.feature
119
136
  - features/testing_vim_plugins/typical_usage.feature
120
137
  - features/typical_usage/README.md
121
138
  - features/typical_usage/deploy_to_arbitrary_place.feature
@@ -193,6 +210,7 @@ test_files:
193
210
  - features/support/env.rb
194
211
  - features/testing_vim_plugins/README.md
195
212
  - features/testing_vim_plugins/dependencies.feature
213
+ - features/testing_vim_plugins/failures.feature
196
214
  - features/testing_vim_plugins/typical_usage.feature
197
215
  - features/typical_usage/README.md
198
216
  - features/typical_usage/deploy_to_arbitrary_place.feature