rspec-i18n 0.2.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/.gitignore +13 -0
  2. data/History.rdoc +17 -2
  3. data/License.txt +1 -1
  4. data/README.rdoc +17 -6
  5. data/Rakefile +6 -4
  6. data/TODO.txt +5 -5
  7. data/VERSION.yml +3 -3
  8. data/examples/i18n/pt/person_spec.rb +117 -12
  9. data/lib/spec-i18n/command_line/language_help_formatter.rb +67 -14
  10. data/lib/spec-i18n/command_line/options.rb +18 -17
  11. data/lib/spec-i18n/dsl/main.rb +1 -1
  12. data/lib/spec-i18n/example/before_and_after_hooks.rb +14 -9
  13. data/lib/spec-i18n/example/example_group_methods.rb +1 -1
  14. data/lib/spec-i18n/example/subject.rb +29 -0
  15. data/lib/spec-i18n/example.rb +2 -1
  16. data/lib/spec-i18n/expectations/extensions/kernel.rb +1 -1
  17. data/lib/spec-i18n/languages.yml +40 -3
  18. data/lib/spec-i18n/matchers/be.rb +19 -0
  19. data/lib/spec-i18n/matchers/method_missing.rb +25 -0
  20. data/lib/spec-i18n/matchers/register_all_matchers.rb +10 -0
  21. data/lib/spec-i18n/matchers/translate_basic_matchers.rb +28 -0
  22. data/lib/spec-i18n/matchers.rb +6 -0
  23. data/lib/spec-i18n/parser/natural_language.rb +19 -27
  24. data/lib/spec-i18n/runner/configuration.rb +3 -0
  25. data/lib/spec-i18n/spec_language.rb +3 -0
  26. data/lib/spec-i18n.rb +2 -1
  27. data/rspec-i18n.gemspec +57 -18
  28. data/spec/spec-i18n/command_line/language_help_formatter_spec.rb +73 -4
  29. data/spec/spec-i18n/dsl/main_spec.rb +1 -1
  30. data/spec/spec-i18n/example/subject_spec.rb +125 -0
  31. data/spec/spec-i18n/expectations/kernel_spec.rb +1 -0
  32. data/spec/spec-i18n/matchers/be_close_spec.rb +40 -0
  33. data/spec/spec-i18n/matchers/be_instance_of_spec.rb +32 -0
  34. data/spec/spec-i18n/matchers/be_kind_of_spec.rb +37 -0
  35. data/spec/spec-i18n/matchers/be_spec.rb +61 -0
  36. data/spec/spec-i18n/matchers/eql_spec.rb +33 -0
  37. data/spec/spec-i18n/matchers/equal_spec.rb +26 -0
  38. data/spec/spec-i18n/matchers/exist_spec.rb +45 -0
  39. data/spec/spec-i18n/matchers/have_spec.rb +61 -0
  40. data/spec/spec-i18n/matchers/include_spec.rb +34 -0
  41. data/spec/spec-i18n/matchers/match_spec.rb +36 -0
  42. data/spec/spec-i18n/matchers/raise_error_spec.rb +25 -0
  43. data/spec/spec-i18n/matchers/register_all_matchers_spec.rb +17 -0
  44. data/spec/spec-i18n/matchers/satisfy_spec.rb +28 -0
  45. data/spec/spec-i18n/parser/natural_language_spec.rb +42 -58
  46. data/spec/spec-i18n/spec_examples/pt/pessoa_spec.rb +153 -0
  47. data/spec/spec-i18n/spec_language_spec.rb +6 -0
  48. data/spec/spec.opts +1 -1
  49. data/spec/spec_helper.rb +44 -0
  50. metadata +66 -13
  51. data/pkg/rspec-i18n-0.1.0.gem +0 -0
  52. data/pkg/rspec-i18n-0.2.0.gem +0 -0
  53. data/spec/spec-i18n/example_spec.rb +0 -47
@@ -4,11 +4,14 @@
4
4
  # If you want several aliases for a keyword, just a separate them
