rspec-i18n 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Matchers
5
+ describe "[actual.should] be_close(expected, delta)" do
6
+
7
+ before(:each) do
8
+ @expected_matcher = {'matchers' => { 'be_close' => 'estar_perto'} }
9
+ portuguese_language(@expected_matcher)
10
+ Spec::Matchers.register_all_matchers
11
+ end
12
+
13
+ it "should register the be_close matcher" do
14
+ values = @expected_matcher['matchers']['be_close'].split('|')
15
+ values.each do |value_method|
16
+ Object.instance_methods.should be_include(value_method)
17
+ end
18
+ end
19
+
20
+ it "matches when actual == expected" do
21
+ estar_perto(5.0, 0.5).matches?(5.0).should be_true
22
+ end
23
+
24
+ it "matches when actual < (expected + delta)" do
25
+ estar_perto(5.0, 0.5).matches?(5.49).should be_true
26
+ end
27
+
28
+ it "does not match when actual == (expected - delta)" do
29
+ estar_perto(5.0, 0.5).matches?(4.5).should be_false
30
+ end
31
+ it "does not match when actual < (expected - delta)" do
32
+ estar_perto(5.0, 0.5).matches?(4.49).should be_false
33
+ end
34
+ it "does not match when actual == (expected + delta)" do
35
+ estar_perto(5.0, 0.5).matches?(5.5).should be_false
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Matchers
5
+ describe 'the be_instance_of method' do
6
+
7
+ before(:each) do
8
+ @expected_matcher = { 'matchers' => { 'be_an_instance_of' => 'ser_instancia_de'} }
9
+ portuguese_language(@expected_matcher)
10
+ Spec::Matchers.register_all_matchers
11
+ end
12
+
13
+ it "register the be_an_instance_of method" do
14
+ values = @expected_matcher['matchers']['be_an_instance_of'].split('|')
15
+ values.each do |value_method|
16
+ Object.instance_methods.should be_include(value_method)
17
+ end
18
+ end
19
+
20
+ it "passes if actual is instance of expected class" do
21
+ 5.should send(:ser_instancia_de, Fixnum)
22
+ end
23
+
24
+ it "fails if actual is instance of subclass of expected class" do
25
+ lambda {
26
+ 5.should send(:ser_instancia_de, Numeric)
27
+ }.should raise_error
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Matchers
5
+ describe 'the be_kind_of method' do
6
+
7
+ before(:each) do
8
+ @expected_matcher = { 'matchers' => { 'be_a_kind_of' => 'ser_do_tipo'} }
9
+ portuguese_language(@expected_matcher)
10
+ Spec::Matchers.register_all_matchers
11
+ end
12
+
13
+ it "register the be_an_instance_of method" do
14
+ values = @expected_matcher['matchers']['be_a_kind_of'].split('|')
15
+ values.each do |value_method|
16
+ Object.instance_methods.should be_include(value_method)
17
+ end
18
+ end
19
+
20
+ it "passes if actual is instance of expected class" do
21
+ 5.should send(:ser_do_tipo, Fixnum)
22
+ end
23
+
24
+ it "passes if actual is instance of subclass of expected class" do
25
+ 5.should send(:ser_do_tipo, Numeric)
26
+ end
27
+
28
+ it "fails with failure message for should unless actual is kind of expected class" do
29
+ lambda {
30
+ "foo".should send(:ser_do_tipo, Array)
31
+ }.should raise_error
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe "should be_predicate" do
4
+
5
+ before(:each) do
6
+ portuguese_language({"matchers" => {"be" => "ser"}})
7
+ Spec::Matchers.register_all_matchers
8
+ end
9
+
10
+ it "should pass with be language translated" do
11
+ atual = stub("atual", :feliz? => true)
12
+ atual.should ser_feliz
13
+ end
14
+
15
+ it "should fail when actual returns false for :predicate?" do
16
+
17
+
18
+ pending('verify rspec 1.3')
19
+
20
+ atual = stub("atual", :feliz? => false)
21
+ lambda {
22
+ atual.should be_feliz
23
+ }.should fail_with("expected feliz? to return true, got false")
24
+ end
25
+
26
+ it "should fail when actual returns false for :predicate?" do
27
+
28
+ pending('verify rspec 1.3')
29
+
30
+ atual = stub("atual", :feliz? => nil)
31
+ lambda {
32
+ atual.should be_feliz
33
+ }.should fail_with("expected feliz? to return true, got nil")
34
+ end
35
+
36
+ it 'should be true for the new :predicate' do
37
+ atual = true
38
+ pending("SHOULD translate true, false, nil, empty for the default MATCHERS")
39
+ atual.should ser_true
40
+ end
41
+
42
+ it 'should convert be word to english with two parameters' do
43
+ be_to_english(:ser_feliz, 'ser|estar').should == :be_feliz
44
+ end
45
+
46
+ it "should convert be word to english" do
47
+ be_to_english(:ser_feliz, :ser).should == :be_feliz
48
+ end
49
+
50
+ it "should keep the same word in english(don't break the rspec defaults)" do
51
+ be_to_english(:be_include, :be).should == :be_include
52
+ end
53
+
54
+ it "should keep the same word for the non existing word" do
55
+ be_to_english(:be_include, :ser).should == :be_include
56
+ end
57
+
58
+ it "should keep the same word for the nil be word" do
59
+ be_to_english(:be_include, nil).should == :be_include
60
+ end
61
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Matchers
5
+ describe "eql" do
6
+
7
+ before(:each) do
8
+ @expected_matcher = {'matchers' => {'eql' => 'igl'}}
9
+ portuguese_language(@expected_matcher)
10
+ Spec::Matchers.register_all_matchers
11
+ end
12
+
13
+ it "should have eql matchers translated" do
14
+ eql_word = @expected_matcher['matchers']['eql']
15
+ 1.methods.should be_include(eql_word)
16
+ end
17
+
18
+ it "should have eql? matchers translated" do
19
+ eql_word = @expected_matcher['matchers']['eql'] + '?'
20
+ 1.methods.should be_include(eql_word)
21
+ end
22
+
23
+ it "should match when actual.eql?(expected)" do
24
+ 1.should igl(1)
25
+ end
26
+
27
+ it "should not match when !actual.eql?(expected)" do
28
+ 1.should_not igl(2)
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ module Spec
4
+ module Matchers
5
+ describe 'equal' do
6
+ before(:each) do
7
+ @expected_matcher = {'matchers' => {'equal' => 'igual|igual_a'}}
8
+ portuguese_language(@expected_matcher)
9
+ Spec::Matchers.register_all_matchers
10
+ end
11
+
12
+ it 'should register the methods for the value equal matcher' do
13
+ values = @expected_matcher['matchers']['equal'].split('|')
14
+ values.each { |method_name| Object.instance_methods.should be_include(method_name) }
15
+ end
16
+
17
+ it "should match when actual.equal?(expected)" do
18
+ 1.should igual(1)
19
+ end
20
+
21
+ it "should not match when !actual.equal?(expected)" do
22
+ 1.should_not igual_a("1")
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ # The same class in rspec specs file
4
+ class Substance
5
+ def initialize exists, description
6
+ @exists = exists
7
+ @description = description
8
+ end
9
+ def exist?(arg=nil)
10
+ @exists
11
+ end
12
+ end
13
+
14
+ module Spec
15
+ module Matchers
16
+
17
+ describe "exist matcher" do
18
+
19
+ before(:each) do
20
+ @expected_matcher = {'matchers' => {'exist' => 'existir'}}
21
+ portuguese_language(@expected_matcher)
22
+ Spec::Matchers.register_all_matchers
23
+ @real = Substance.new true, 'something real'
24
+ @imaginary = Substance.new false, 'something imaginary'
25
+ end
26
+
27
+ it 'should register the exist method translated' do
28
+ values = @expected_matcher['matchers']['exist'].split('|')
29
+ values.each do |value_method|
30
+ Object.instance_methods.should be_include(value_method)
31
+ end
32
+ end
33
+
34
+ it "passes if target exists" do
35
+ @real.should existir
36
+ end
37
+
38
+ it "fails if target does not exist" do
39
+ lambda { @imaginary.should exist }.should raise_error
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'have, have_exactly, have_at_least and have_at_most matcher' do
4
+
5
+ before(:each) do
6
+ matchers = {'have' => 'ter', 'have_at_least' => 'ter_no_minimo',
7
+ 'have_exactly' => 'ter_exatamente',
8
+ 'have_at_most' => 'ter_no_maximo'}
9
+ @expected_matcher = {'matchers' => matchers}
10
+ portuguese_language(@expected_matcher)
11
+ Spec::Matchers.register_all_matchers
12
+ end
13
+
14
+ describe 'should have(n).items' do
15
+
16
+ it 'should pass if target has a collection of items with n members' do
17
+ [1, 2, 3].should ter(3).items
18
+ end
19
+
20
+ it "should pass if target has a collection of items with < n members" do
21
+ [1, 2, 3].should_not ter(4).items
22
+ end
23
+
24
+ end
25
+
26
+ describe 'should have_exactly(n).items' do
27
+
28
+ it "should pass if target has a collection of items with n members" do
29
+ [1,2,3].should ter_exatamente(3).items
30
+ end
31
+
32
+ it 'should fail if target has a collection of items with < n members' do
33
+ [1,2,3].should_not ter_exatamente(4).items
34
+ end
35
+
36
+ end
37
+
38
+ describe "should have_at_least(n).items" do
39
+
40
+ it "should pass if target has a collection of items with n members" do
41
+ [1, 2, 3].should ter_no_minimo(3).items
42
+ end
43
+
44
+ it "should fail if target has a collection of items with < n members" do
45
+ [1, 2, 3].should_not ter_no_minimo(4).items
46
+ end
47
+
48
+ end
49
+
50
+ describe "should have_at_most(n).items" do
51
+
52
+ it "should pass if target has a collection of items with n members" do
53
+ [1, 2, 3].should ter_no_maximo(3).items
54
+ end
55
+
56
+ it "should fail if target has a collection of items with > n members" do
57
+ [1, 2, 3].should_not ter_no_maximo(2).items
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe "should include(expected)" do
4
+ before(:each) do
5
+ @expected_matcher = {'matchers' => { 'include' => 'incluir'} }
6
+ portuguese_language(@expected_matcher)
7
+ Spec::Matchers.register_all_matchers
8
+ end
9
+
10
+ it "should translated the include matcher" do
11
+ values = @expected_matcher['matchers']['include'].split('|')
12
+
13
+ values.each do |value_method|
14
+ Object.instance_methods.should be_include(value_method)
15
+ end
16
+
17
+ end
18
+
19
+ it "should pass if target includes expected" do
20
+ [1,2,3].should incluir(3)
21
+ "abc".should incluir("a")
22
+ end
23
+
24
+ it 'should pass if target is a Hash and has the expected as a key' do
25
+ {:key => 'value'}.should incluir(:key)
26
+ end
27
+
28
+ it "should fail if target does not include expected" do
29
+ lambda {
30
+ [1,2,3].should incluir(4)
31
+ }.should raise_error
32
+ end
33
+
34
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe "should match(expected)" do
4
+ before(:each) do
5
+ @expected_matcher = {'matchers' => { 'match' => 'corresponder'} }
6
+ portuguese_language(@expected_matcher)
7
+ Spec::Matchers.register_all_matchers
8
+ end
9
+
10
+ it "should translated the include matcher" do
11
+ values = @expected_matcher['matchers']['match'].split('|')
12
+ values.each do |value_method|
13
+ Object.instance_methods.should be_include(value_method)
14
+ end
15
+ end
16
+
17
+ it "should pass when target (String) matches expected (Regexp)" do
18
+ "string".should corresponder(/tri/)
19
+ end
20
+
21
+ it "should pass when target (String) matches expected (String)" do
22
+ "string".should corresponder("tri")
23
+ end
24
+
25
+ it "should fail when target (String) does not match expected (Regexp)" do
26
+ lambda {
27
+ "string".should corresponder(/rings/)
28
+ }.should raise_error
29
+ end
30
+
31
+ it "should fail when target (String) does not match expected (String)" do
32
+ lambda {
33
+ "string".should corresponder("rings")
34
+ }.should raise_error
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe "should raise_error" do
4
+
5
+ before(:each) do
6
+ @expected_matcher = {'matchers' => {'raise_error' => 'mostrar_erro'}}
7
+ portuguese_language(@expected_matcher)
8
+ Spec::Matchers.register_all_matchers
9
+ end
10
+
11
+ it 'should register the methods for the value equal matcher' do
12
+ values = @expected_matcher['matchers']['raise_error'].split('|')
13
+ values.each { |method_name| Object.instance_methods.should be_include(method_name) }
14
+ end
15
+
16
+ it "should pass if anything is raised" do
17
+ lambda {raise}.should mostrar_erro
18
+ end
19
+
20
+ it "should fail if nothing is raised" do
21
+ lambda {
22
+ lambda {}.should mostrar_erro
23
+ }.should mostrar_erro
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ module SpecI18n
4
+ module Matchers
5
+ describe 'register all matcher' do
6
+
7
+ before(:each) do
8
+ Spec::Runner.configuration.spec_language('pt')
9
+ end
10
+
11
+ it 'should not raise error for register all the words for i18n' do
12
+ lambda { Spec::Matchers.register_all_matchers }.should_not raise_error
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "should satisfy { block }" do
4
+
5
+ before(:each) do
6
+ @expected_matcher = { 'matchers' => { 'satisfy' => 'satisfazer'} }
7
+ portuguese_language(@expected_matcher)
8
+ Spec::Matchers.register_all_matchers
9
+ end
10
+
11
+ it 'should trasnlate the satisfy matcher' do
12
+ values = @expected_matcher['matchers']['satisfy'].split('|')
13
+ values.each do |value_method|
14
+ Object.instance_methods.should be_include(value_method)
15
+ end
16
+ end
17
+
18
+ it "should pass if block returns true" do
19
+ true.should satisfazer { |val| val }
20
+ true.should satisfazer do |val|
21
+ val
22
+ end
23
+ end
24
+
25
+ it "should fail if block returns false" do
26
+ false.should_not satisfazer { |val| val }
27
+ end
28
+ end
@@ -25,71 +25,23 @@ module SpecI18n
25
25
 
