vim-flavor 2.2.1 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/ci.yml +35 -0
  4. data/.gitmodules +2 -2
  5. data/.ruby-version +1 -0
  6. data/CHANGELOG.md +169 -0
  7. data/README.md +133 -45
  8. data/Rakefile +11 -0
  9. data/config/cucumber.yml +1 -0
  10. data/features/.nav +2 -1
  11. data/features/backward_compatibilities/flavorfile.feature +166 -0
  12. data/features/backward_compatibilities/lockfile.feature +22 -0
  13. data/features/branches/changing_tracking_branches.feature +0 -3
  14. data/features/branches/detect_incompatible_declarations.feature +0 -2
  15. data/features/branches/install.feature +0 -2
  16. data/features/branches/update.feature +0 -1
  17. data/features/caching/deployment.feature +1 -0
  18. data/features/flavorfile/README.md +1 -1
  19. data/features/flavorfile/comments.feature +0 -1
  20. data/features/flavorfile/groups.feature +0 -3
  21. data/features/flavorfile/repository_name.feature +2 -5
  22. data/features/flavorfile/version_constraint.feature +3 -7
  23. data/features/install_vim_flavor.md +6 -12
  24. data/features/news.md +1 -0
  25. data/features/philosophy.md +4 -4
  26. data/features/resolve_dependencies/README.md +4 -3
  27. data/features/resolve_dependencies/basics.feature +0 -4
  28. data/features/resolve_dependencies/upgrade_outdated_dependencies.feature +0 -2
  29. data/features/resolve_dependencies/version_conflict.feature +0 -2
  30. data/features/step_definitions/cli_steps.rb +6 -1
  31. data/features/step_definitions/dependency_steps.rb +2 -1
  32. data/features/step_definitions/directory_steps.rb +1 -1
  33. data/features/step_definitions/file_steps.rb +2 -2
  34. data/features/step_definitions/flavor_steps.rb +25 -9
  35. data/features/step_definitions/flavorfile_steps.rb +10 -1
  36. data/features/step_definitions/lockfile_steps.rb +14 -5
  37. data/features/support/env.rb +22 -12
  38. data/features/testing_vim_plugins/README.md +7 -6
  39. data/features/testing_vim_plugins/dependencies.feature +14 -15
  40. data/features/testing_vim_plugins/failures.feature +6 -6
  41. data/features/testing_vim_plugins/specifying_test_scripts.feature +12 -12
  42. data/features/testing_vim_plugins/typical_usage.feature +33 -10
  43. data/features/typical_usage/README.md +7 -7
  44. data/features/typical_usage/deploy_to_arbitrary_place.feature +0 -1
  45. data/features/typical_usage/install_vim_plugins.feature +0 -1
  46. data/features/typical_usage/uninstall_vim_plugins.feature +0 -1
  47. data/features/typical_usage/update_vim_plugins.feature +0 -3
  48. data/features/uninstall_vim_flavor.md +3 -4
  49. data/features/version_lock.feature +0 -1
  50. data/features/version_tag_format.feature +0 -4
  51. data/lib/vim-flavor/cli.rb +2 -2
  52. data/lib/vim-flavor/console.rb +22 -0
  53. data/lib/vim-flavor/env.rb +1 -1
  54. data/lib/vim-flavor/facade.rb +18 -49
  55. data/lib/vim-flavor/flavor.rb +1 -1
  56. data/lib/vim-flavor/flavorfile.rb +24 -1
  57. data/lib/vim-flavor/lockfile.rb +15 -0
  58. data/lib/vim-flavor/shellutility.rb +2 -1
  59. data/lib/vim-flavor/stringextension.rb +3 -11
  60. data/lib/vim-flavor/version.rb +1 -1
  61. data/lib/vim-flavor.rb +1 -1
  62. data/spec/branchversion_spec.rb +4 -4
  63. data/spec/stringextension_spec.rb +33 -2
  64. data/vim-flavor.gemspec +8 -5
  65. metadata +70 -26
  66. data/.travis.yml +0 -7
  67. data/features/news.md +0 -55
  68. data/features/step_definitions/bootstrap_script_steps.rb +0 -6
  69. data/spec/facade_spec.rb +0 -57
@@ -24,7 +24,6 @@ Feature: Changing tracking branches
24
24
  $foo_uri $foo_rev_102 at master ... done
25
25
  Completed.
26
26
  """
27
- And a bootstrap script is created in "$home/.vim"
28
27
  And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
29
28
 
30
29
  Scenario: Use a branch instead of a version
@@ -49,7 +48,6 @@ Feature: Changing tracking branches
49
48
  """