5
5
  # with a | character. Make sure there are no ambiguities in the keywords
6
6
 
7
+ # The English language => Just for example
7
8
  "en":
8
9
  name: English
9
10
  native: English
10
11
  describe: describe
11
12
  it: it|specify
13
+ its: exemplo_do_assunto # I don't know about this word
14
+ subject: subject
12
15
  should: should
13
16
  should_not: should_not
14
17
  before: before
@@ -18,13 +21,29 @@
18
21
  all: all
19
22
  suite: suite
20
23
  matchers:
21
- be_equal: be_equal
24
+ be: be
25
+ be_a_kind_of: be_a_kind_of
26
+ be_close: be_close
27
+ be_an_instance_of: be_an_instance_of
28
+ eql: eql
29
+ equal: equal
30
+ exist: exist
31
+ have: have
32
+ have_exactly: have_exactly
33
+ have_at_least: have_at_least
34
+ have_at_most: have_at_most
35
+ include: include
36
+ match: match
37
+ raise_error: raise_exception
38
+ satisfy: satisfazer
22
39
 
23
40
  "pt":
24
41
  name: Portuguese
25
42
  native: português
26
43
  describe: descreva|contexto
27
44
  it: exemplo|especificar
45
+ its: exemplo_do_assunto # I don't know about this word
46
+ subject: assunto
28
47
  should: deve
29
48
  should_not: nao_deve
30
49
  before: antes
@@ -34,7 +53,21 @@
34
53
  all: de_todos|de_todos_exemplos
35
54
  suite: suite
36
55
  matchers:
37
- be_equal: ser_igual_a
56
+ be: ser|estar
57
+ be_a_kind_of: ser_do_tipo
58
+ be_close: estar_perto|estar_proximo
59
+ be_an_instance_of: ser_instancia_de
60
+ eql: igl
61
+ equal: igual|igual_a
62
+ exist: existir
63
+ have: ter
64
+ have_exactly: ter_exatamente
65
+ have_at_least: ter_no_minimo
66
+ have_at_most: ter_no_maximo
67
+ include: incluir
68
+ match: corresponder
69
+ raise_error: mostrar_erro|mostrar_excessao
70
+ satisfy: satisfazer
38
71
 
39
72
  # Please put the right words for this language! =D
40
73
  "es":
@@ -42,6 +75,8 @@
42
75
  native: español
43
76
  describe: describir
44
77
  it: ejemplo
78
+ its: ejemplo_asunto # I don't know about this word
79
+ subject: asunto|tema
45
80
  should: deberia
46
81
  should_not: no_debe
47
82
  before: antes
@@ -51,4 +86,6 @@
51
86
  all: de_todos_ejemplo
52
87
  suite: suite
53
88
  matchers:
54
- be_equal: ser_igual_a
89
+ be:
90
+ eql:
91
+ equal:
@@ -0,0 +1,19 @@
1
+ module Spec
2
+ module Matchers
3
+ class Be #:nodoc:
4
+ class << self
5
+ def register_be_matcher
6
+ language = SpecI18n.natural_language
7
+ be_matcher = language.keywords['matchers']['be']
8
+
9
+ # TODO: working with warnings
10
+ return unless be_matcher
11
+
12
+ be_matcher.split('|').map do |be_value|
13
+ alias_method be_value, :be
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module Spec
2
+ module Matchers
3
+ def method_missing(sym, *args, &block) # :nodoc:
4
+
5
+ begin
6
+ language = SpecI18n.natural_language
7
+ be_word = language.keywords['matchers']['be']
8
+ sym = be_to_english(sym, be_word)
9
+ end
10
+
11
+ return Matchers::BePredicate.new(sym, *args, &block) if sym.to_s =~ /^be_/
12
+ return Matchers::Has.new(sym, *args, &block) if sym.to_s =~ /^have_/
13
+
14
+ super
15
+ end
16
+
17
+ # :ser_matcher == :be_matcher
18
+ # :be_true == :be_true
19
+ def be_to_english(sym, be_word)
20
+ be_word = be_word || 'be'
21
+
22
+ sym.to_s.gsub(/#{be_word}/, 'be').to_sym
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ module Spec
2
+ module Matchers
3
+
4
+ def self.register_all_matchers
5
+ Spec::Matchers::Be.register_be_matcher
6
+ translate_basic_matchers
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ class << self
4
+
5
+ RSPEC_MATCHERS = [ :be_close, :be_an_instance_of, :be_a_kind_of,
6
+ :eql, :equal, :exist, :have, :have_at_least,
7
+ :have_at_most, :have_exactly, :include, :match,
8
+ :raise_error, :satisfy ]
9
+
10
+ MATCHERS_WITH_QUESTIONS = [ :eql, :equal ]
11
+
12
+ def translate_basic_matchers
13
+ language = SpecI18n.natural_language
14
+ RSPEC_MATCHERS.each do |rspec_matcher|
15
+ matcher = language.keywords['matchers'][rspec_matcher.to_s]
16
+
17
+ # TODO: Generating warnings for the incomplete languages
18
+ next unless matcher
19
+
20
+ matcher.split('|').map do |matcher_value|
21
+ alias_method "#{matcher_value}?", "#{rspec_matcher}?" if MATCHERS_WITH_QUESTIONS.include?(rspec_matcher)
22
+ alias_method matcher_value, rspec_matcher
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec-i18n/matchers/be'
2
+ require 'spec-i18n/matchers/method_missing'
3
+ require 'spec-i18n/matchers/translate_basic_matchers'
4
+ require 'spec-i18n/matchers/register_all_matchers'
5
+
6
+ include Spec::Matchers
@@ -1,44 +1,28 @@
1
1
  module SpecI18n
2
2
  module Parser
3
3
  class NaturalLanguage
4
- KEYWORDS_LANGUAGE = %w{ name native describe before after it should should_not}
5
-
4
+ BASIC_KEYWORDS = %w{ name native describe before after it
5
+ subject its should should_not}
6
+
7
+ ADVANCED_KEYWORDS = %w{ hooks matchers}
8
+
6
9
  class << self
7
10
  def get(language)
8
11
  new(language)
9
- end
10
-
11
- def list_languages
12
- SpecI18n::SPEC_LANGUAGES.keys.sort.map do |lang|
13
- [
14
- lang,
15
- SpecI18n::SPEC_LANGUAGES[lang]['name'],
16
- SpecI18n::SPEC_LANGUAGES[lang]['native']
17
- ]
18
- end
19
- end
20
-
21
- def list_keywords(language)
22
- language = NaturalLanguage.get(language)
23
-
24
- NaturalLanguage::KEYWORDS_LANGUAGE.map do |key|
25
- [key, language.spec_keywords(key)[key].join(" / ")]
26
- end
27
- end
28
-
12
+ end
29
13
  end
30
14
 
31
15
  attr_reader :keywords
32
16
 
33
17
  def initialize(language)
34
18
  @keywords = SpecI18n::SPEC_LANGUAGES[language]
35
- raise(LanguageNotFound, "Language #{language} Not Supported") if @keywords.nil?
19
+ raise(LanguageNotFound, "Language #{language.to_s} Not Supported") if @keywords.nil?
36
20
  end
37
21
 
38
22
  def incomplete?
39
- language_words = KEYWORDS_LANGUAGE.collect { |key| keywords[key].nil? }
40
- return false if language_words.include?(true)
41
- true
23
+ language_words = BASIC_KEYWORDS.collect { |key| keywords[key].nil? }
24
+ return true if language_words.include?(true)
25
+ false
42
26
  end
43
27
 
44
28
  def dsl_keywords
@@ -68,6 +52,14 @@ module SpecI18n
68
52
  spec_keywords("it")
69
53
  end
70
54
 
55
+ def subject_keywords
56
+ adverbs = spec_keywords('subject')
57
+ end
58
+
59
+ def its_keywords
60
+ spec_keywords("its")
61
+ end
62
+
71
63
  def spec_keywords(key, space=false)
72
64
  raise "No #{key} in #{@keywords.inspect}" if @keywords[key].nil?
73
65
  values = keywords[key].split('|')
@@ -80,4 +72,4 @@ module SpecI18n
80
72
  end
81
73
 
82
74
  end
83
- end
75
+ end
@@ -17,6 +17,9 @@ module Spec
17
17
  Kernel.register_expectations_keywords
18
18
  Spec::Example::ExampleGroupMethods.register_example_adverbs
19
19
  Spec::Example::BeforeAndAfterHooks.register_hooks
20
+ Spec::Matchers.register_all_matchers
21
+ Spec::Example::Subject::ExampleGroupMethods.register_subjects
22
+ Spec::Example::Subject::ExampleMethods.register_subjects
20
23
  end
21
24
  end
22
25
 
@@ -2,6 +2,9 @@ module SpecI18n
2
2
  def spec_language
3
3
  Spec::Runner.configuration.language
4
4
  end
5
+ def natural_language
6
+ Parser::NaturalLanguage.get(spec_language)
7
+ end
5
8
  end
6
9
 
7
10
  include SpecI18n
data/lib/spec-i18n.rb CHANGED
@@ -3,8 +3,9 @@ require 'yaml'
3
3
  require 'spec'
4
4
  require 'spec-i18n/platform'
5
5
  require 'spec-i18n/runner'
6
- require 'spec-i18n/spec_language'
7
6
  require 'spec-i18n/parser'
7
+ require 'spec-i18n/spec_language'
8
+ require 'spec-i18n/matchers'
8
9
  require 'spec-i18n/example'
9
10
  require 'spec-i18n/expectations'
10
11
  require 'spec-i18n/dsl'
data/rspec-i18n.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rspec-i18n}
8
- s.version = "0.2.1"
8
+ s.version = "1.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tomas D'Stefano"]
12
- s.date = %q{2010-01-05}
12
+ s.date = %q{2010-01-19}
13
13
  s.default_executable = %q{rspec-i18n}