26
26
  end
27
27
 
28
- context "imcomplete languages" do
28
+ context "incomplete languages" do
29
29
 
30
- it "should return true for the complete language" do
31
- @pt.incomplete?.should be_true
32
- end
33
-
34
- it "should return false for the imcomplete language" do
35
- @pt.stub!(:keywords).and_return({ :name => []})
30
+ it "should return false for the complete language" do
36
31
  @pt.incomplete?.should be_false
37
32
  end
38
33
 
39
- end
40
-
41
- context "list languages" do
42
-
43
- before(:each) do
44
- @portuguese = ["pt", "Portuguese", "português"]
45
- @spanish = ["es", "Spanish", "español"]
46
- end
47
-
48
- it "should return the three keywords language for portuguese" do
49
- SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return("pt")
50
- NaturalLanguage.list_languages.should == [@portuguese]
51
- end
52
-
53
- it "should return the three keywords for spanish" do
54
- SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return("es")
55
- NaturalLanguage.list_languages.should == [@spanish]
34
+ it "should return true for the incomplete language" do
35
+ @pt.stub!(:keywords).and_return({ :name => []})
36
+ @pt.incomplete?.should be_true
56
37
  end
57
38
 
58
- it "should return the three keywords for spanish and portuguese" do
59
- SpecI18n::SPEC_LANGUAGES.should_receive(:keys).and_return(["pt", "es"])
60
- NaturalLanguage.list_languages.should == [@portuguese, @spanish].sort
61
- end
62
39
  end