50
49
  $foo_uri ($foo_rev_102 at master)
51
50
  """
52
- And a bootstrap script is created in "$home/.vim"
53
51
  And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
54
52
 
55
53
  Scenario: Use a version instead of a branch
@@ -74,5 +72,4 @@ Feature: Changing tracking branches
74
72
  """
75
73
  $foo_uri (1.0.2)
76
74
  """
77
- And a bootstrap script is created in "$home/.vim"
78
75
  And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
@@ -32,7 +32,6 @@ Feature: Detect incompatible declarations
32
32
  $L_uri branch: experimental is required by $B_uri
33
33
  Please resolve the conflict.
34
34
  """
35
- And a bootstrap script is not created in "$home/.vim"
36
35
  And a flavor "$A_uri" is not deployed to "$home/.vim"
37
36
  And a flavor "$B_uri" is not deployed to "$home/.vim"
38
37
  And a flavor "$L_uri" is not deployed to "$home/.vim"
@@ -66,7 +65,6 @@ Feature: Detect incompatible declarations
66
65
  $L_uri ~> 0.2 is required by $B_uri
67
66
  Please resolve the conflict.
68
67
  """
69
- And a bootstrap script is not created in "$home/.vim"
70
68
  And a flavor "$A_uri" is not deployed to "$home/.vim"
71
69
  And a flavor "$B_uri" is not deployed to "$home/.vim"
72
70
  And a flavor "$L_uri" is not deployed to "$home/.vim"
@@ -24,7 +24,6 @@ Feature: Install Vim plugins with specific branches
24
24
  """
25
25
  $foo_uri ($foo_rev_102 at master)
26
26
  """
27
- And a bootstrap script is created in "$home/.vim"
28
27
  And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
29
28
 
30
29
  Scenario: Install a plugin according to a lockfile
@@ -47,5 +46,4 @@ Feature: Install Vim plugins with specific branches
47
46
  $foo_uri $foo_rev_102 at master ... skipped (already deployed)
48
47
  Completed.
49
48
  """
50
- And a bootstrap script is created in "$home/.vim"
51
49
  And a flavor "$foo_uri" version "1.0.2" is deployed to "$home/.vim"
@@ -26,5 +26,4 @@ Feature: Update Vim plugins with specific branches
26
26
  $foo_uri $foo_rev_103 at master ... done
27
27
  Completed.
28
28
  """
29
- And a bootstrap script is created in "$home/.vim"
30
29
  And a flavor "$foo_uri" version "1.0.3" is deployed to "$home/.vim"
@@ -9,6 +9,7 @@ Feature: Deployment
9
9
  """ruby
10
10
  flavor '$foo_uri', '~> 1.0'
11
11
  """
12
+
12
13
  Scenario: Deploy plugins which are not deployed yet
13
14
  Given a flavor "$foo_uri" is not deployed to "$home/.vim"
14
15
  When I run `vim-flavor install`
@@ -1,6 +1,6 @@
1
1
  Flavorfile is a DSL to declare which versions of Vim plugins to use.
2
2
  Whenever `vim-flavor` is invoked to manage Vim plugins,
3
- `vim-flavor` reads a file `VimFlavor` in the current working directory,
3
+ `vim-flavor` reads a file `Flavorfile` in the current working directory,
4
4
  and evaluates it as a flavorfile.
5
5
 
6
6
 
@@ -19,5 +19,4 @@ Feature: Comments
19
19
  And a lockfile is created with:
20
20
  """
21
21
  """
22
- And a bootstrap script is created in "$home/.vim"
23
22
  But a flavor "$foo_uri" is not deployed to "$home/.vim"
@@ -19,7 +19,6 @@ Feature: Groups
19
19
  """
20
20
  $foo_uri (1.2)
21
21
  """
22
- And a bootstrap script is created in "$home/.vim"
23
22
  And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
24
23
  But a flavor "$bar_uri" is not deployed to "$home/.vim"
25
24
 
@@ -35,7 +34,6 @@ Feature: Groups
35
34
  """
36
35
  $foo_uri (1.2)
37
36
  """
38
- And a bootstrap script is created in "$home/.vim"
39
37
  And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
40
38
  But a flavor "$bar_uri" is not deployed to "$home/.vim"
41
39
 
@@ -52,6 +50,5 @@ Feature: Groups
52
50
  And a lockfile is created with:
53
51
  """
54
52
  """
55
- And a bootstrap script is created in "$home/.vim"
56
53
  But a flavor "$foo_uri" is not deployed to "$home/.vim"
57
54
  But a flavor "$bar_uri" is not deployed to "$home/.vim"
@@ -7,7 +7,7 @@ Feature: Repository name
7
7
  Given a GitHub repository "vim-scripts/vspec" with versions "0.0.4 1.2.0"
8
8
  And a flavorfile with:
9
9
  """ruby