14
14
  s.description = %q{A internacionalization tool written in Ruby for the Rspec Framework}
15
15
  s.email = %q{tomasdestefi@gmail.com}
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  "README.rdoc"
19
19
  ]
20
20
  s.files = [
21
- "History.rdoc",
21
+ ".gitignore",
22
+ "History.rdoc",
22
23
  "License.txt",
23
24
  "README.rdoc",
24
25
  "Rakefile",
@@ -35,18 +36,22 @@ Gem::Specification.new do |s|
35
36
  "lib/spec-i18n/example.rb",
36
37
  "lib/spec-i18n/example/before_and_after_hooks.rb",
37
38
  "lib/spec-i18n/example/example_group_methods.rb",
39
+ "lib/spec-i18n/example/subject.rb",
38
40
  "lib/spec-i18n/expectations.rb",
39
41
  "lib/spec-i18n/expectations/extensions.rb",
40
42
  "lib/spec-i18n/expectations/extensions/kernel.rb",
41
43
  "lib/spec-i18n/languages.yml",
44
+ "lib/spec-i18n/matchers.rb",
45
+ "lib/spec-i18n/matchers/be.rb",
46
+ "lib/spec-i18n/matchers/method_missing.rb",
47
+ "lib/spec-i18n/matchers/register_all_matchers.rb",
48
+ "lib/spec-i18n/matchers/translate_basic_matchers.rb",
42
49
  "lib/spec-i18n/parser.rb",
43
50
  "lib/spec-i18n/parser/natural_language.rb",
44
51
  "lib/spec-i18n/platform.rb",
45
52
  "lib/spec-i18n/runner.rb",
46
53
  "lib/spec-i18n/runner/configuration.rb",
47
54
  "lib/spec-i18n/spec_language.rb",
48
- "pkg/rspec-i18n-0.1.0.gem",
49
- "pkg/rspec-i18n-0.2.0.gem",
50
55
  "rspec-i18n.gemspec",
51
56
  "spec/spec-i18n/command_line/language_help_formatter_spec.rb",
52
57
  "spec/spec-i18n/command_line/main_spec.rb",
@@ -54,11 +59,25 @@ Gem::Specification.new do |s|
54
59
  "spec/spec-i18n/dsl/main_spec.rb",
55
60
  "spec/spec-i18n/example/before_and_after_hooks_spec.rb",
56
61
  "spec/spec-i18n/example/example_group_methods_spec.rb",
57
- "spec/spec-i18n/example_spec.rb",
62
+ "spec/spec-i18n/example/subject_spec.rb",
58
63
  "spec/spec-i18n/expectations/kernel_spec.rb",
64
+ "spec/spec-i18n/matchers/be_close_spec.rb",
65
+ "spec/spec-i18n/matchers/be_instance_of_spec.rb",
66
+ "spec/spec-i18n/matchers/be_kind_of_spec.rb",
67
+ "spec/spec-i18n/matchers/be_spec.rb",
68
+ "spec/spec-i18n/matchers/eql_spec.rb",
69
+ "spec/spec-i18n/matchers/equal_spec.rb",
70
+ "spec/spec-i18n/matchers/exist_spec.rb",
71
+ "spec/spec-i18n/matchers/have_spec.rb",
72
+ "spec/spec-i18n/matchers/include_spec.rb",
73
+ "spec/spec-i18n/matchers/match_spec.rb",
74
+ "spec/spec-i18n/matchers/raise_error_spec.rb",
75
+ "spec/spec-i18n/matchers/register_all_matchers_spec.rb",
76
+ "spec/spec-i18n/matchers/satisfy_spec.rb",
59
77
  "spec/spec-i18n/parser/natural_language_spec.rb",
60
78
  "spec/spec-i18n/runner/configuration_spec.rb",
61
79
  "spec/spec-i18n/runner/runner_spec.rb",
80
+ "spec/spec-i18n/spec_examples/pt/pessoa_spec.rb",
62
81
  "spec/spec-i18n/spec_language_spec.rb",
63
82
  "spec/spec.opts",
64
83
  "spec/spec_helper.rb"
@@ -68,9 +87,9 @@ Gem::Specification.new do |s|
68
87
  --------------------------------------------------------------------------------
69
88
  U P G R A D I N G
70
89
 
71
- Thank you for installing rspec-i18n-0.2.1
90
+ Thank you for installing rspec-i18n-1.0.0
72
91
  Please be sure to read http://wiki.github.com/tomas-stefano/rspec-i18n/upgrading
73
- for important information about this release.
92
+ for information about this release.
74
93
 
75
94
  Remember: 'TDD is a muscle. You have to exercise it.' =) (Brian Liles)