63
40
 
64
- context "list all keywords" do
65
-
66
- before(:each) do
67
- @portuguese = NaturalLanguage.get("pt")
68
- end
69
-
70
- # TODO: It's 3 a.m in the morning ... Ugly Specs ... #FIXME
71
-
72
- it "should return the name keyword for the portuguese language" do
73
- name = ["name", "Portuguese"]
74
- NaturalLanguage.list_keywords("pt").first.should == name
75
- end
76
-
77
- it "should return the example keyword for the portuguese language" do
78
- keywords = NaturalLanguage.list_keywords('pt')
79
- example = keywords.map { |array| array if array.include?("it") }.compact.flatten
80
- example.should == ["it", "exemplo / especificar"]
81
- end
82
-
83
- it "should return all the keywords for the spanish language" do
84
- native = ["native", "español"]
85
- NaturalLanguage.list_keywords('es')[1].should == native
86
- end
87
-
88
- end
89
-
90
41
  %w(describe before after it should name native).each do |keyword|
91
42
  it "should have the #{keyword} keyword" do
92
- @pt.keywords.keys.should be_include(keyword)
43
+ portuguese_keys = @pt.keywords.keys
44
+ portuguese_keys.should include(keyword)
93
45
  end
94
46
  end
95
47
 
@@ -163,20 +115,52 @@ module SpecI18n
163
115
  end