10
- # Fetch the plugin from git://github.com/vim-scripts/vspec.git
10
+ # Fetch the plugin from https://github.com/vim-scripts/vspec.git
11
11
  flavor 'vspec', '~> 0.0'
12
12
  """
13
13
  When I run `vim-flavor install`
@@ -16,14 +16,13 @@ Feature: Repository name
16
16
  """
17
17
  vspec (0.0.4)
18
18
  """
19
- And a bootstrap script is created in "$home/.vim"
20
19
  And a flavor "vspec" version "0.0.4" is deployed to "$home/.vim"
21
20
 
22
21
  Scenario: Declare using a Vim plugin from GitHub
23
22
  Given a GitHub repository "kana/vim-vspec" with versions "0.0.4 1.2.0"
24
23
  And a flavorfile with:
25
24
  """ruby
26
- # Fetch the plugin from git://github.com/kana/vim-vspec.git
25
+ # Fetch the plugin from https://github.com/kana/vim-vspec.git
27
26
  flavor 'kana/vim-vspec', '~> 0.0'
28
27
  """
29
28
  When I run `vim-flavor install`
@@ -32,7 +31,6 @@ Feature: Repository name
32
31
  """
33
32
  kana/vim-vspec (0.0.4)
34
33
  """
35
- And a bootstrap script is created in "$home/.vim"
36
34
  And a flavor "kana/vim-vspec" version "0.0.4" is deployed to "$home/.vim"
37
35
 
38
36
  Scenario: Declare using a Vim plugin from an arbitrary URI
@@ -48,5 +46,4 @@ Feature: Repository name
48
46
  """
49
47
  $vspec_uri (0.0.4)
50
48
  """
51
- And a bootstrap script is created in "$home/.vim"
52
49
  And a flavor "$vspec_uri" version "0.0.4" is deployed to "$home/.vim"
@@ -3,10 +3,9 @@ Feature: Version constraint
3
3
  as a lazy Vim user,
4
4
  I want to declare desirable versions of Vim plugins.
5
5
 
6
- Note that vim-flavor assumes that plugins follow [the versioning policies of
7
- RubyGems](http://docs.rubygems.org/read/chapter/7#page26), to determine
8
- compatibility of plugins. See also [Philosophy](../philosophy) for the
9
- details.
6
+ Note that vim-flavor assumes that plugins follow [Semantic Versioning
7
+ 2.0.0](https://semver.org/spec/v2.0.0.html), to determine compatibility of
8
+ plugins. See also [Philosophy](../philosophy) for the details.
10
9
 
11
10
  Background:
12
11
  Given a repository "foo" with versions "1.0 1.1 1.2 2.0"
@@ -22,7 +21,6 @@ Feature: Version constraint
22
21
  """
23
22
  $foo_uri (2.0)
24
23
  """
25
- And a bootstrap script is created in "$home/.vim"
26
24
  And a flavor "$foo_uri" version "2.0" is deployed to "$home/.vim"
27
25
 
28
26
  Scenario: Declare using a Vim plugin not older than a specific version
@@ -36,7 +34,6 @@ Feature: Version constraint
36
34
  """
37
35
  $foo_uri (2.0)
38
36
  """
39
- And a bootstrap script is created in "$home/.vim"
40
37
  And a flavor "$foo_uri" version "2.0" is deployed to "$home/.vim"
41
38
 
42
39
  Scenario: Declare using the latest and compatible version of a Vim plugin
@@ -50,5 +47,4 @@ Feature: Version constraint
50
47
  """
51
48
  $foo_uri (1.2)