76
95
 
@@ -87,11 +106,25 @@ Remember: 'TDD is a muscle. You have to exercise it.' =) (Brian Liles)
87
106
  "spec/spec-i18n/dsl/main_spec.rb",
88
107
  "spec/spec-i18n/example/before_and_after_hooks_spec.rb",
89
108
  "spec/spec-i18n/example/example_group_methods_spec.rb",
90
- "spec/spec-i18n/example_spec.rb",
109
+ "spec/spec-i18n/example/subject_spec.rb",
91
110
  "spec/spec-i18n/expectations/kernel_spec.rb",
111
+ "spec/spec-i18n/matchers/be_close_spec.rb",
112
+ "spec/spec-i18n/matchers/be_instance_of_spec.rb",
113
+ "spec/spec-i18n/matchers/be_kind_of_spec.rb",
114
+ "spec/spec-i18n/matchers/be_spec.rb",
115
+ "spec/spec-i18n/matchers/eql_spec.rb",
116
+ "spec/spec-i18n/matchers/equal_spec.rb",
117
+ "spec/spec-i18n/matchers/exist_spec.rb",
118
+ "spec/spec-i18n/matchers/have_spec.rb",
119
+ "spec/spec-i18n/matchers/include_spec.rb",
120
+ "spec/spec-i18n/matchers/match_spec.rb",
121
+ "spec/spec-i18n/matchers/raise_error_spec.rb",
122
+ "spec/spec-i18n/matchers/register_all_matchers_spec.rb",
123
+ "spec/spec-i18n/matchers/satisfy_spec.rb",
92
124
  "spec/spec-i18n/parser/natural_language_spec.rb",