164
116
  end
165
117
 
166
- context "of all matchers" do
167
- it "should parse all matchers"
118
+ context 'of example subject keywords' do
119
+
120
+ before(:each) do
121
+ @keywords = { "subject" => "assunto|tema" }
122
+ @spanish_keywords = { 'subject' => 'asunto|tema'}
123
+ end
124
+
125
+ it 'should return the subject keywords' do
126
+ @pt.stub!(:keywords).and_return(@keywords)
127
+ @pt.subject_keywords.should == {'subject' => ["assunto", "tema"]}
128
+ end
129
+
130
+ it 'should return the subject keywords for spanish language' do
131
+ @spanish_keywords.stub!(:keywords).and_return(@spanish_keywords)
132
+ @es.subject_keywords.should == { 'subject' => ['asunto', 'tema']}
133
+ end
168
134
  end
169
135
 
136
+ context 'of example its keywords' do
137
+
138
+ before(:each) do
139
+ @keywords = { "its" => "exemplos" }
140
+ @spanish_keywords = { 'its' => 'ejemplos'}
141
+ end
142
+
143
+ it 'should return the its keywords' do
144
+ @pt.stub!(:keywords).and_return(@keywords)
145
+ @pt.its_keywords.should == {'its' => ["exemplos"]}
146
+ end
147
+
148
+ it 'should return the its keywords for spanish language' do
149
+ @es.stub!(:keywords).and_return(@spanish_keywords)
150
+ @es.its_keywords.should == { 'its' => ['ejemplos']}
151
+ end
152
+ end
170
153
  context "splitting the keys" do
171
154
  it "should raise no found key" do
172
155
  lambda {
173
156
  @pt.spec_keywords("no_found")
157
+ @pt.spec_keywords("Oh_MY_this_words_is_not_found!")
174
158
  }.should raise_error(RuntimeError)
175
159
  end
176
160
 
177
161
  it "should split correctly the keys" do
178
162
  lang = { "describe" => "descreva|contexto" }
179
- NaturalLanguage.instance_variable_set(:@keywords, lang["describe"])
163
+ @pt.stub!(:keywords).and_return(lang)
180
164
  @pt.spec_keywords("describe").should == { "describe" => ["descreva", "contexto"] }
181
165
  end
182
166
  end