52
49
  """
53
- And a bootstrap script is created in "$home/.vim"
54
50
  And a flavor "$foo_uri" version "1.2" is deployed to "$home/.vim"
@@ -1,10 +1,10 @@
1
1
  ## Required softwares
2
2
 
3
- * [Git](http://git-scm.com/) 1.7.9 or later
4
- * [Ruby](http://www.ruby-lang.org/) 2.0.0 or later
5
- * Recommendation: Use [RVM](http://beginrescueend.com/) or other tools
3
+ * [Git](https://git-scm.com/) 2.10.1 or later
4
+ * [Ruby](https://www.ruby-lang.org/) 3.0.0 or later
5
+ * Recommendation: Use [rbenv](https://github.com/rbenv/rbenv) or other tools
6
6
  for ease of installation across different envinronments.
7
- * [Vim](http://www.vim.org/) 7.3 or later
7
+ * [Vim](https://www.vim.org/) 8.0 or later
8
8
  * Note that Vim should be compiled as normal, big or huge version
9
9
  to use most of plugins.
10
10
 
@@ -26,14 +26,8 @@
26
26
 
27
27
  cd $YOUR_REPOSITORY_FOR_DOTFILES
28
28
 
29
- # Add the following line into the first line of your vimrc:
30
- #
31
- # runtime flavors/bootstrap.vim
32
- vim vimrc
33
-
34
- touch VimFlavor VimFlavor.lock
35
-
36
- git add VimFlavor VimFlavor.lock vimrc
29
+ touch Flavorfile Flavorfile.lock
30
+ git add Flavorfile Flavorfile.lock
37
31
  git commit -m 'Use vim-flavor to manage my favorite Vim plugins'
38
32
 
39
33
 
data/features/news.md ADDED
@@ -0,0 +1 @@
1
+ ../CHANGELOG.md
@@ -8,11 +8,11 @@ vim-flavor can install plugins which meet the following conditions:
8
8
  This is an intentional design. Because:
9
9
  * [vim-scripts.org](http://vim-scripts.org/) provides
10
10
  [comprehensive Git mirrors](https://github.com/vim-scripts) for
11
- [plugins uploaded to www.vim.org](http://www.vim.org/scripts/index.php).
11
+ [plugins uploaded to www.vim.org](https://www.vim.org/scripts/index.php).
12
12
  * Experimental plugins which are not uploaded to www.vim.org
13
13
  are usually found in [GitHub](https://github.com/).
14
- * Plugins must follow [the versioning policies of
15
- RubyGems](http://docs.rubygems.org/read/chapter/7#page26) and have "version"
14
+ * Plugins must follow [Semantic Versioning
15
+ 2.0.0](https://semver.org/spec/v2.0.0.html) and have "version"
16
16
  tags in their repositories. For example, if there is the version 1.2.3 of
17
17
  a plugin, its repository must have the tag `1.2.3`, and the files of the
18
18
  version 1.2.3 can be checked out via the tag `1.2.3`. In other words,
@@ -35,7 +35,7 @@ vim-flavor can install plugins which meet the following conditions:
35
35
  * Git mirrors by vim-scripts.org have proper directory structures even if
36
36
  the original plugins are uploaded to www.vim.org without proper directory
37
37
  structures. (A good example is
38
- [a.vim](http://www.vim.org/scripts/script.php?script_id=31) and
38
+ [a.vim](https://www.vim.org/scripts/script.php?script_id=31) and
39
39
  [its mirror](https://github.com/vim-scripts/a.vim).)
40
40
  * Other Git repositories might not have proper directory structures.
41
41
  Such plugins are not ready to use for everyone.
@@ -14,12 +14,13 @@ overlooked.
14
14
 
15
15
  So that `vim-flavor` automatically resolves dependencies of Vim plugins. If
16
16
  a plugin declares its dependencies as a [flavorfile](flavorfile) and saves it
17
- as `VimFlavor`, `vim-flavor` reads the file and automatically installs
17
+ as `Flavorfile`, `vim-flavor` reads the file and automatically installs
18
18
  dependencies according to the file.
19
19
 
20
20
  `vim-flavor` also takes care about versions of Vim plugins. If two plugins
21
- require the same plugin but required versions are not compatible to others,
22
- installation will be stopped to avoid using Vim with a broken configuration.
21
+ require the same plugin but required versions are not compatible to each
22
+ other, installation will be stopped to avoid using Vim with a broken
23
+ configuration.
23
24
 
24
25
 
25
26
 
@@ -34,7 +34,6 @@ Feature: Resolve dependencies of Vim plugins
34
34
  $foo_uri (1.1)
35
35
  $qux_uri (2.1)
36
36
  """
37
- And a bootstrap script is created in "$home/.vim"
38
37
  And a flavor "$foo_uri" version "1.1" is deployed to "$home/.vim"
39
38
  And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
40
39
  And a flavor "$qux_uri" version "2.1" is deployed to "$home/.vim"
@@ -72,7 +71,6 @@ Feature: Resolve dependencies of Vim plugins
72
71
  $foo_uri (1.1)
73
72
  $qux_uri (1.1)
74
73
  """
75
- And a bootstrap script is created in "$home/.vim"
76
74
  And a flavor "$foo_uri" version "1.1" is deployed to "$home/.vim"
77
75
  And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
78
76
  And a flavor "$qux_uri" version "1.1" is deployed to "$home/.vim"
@@ -112,7 +110,6 @@ Feature: Resolve dependencies of Vim plugins
112
110
  $foo_uri (2.1)
113
111
  $qux_uri (2.1)
114
112
  """