93
125
  "spec/spec-i18n/runner/configuration_spec.rb",
94
126
  "spec/spec-i18n/runner/runner_spec.rb",
127
+ "spec/spec-i18n/spec_examples/pt/pessoa_spec.rb",
95
128
  "spec/spec-i18n/spec_language_spec.rb",
96
129
  "spec/spec_helper.rb",
97
130
  "examples/i18n/pt/person_spec.rb"
@@ -102,21 +135,27 @@ Remember: 'TDD is a muscle. You have to exercise it.' =) (Brian Liles)
102
135
  s.specification_version = 3
103
136
 
104
137
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
105
- s.add_runtime_dependency(%q<rspec>, [">= 1.2.9"])
106
- s.add_runtime_dependency(%q<cucumber>, [">= 0.5.3"])
138
+ s.add_runtime_dependency(%q<rspec>, [">= 1.3.0"])
139
+ s.add_runtime_dependency(%q<terminal-table>, [">= 1.4.2"])
140
+ s.add_runtime_dependency(%q<term-ansicolor>, ["= 1.0.4"])
107
141
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
108
- s.add_development_dependency(%q<cucumber>, [">= 0.5.3"])
142
+ s.add_development_dependency(%q<terminal-table>, [">= 1.4.2"])
143
+ s.add_development_dependency(%q<term-ansicolor>, ["= 1.0.4"])
109
144
  else
145
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
146
+ s.add_dependency(%q<terminal-table>, [">= 1.4.2"])
147
+ s.add_dependency(%q<term-ansicolor>, ["= 1.0.4"])
110
148
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
111
- s.add_dependency(%q<cucumber>, [">= 0.5.3"])
112
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
113
- s.add_dependency(%q<cucumber>, [">= 0.5.3"])
149
+ s.add_dependency(%q<terminal-table>, [">= 1.4.2"])
150
+ s.add_dependency(%q<term-ansicolor>, ["= 1.0.4"])
114
151
  end
115
152
  else
153
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
154
+ s.add_dependency(%q<terminal-table>, [">= 1.4.2"])
155
+ s.add_dependency(%q<term-ansicolor>, ["= 1.0.4"])
116
156
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
117
- s.add_dependency(%q<cucumber>, [">= 0.5.3"])
118
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
119
- s.add_dependency(%q<cucumber>, [">= 0.5.3"])
157
+ s.add_dependency(%q<terminal-table>, [">= 1.4.2"])
158
+ s.add_dependency(%q<term-ansicolor>, ["= 1.0.4"])
120
159
  end
121
160
  end
122
161
 
@@ -5,22 +5,91 @@ module SpecI18n
5
5
  describe LanguageHelpFormatter do
6
6
 
7
7
  before(:all) do
8
- @languages = SpecI18n::Parser::NaturalLanguage.list_languages
9
- @portuguese = SpecI18n::Parser::NaturalLanguage.list_keywords("pt")
8
+ @pt = SpecI18n::Parser::NaturalLanguage.get('pt')
9
+ @languages = LanguageHelpFormatter.list_languages
10
+ @portuguese = LanguageHelpFormatter.list_basic_keywords(@pt)
10
11
  @io_stream = StringIO.new
11
12
  end
12
13
 
13
14
  it "should list languages" do
14
- SpecI18n::Parser::NaturalLanguage.should_receive(:list_languages).and_return(@languages)
15
+ LanguageHelpFormatter.should_receive(:list_languages).and_return(@languages)
15
16
  Kernel.should_receive(:exit)
16
17
  LanguageHelpFormatter.list_languages_and_exit(StringIO.new)
17
18
  end
18
19
 
19
20
  it "should list keywords" do
20
- SpecI18n::Parser::NaturalLanguage.should_receive(:list_keywords).and_return(@portuguese)
21
+ LanguageHelpFormatter.should_receive(:list_basic_keywords).and_return(@portuguese)
21
22
  Kernel.should_receive(:exit)
22
23
  LanguageHelpFormatter.list_keywords_and_exit(@io_stream, 'pt')
23
24
  end
25
+
26
+ context "list languages" do
27
+
28
+ before(:each) do
29
+ @portuguese = ["pt", "Portuguese", "português"]
30
+ @spanish = ["es", "Spanish", "español"]
31
+ end
32
+
33
+ it "should return the three keywords language for portuguese" do
34
+ SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return("pt")
35
+ LanguageHelpFormatter.list_languages.should == [@portuguese]
36
+ end
37
+
38
+ it "should return the three keywords for spanish" do
39
+ SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return("es")
40
+ LanguageHelpFormatter.list_languages.should == [@spanish]
41
+ end
42
+
43
+ it "should return the three keywords for spanish and portuguese" do
44
+ SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return(["pt", "es"])
45
+ LanguageHelpFormatter.list_languages.should == [@portuguese, @spanish].sort
46
+ end
47
+ end
48
+
49
+ context "list all keywords" do
50
+
51
+ before(:each) do
52
+ @language_keywords = LanguageHelpFormatter.list_basic_keywords(@pt)
53
+ end
54
+
55
+ # TODO: It's 3 a.m in the morning ... Ugly Specs ... #FIXME
56
+
57
+ it "should return all basic keywords for a language" do
58
+ words = %w(name native describe before after it should should_not)
59
+ words.each do |word|
60
+ @language_keywords.flatten.should include(word)
61
+ end
62
+ end
63
+
64
+ it "should return the example keyword for the portuguese language" do
65
+ example = @language_keywords.map { |array| array if array.include?("it") }.compact.flatten
66
+ example.should == ["it", "exemplo / especificar"]
67
+ end
68
+
69
+ describe 'the advanced keywords' do
70
+
71
+ before(:each) do
72
+ @out = StringIO.new
73
+ @keywords = LanguageHelpFormatter.list_advanced_keywords(@out, @pt)
74
+ end
75
+
76
+ it "should return the matchers keywords for language" do
77
+ @keywords.last.headings.should include('matchers')
78
+ end
79
+
80
+ it "should return the hooks keywords for language" do
81
+ @keywords.first.headings.should include('hooks')
82
+ end
83
+
84
+ it "should return some keywords for a empty language" do
85
+ @es = SpecI18n::Parser::NaturalLanguage.get('es')
86
+ @keywords = LanguageHelpFormatter.list_advanced_keywords(@out, @es)
87
+ @keywords.first.headings.should include('hooks')
88
+ end
89
+ end
90
+
91
+ end
92
+
24
93
  end
25
94
  end
26
95
  end
@@ -20,4 +20,4 @@ describe Main do
20
20
  end
21
21
  end
22
22
 