115
- And a bootstrap script is created in "$home/.vim"
116
113
  And a flavor "$foo_uri" version "2.1" is deployed to "$home/.vim"
117
114
  And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
118
115
  And a flavor "$qux_uri" version "2.1" is deployed to "$home/.vim"
@@ -145,6 +142,5 @@ Feature: Resolve dependencies of Vim plugins
145
142
  $bar_uri (2.1)
146
143
  $foo_uri (2.1)
147
144
  """
148
- And a bootstrap script is created in "$home/.vim"
149
145
  And a flavor "$foo_uri" version "2.1" is deployed to "$home/.vim"
150
146
  And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
@@ -40,7 +40,6 @@ Feature: Update outdated dependencies of Vim plugins
40
40
  $B_uri (0.0)
41
41
  $L_uri (0.4)
42
42
  """
43
- And a bootstrap script is created in "$home/.vim"
44
43
  And a flavor "$A_uri" version "0.0" is deployed to "$home/.vim"
45
44
  And a flavor "$B_uri" version "0.0" is deployed to "$home/.vim"
46
45
  And a flavor "$L_uri" version "0.4" is deployed to "$home/.vim"
@@ -81,7 +80,6 @@ Feature: Update outdated dependencies of Vim plugins
81
80
  $L_uri (0.5)
82
81
  $X_uri (0.0)
83
82
  """
84
- And a bootstrap script is created in "$home/.vim"
85
83
  And a flavor "$A_uri" version "0.0" is deployed to "$home/.vim"
86
84
  And a flavor "$B_uri" version "0.0" is deployed to "$home/.vim"
87
85
  And a flavor "$L_uri" version "0.5" is deployed to "$home/.vim"
@@ -31,7 +31,6 @@ Feature: Version conflict
31
31
  $foo_uri ~> 2.0 is required by $qux_uri
32
32
  Please resolve the conflict.
33
33
  """
34
- And a bootstrap script is not created in "$home/.vim"
35
34
  And a flavor "$foo_uri" is not deployed to "$home/.vim"
36
35
  And a flavor "$bar_uri" is not deployed to "$home/.vim"
37
36
  And a flavor "$qux_uri" is not deployed to "$home/.vim"
@@ -59,6 +58,5 @@ Feature: Version conflict
59
58
  $foo_uri >= 2.0 is required by you
60
59
  Please resolve the conflict.
61
60
  """
62
- And a bootstrap script is not created in "$home/.vim"
63
61
  And a flavor "$foo_uri" is not deployed to "$home/.vim"
64
62
  And a flavor "$bar_uri" is not deployed to "$home/.vim"
@@ -7,7 +7,12 @@ Then 'it should pass' do
7
7
  end
8
8
 
9
9
  Then /^it should (pass|fail) with template:$/ do |pass_fail, template|
10
- self.__send__("assert_#{pass_fail}ing_with", expand(template))
10
+ expect(last_command_started).to have_output(an_output_string_including(expand(template)))
11
+ if pass_fail == 'pass'
12
+ expect(last_command_started).to be_successfully_executed
13
+ else
14
+ expect(last_command_started).not_to be_successfully_executed
15
+ end
11
16
  end
12
17
 
13
18
  When /^I run `(.*)` \(variables expanded\)$/ do |command|
@@ -1,5 +1,6 @@
1
1
  Then /^a dependency "(.*)" is stored in "(.*)"$/ do |repo_name, deps_path|
2
+ cache_path = "#{deps_path}/#{repo_name.zap}"
2
3
  steps %Q{
3
- Then a directory named "#{deps_path}/#{repo_name.zap}" should exist
4
+ Then a directory named "#{path_for_step(cache_path)}" should exist
4
5
  }
5
6
  end
@@ -1,5 +1,5 @@
1
1
  When /^I delete the directory "([^"]*)"$/ do |dir_name|
2
- in_current_dir do
2
+ cd('.') do
3
3
  # FileUtils#rmdir cannot delete non-empty directories.
4
4
  # TODO: Use aruba's "I remove the directory" step.
5
5
  # Currently its implementation cannot delete git repositories.
@@ -1,9 +1,9 @@
1
1
  Given /^an executable file named "(.*)" with:$/ do |file_path, content|
2
2
  steps %Q{
3
- Given a file named "#{file_path}" with:
3
+ Given a file named "#{path_for_step(file_path)}" with:
4
4
  """
5
5
  #{content}
6
6
  """
7
7
  }
8
- File.chmod(0755, File.join([current_dir, file_path]))
8
+ File.chmod(0755, File.join([expand_path('.'), file_path]))
9
9
  end
@@ -18,7 +18,11 @@ Given /^the repository "([^"]*)" has versions "([^"]*)"$/ do |basename, versions
18
18
  end
19
19
 
20
20
  Given /^the repository "([^"]*)" has versions "([^"]*)" and a flavorfile:$/ do |basename, versions, flavorfile_content|
21
- add_new_versions_to_repo(basename, versions, flavorfile_content)
21
+ add_new_versions_to_repo(basename, versions, flavorfile_content, :new)
22
+ end
23
+
24
+ Given /^the repository "([^"]*)" has versions "([^"]*)" and an old name flavorfile:$/ do |basename, versions, flavorfile_content|
25
+ add_new_versions_to_repo(basename, versions, flavorfile_content, :old)
22
26
  end
23
27
 
24
28
  Given /^a (?:(?:GitHub|local) )?repository "([^"]*)" with versions "([^"]*)"$/ do |basename, versions|
@@ -38,6 +42,16 @@ Given /^a (?:(?:GitHub|local) )?repository "([^"]*)" with versions "([^"]*)" and
38
42
  }
39
43
  end
40
44
 
45
+ Given /^a (?:(?:GitHub|local) )?repository "([^"]*)" with versions "([^"]*)" and an old name flavorfile:$/ do |basename, versions, flavorfile_content|
46
+ steps %Q{
47
+ Given a repository "#{basename}"
48
+ And the repository "#{basename}" has versions "#{versions}" and an old name flavorfile:
49
+ """
50
+ #{flavorfile_content}
51
+ """
52
+ }
53
+ end
54
+
41
55
  Given /^"([^"]*)" version "([^"]*)" is released$/ do |basename, version|
42
56
  steps %Q{
43
57
  Given the repository "#{basename}" has versions "#{version}"
@@ -58,21 +72,22 @@ Given /^a repository "([^"]*)" from offline cache$/ do |repo_name|
58
72
  repository_path = make_repo_path(repo_name).sub(expand('$tmp/'), '')
59
73
  sh <<-"END"
60
74
  {
61
- git clone --quiet --no-checkout 'vendor/#{repo_name}' '#{current_dir}/#{repository_path}'
75
+ git clone --quiet --no-checkout 'vendor/#{repo_name}' '#{expand_path('.')}/#{repository_path}'
62
76
  } >/dev/null
63
77
  END
64
78
  end
65
79
 
66
80
  Given /^I disable network to the original repository of "([^"]*)"$/ do |basename|
67
81
  steps %Q{
68
- Given I delete the directory "#{make_repo_path(basename)}"
82
+ Given I delete the directory "#{path_for_step(make_repo_path(basename))}"
69
83
  }
70
84
  end
71
85
 
72
86
  When /^I create a file named "([^"]*)" in "([^"]*)" deployed to "([^"]*)"$/ do |file_name, v_repo_name, v_vimfiles_path|
73
87
  flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
88
+ file_path = "#{flavor_path}/#{file_name}"
74
89
  steps %Q{
75
- When I write to "#{flavor_path}/#{file_name}" with:
90
+ When I write to "#{path_for_step(file_path)}" with:
76
91
  """
77
92
  """
78
93
  }
@@ -82,24 +97,24 @@ Then /^a flavor "([^"]*)" version "([^"]*)" is deployed to "([^"]*)"$/ do |v_rep
82
97
  flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
83
98
  basename = expand(v_repo_name).split('/').last.sub(/^vim-/, '')
84
99
  steps %Q{
85
- Then the file "#{flavor_path}/doc/#{basename}.txt" should contain:
100
+ Then the file "#{path_for_step(flavor_path)}/doc/#{basename}.txt" should contain:
86
101
  """
87
102
  *#{basename}* #{version}