23
- end
23
+ end
@@ -0,0 +1,125 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe "implicit subject" do
6
+
7
+ before(:each) do
8
+ @pt = portuguese_language({'subject' => 'assunto', 'should' => 'deve',
9
+ 'should_not' => 'nao_deve','matchers' => {}})
10
+ Subject::ExampleMethods.register_subjects
11
+ @es = spanish_language({'subject' => 'asunto', 'should' => 'deve',
12
+ 'should_not' => 'nao_deve', 'matchers' => {}})
13
+ Subject::ExampleMethods.register_subjects
14
+ end
15
+
16
+ it 'should have the subject translated' do
17
+ values = @pt['subject'].split('|')
18
+ values << @es['subject'].split('|')
19
+ values.flatten.each do |value_method|
20
+ Subject::ExampleMethods.instance_methods.should be_include(value_method)
21
+ end
22
+ end
23
+
24
+ it "should have the should and should_not method trasnlated" do
25
+ values = @pt['should'].split('|')
26
+ other_values = @pt['should_not'].split('|')
27
+ values << other_values
28
+ values.flatten.each do |value_method|
29
+ Subject::ExampleMethods.instance_methods.should be_include(value_method)
30
+ end
31
+ end
32
+
33
+ describe "with a class" do
34
+ it "returns an instance of the class" do
35
+ group = Class.new(ExampleGroupDouble).describe(Array)
36
+ example = group.new(ExampleProxy.new)
37
+ example.assunto.should == []
38
+ end
39
+ end
40
+
41
+ describe "with a Module" do
42
+ it "returns the Module" do
43
+ group = Class.new(ExampleGroupDouble).describe(Enumerable)
44
+ example = group.new(ExampleProxy.new)
45
+ example.assunto.should == Enumerable
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "explicit subject" do
51
+ describe "defined in a top level group" do
52
+ it "replaces the implicit subject in that group" do
53
+ group = Class.new(ExampleGroupDouble).describe(Array)
54
+ group.subject { [1,2,3] }
55
+ example = group.new(ExampleProxy.new)
56
+ example.asunto.should == [1,2,3]
57
+ end
58
+ end
59
+ end
60
+
61
+ describe 'defined in a top level group' do
62
+
63
+ before(:each) do
64
+ @group = Class.new do
65
+ extend Spec::Example::Subject::ExampleGroupMethods
66
+ include Spec::Example::Subject::ExampleMethods
67
+ class << self
68
+ def described_class
69
+ Array
70
+ end
71
+ end
72
+ def described_class
73
+ self.class.described_class
74
+ end
75
+
76
+ subject {
77
+ [1,2,3]
78
+ }
79
+ end
80
+ end
81
+
82
+ it "is available in a nested group (subclass)" do
83
+ nested_group = Class.new(@group)
84
+
85
+ example = nested_group.new
86
+ example.assunto.should == [1,2,3]
87
+ end
88
+
89
+ it "is available in a doubly nested group (subclass)" do
90
+ nested_group = Class.new(@group)
91
+ doubly_nested_group = Class.new(nested_group)
92
+
93
+ example = doubly_nested_group.new
94
+ example.subject.should == [1,2,3]
95
+ end
96
+
97
+ end
98
+
99
+ describe ".its (to access subject's attributes)" do
100
+
101
+ before(:each) do
102
+ @its_examples = {'subject' => 'assunto', 'its' => 'exemplos', 'matchers' => {}}
103
+ @pt = portuguese_language(@its_examples)
104
+ Subject::ExampleGroupMethods.register_subjects
105
+ @es = spanish_language({'subject' => 'assunto', 'its' => 'ejemplos', 'matchers' => {}})
106
+ Subject::ExampleGroupMethods.register_subjects
107
+ end
108
+
109
+ with_sandboxed_options do
110
+ it "passes when expectation should pass" do
111
+ group = Class.new(ExampleGroupDouble).describe(Array)
112
+ child = group.exemplos(:length) { should == 0 }
113
+ child.run(options).should == true
114
+ end
115
+
116
+ it "fails when expectation should fail" do
117
+ group = Class.new(ExampleGroupDouble).describe(Array)
118
+ child = group.ejemplos(:length) { should == 1 }
119
+ child.run(options).should == false
120
+ end
121
+ end
122
+ end
123
+
124
+ end
125
+ end
@@ -10,6 +10,7 @@ describe Object, "#should and #should_not" do
10
10
  @languages.each do |language|
11
11
  Spec::Runner.configuration.spec_language(language)
12
12
  language = SpecI18n::Parser::NaturalLanguage.get(language)
13
+
13
14
  language.expectation_keywords.values.flatten.each do |keyword|
14
15
  Kernel.methods.should be_include(keyword)
15
16
  end