88
103
  """
89
- Then a file named "#{flavor_path}/doc/tags" should exist
104
+ Then a file named "#{path_for_step(flavor_path)}/doc/tags" should exist
90
105
  }
91
106
  end
92
107
 
93
108
  Then /^a flavor "([^"]*)" is not deployed to "([^"]*)"$/ do |v_repo_name, v_vimfiles_path|
94
109
  flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
95
110
  steps %Q{
96
- Then a directory named "#{flavor_path}" should not exist
111
+ Then a directory named "#{path_for_step(flavor_path)}" should not exist
97
112
  }
98
113
  end
99
114
 
100
115
  Then /^"([^"]*)" version "([^"]*)" is (?:(not) )?cached$/ do |v_repo_name, version, p|
101
116
  d = make_cached_repo_path(expand(v_repo_name), expand('$home').to_stash_path)
102
- (system <<-"END").should == (p != 'not')
117
+ expect(system <<-"END").to equal(p != 'not')
103
118
  {
104
119
  cd '#{d}' &&
105
120
  git rev-list --quiet '#{version}'
@@ -109,7 +124,8 @@ end
109
124
 
110
125
  Then /^a file named "([^"]*)" (should(?: not)?) exist in "([^"]*)" deployed to "([^"]*)"$/ do |file_name, should, v_repo_name, v_vimfiles_path|
111
126
  flavor_path = make_flavor_path(expand(v_vimfiles_path), expand(v_repo_name))
127
+ file_path = "#{flavor_path}/#{file_name}"
112
128
  steps %Q{
113
- Then a file named "#{flavor_path}/#{file_name}" #{should} exist
129
+ Then a file named "#{path_for_step(file_path)}" #{should} exist
114
130
  }
115
131
  end
@@ -1,6 +1,15 @@
1
1
  Given 'a flavorfile with:' do |content|
2
2
  steps %Q{
3
- Given a file named "#{'.'.to_flavorfile_path}" with:
3
+ Given a file named "#{path_for_step(expand_path('.').to_flavorfile_path)}" with:
4
+ """
5
+ #{expand(content)}
6
+ """
7
+ }
8
+ end
9
+
10
+ Given 'an old name flavorfile with:' do |content|
11
+ steps %Q{
12
+ Given a file named "#{path_for_step("#{expand_path('.')}/VimFlavor")}" with:
4
13
  """
5
14
  #{expand(content)}
6
15
  """
@@ -1,6 +1,15 @@
1
1
  Given 'a lockfile with:' do |content|
2
2
  steps %Q{
3
- Given a file named "#{'.'.to_lockfile_path}" with:
3
+ Given a file named "#{path_for_step(expand_path('.').to_lockfile_path)}" with:
4
+ """
5
+ #{expand(content)}
6
+ """
7
+ }
8
+ end
9
+
10
+ Given 'an old name lockfile with:' do |content|
11
+ steps %Q{
12
+ Given a file named "#{path_for_step("#{expand_path('.')}/VimFlavor.lock")}" with:
4
13
  """
5
14
  #{expand(content)}
6
15
  """
@@ -18,7 +27,7 @@ end
18
27
 
19
28
  Given 'I delete the lockfile' do
20
29
  steps %Q{
21
- Given I remove the file "#{'.'.to_lockfile_path}"
30
+ Given I remove the file "#{path_for_step(expand_path('.').to_lockfile_path)}"
22
31
  }
23
32
  end
24
33
 
@@ -34,7 +43,7 @@ end
34
43
  Then /^(?:a|the) lockfile is (?:created|updated) with:$/ do |content|
35
44
  # For some reason, Cucumber drops the last newline from every docstring...
36
45
  steps %Q{
37
- Then the file "#{'.'.to_lockfile_path}" should contain exactly:
46
+ Then the file "#{path_for_step(expand_path('.').to_lockfile_path)}" should contain exactly:
38
47
  """
39
48
  #{content == '' ? '' : expand(content) + "\n"}
40
49
  """
@@ -42,11 +51,11 @@ Then /^(?:a|the) lockfile is (?:created|updated) with:$/ do |content|
42
51
  end
43
52
 
44
53
  Then /^(?:a|the) lockfile is (?:created|updated) and matches with:$/ do |content|
45
- check_file_content('.'.to_lockfile_path, /#{content}/, true)
54
+ expect(path_for_step(expand_path('.').to_lockfile_path)).to have_file_content(/#{content}/)
46
55
  end
47
56
 
48
57
  Then /^(?:a|the) lockfile is not created$/ do
49
58
  steps %Q{
50
- Then a file named "#{'.'.to_lockfile_path}" should not exist
59
+ Then a file named "#{path_for_step(expand_path('.').to_lockfile_path)}" should not exist
51
60
  }
52
61
  end
@@ -1,13 +1,17 @@
1
1
  require 'aruba/api'
2
2
  require 'aruba/cucumber'
3
3
  require 'fileutils'
4
+ require 'pathname'
4
5
  require 'vim-flavor'
5
6
 
6
7
  class FakeUserEnvironment
7
8
  include Vim::Flavor::ShellUtility
8
9
 
9
- def add_new_versions_to_repo(basename, versions, flavorfile_content = nil)
10
+ def add_new_versions_to_repo(basename, versions, flavorfile_content = nil, naming_style = :new)
10
11
  repository_path = make_repo_path(basename)
12
+ flavorfile_path = naming_style == :new ?
13
+ repository_path.to_flavorfile_path :
14
+ "#{repository_path}/VimFlavor"
11
15
  doc_name = basename.split('/').last.sub(/^vim-/, '')
12
16
  sh <<-"END"
13
17
  {
@@ -19,10 +23,10 @@ class FakeUserEnvironment
19
23
  git add doc
20
24
  #{
21
25
  %Q{
22
- cat <<'FF' >#{'.'.to_flavorfile_path}
26
+ cat <<'FF' >#{flavorfile_path}
23
27
  #{expand(flavorfile_content)}
24
28
  FF
25
- git add #{'.'.to_flavorfile_path}
29
+ git add #{flavorfile_path}
26
30
  } if flavorfile_content
27
31
  }
28
32
  git commit -m "Version $v"
@@ -44,6 +48,16 @@ FF
44
48
  }
45
49
  end
46
50
 
51
+ def path_for_step(path)
52
+ cwd = Pathname.new(expand_path('.'))
53
+ pathd = Pathname.new(path)
54
+ if not pathd.absolute?
55
+ pathd = cwd + pathd
56
+ end
57
+
58
+ pathd.relative_path_from(cwd).to_s
59
+ end
60
+
47
61
  def make_cached_repo_path(repo_name, stash_path)
48
62
  "#{stash_path}/repos/#{repo_name.zap}"
49
63
  end
@@ -68,22 +82,18 @@ end
68
82
  Before do
69
83
  variable_table['version'] = Vim::Flavor::VERSION
70
84
 
71
- variable_table['tmp'] = File.absolute_path(current_dir)
85
+ variable_table['tmp'] = File.absolute_path(expand_path('.'))
72
86
 
73
87
  steps %Q{
74
88
  Given a directory named "home"
75
89
  }
76
- variable_table['home'] = File.absolute_path(File.join([current_dir, 'home']))
90
+ variable_table['home'] = File.absolute_path(File.join([expand_path('.'), 'home']))
77
91
 
78
92
  @aruba_timeout_seconds = 5
79
- end
80
93
 
81
- Aruba.configure do |config|
82
- config.before_cmd do |cmd|
83
- set_env 'VIM_FLAVOR_HOME', variable_table['home']
84
- set_env 'VIM_FLAVOR_GITHUB_URI_PREFIX', expand('file://$tmp/repos/')
85
- set_env 'VIM_FLAVOR_GITHUB_URI_SUFFIX', ''
86
- end
94
+ set_environment_variable 'VIM_FLAVOR_HOME', variable_table['home']
95
+ set_environment_variable 'VIM_FLAVOR_GITHUB_URI_PREFIX', expand('file://$tmp/repos/')
96
+ set_environment_variable 'VIM_FLAVOR_GITHUB_URI_SUFFIX', ''
87
97
  end
88
98
 
89
99
  World do
@@ -3,7 +3,7 @@
3
3
  1. Write tests for your Vim plugin with
4
4
  [vim-vspec](https://github.com/kana/vim-vspec).
5
5
  2. Declare dependencies of your Vim plugin as a [flavorfile](flavorfile), and
6
- save it as `VimFlavor` in the root of your Vim plugin.
6
+ save it as `Flavorfile` in the root of your Vim plugin.
7
7
  3. Run `vim-flavor test`.
8
8
 
9
9
 
@@ -14,15 +14,16 @@
14
14
  It is hard to test Vim plugins, because there are a few problems:
15
15
 
16
16
  * It is hard to write readable and maintainable test code in Vim script, even
17
- for skilled users. Because Vim script is not expressive as script languages
18
- like Ruby and others.
17
+ for skilled users. Because Vim script is not expressive as other script
18
+ languages like Ruby.
19
19
  * Each test must be run in an isolated environment to guarantee the same
20
20
  results for every time and everywhere. So that all settings including vimrc
21
- and plugins must be ignored. User's viminfo must not be read and written
22
- too.
21
+ and plugins of yours must be ignored. Your viminfo also must not be read
22
+ and written to avoid unexpected test failures and unexpectedly overwritten
23
+ of registers and marks you used.
23
24
  * Some plugins require other plugins at runtime. Such dependencies must be
24
25
  resolved, but they must be installed into a temporary place to avoid
25
- corrupting user's settings. And `'runtimepath'` must be configured
26
+ corrupting your environment. And `'runtimepath'` must be configured
26
27
  carefully for both dependencies and plugins under development.
27
28
 
28
29
  Therefore it is hard to do right testing for Vim plugins from scratch. As