speckle 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +39 -0
  6. data/Rakefile +230 -0
  7. data/bin/speckle +12 -0
  8. data/lib/dsl.riml +29 -0
  9. data/lib/expectation.riml +34 -0
  10. data/lib/matchers/above_matcher.riml +13 -0
  11. data/lib/matchers/atleast_matcher.riml +13 -0
  12. data/lib/matchers/atmost_matcher.riml +13 -0
  13. data/lib/matchers/below_matcher.riml +13 -0
  14. data/lib/matchers/between_matcher.riml +19 -0
  15. data/lib/matchers/boolean_matcher.riml +13 -0
  16. data/lib/matchers/dict_key_matcher.riml +14 -0
  17. data/lib/matchers/equality_matcher.riml +13 -0
  18. data/lib/matchers/existance_matcher.riml +13 -0
  19. data/lib/matchers/length_matcher.riml +14 -0
  20. data/lib/matchers/match_item.riml +8 -0
  21. data/lib/matchers/match_tester.riml +33 -0
  22. data/lib/matchers/matchers.riml +72 -0
  23. data/lib/matchers/regexp_matcher.riml +14 -0
  24. data/lib/matchers/within_matcher.riml +28 -0
  25. data/lib/reporters/base_reporter.riml +126 -0
  26. data/lib/reporters/dotmatrix_reporter.riml +47 -0
  27. data/lib/reporters/min_reporter.riml +13 -0
  28. data/lib/reporters/reporter_factory.riml +15 -0
  29. data/lib/reporters/spec_reporter.riml +58 -0
  30. data/lib/reporters/tap_reporter.riml +38 -0
  31. data/lib/runners/runner.riml +49 -0
  32. data/lib/runners/spec_runner.riml +96 -0
  33. data/lib/speckle/cli/app.rb +18 -0
  34. data/lib/speckle/cli/controller.rb +67 -0
  35. data/lib/speckle/cli/environment.rb +148 -0
  36. data/lib/speckle/cli/rake_app.rb +146 -0
  37. data/lib/speckle/cli/router.rb +16 -0
  38. data/lib/speckle/loader.rb +10 -0
  39. data/lib/speckle/version.rb +3 -0
  40. data/lib/speckle.rb +4 -0
  41. data/lib/speckle.riml +148 -0
  42. data/lib/utils/spec_meta.riml +30 -0
  43. data/lib/utils/spec_timer.riml +30 -0
  44. data/lib/utils/statistician.riml +70 -0
  45. data/lib/writers/buffer_writer.riml +37 -0
  46. data/lib/writers/console_writer.riml +28 -0
  47. data/lib/writers/file_writer.riml +31 -0
  48. data/lib/writers/writer_factory.riml +13 -0
  49. data/spec/after_hooks_spec.riml +58 -0
  50. data/spec/before_hooks_spec.riml +38 -0
  51. data/spec/matchers/above_matcher_spec.riml +27 -0
  52. data/spec/matchers/atleast_matcher_spec.riml +28 -0
  53. data/spec/matchers/atmost_matcher_spec.riml +29 -0
  54. data/spec/matchers/below_matcher_spec.riml +28 -0
  55. data/spec/matchers/between_matcher_spec.riml +17 -0
  56. data/spec/matchers/boolean_matcher_spec.riml +27 -0
  57. data/spec/matchers/custom_matcher_spec.riml +47 -0
  58. data/spec/matchers/dict_key_matcher_spec.riml +19 -0
  59. data/spec/matchers/equality_matcher_spec.riml +31 -0
  60. data/spec/matchers/existance_matcher_spec.riml +17 -0
  61. data/spec/matchers/length_matcher_spec.riml +18 -0
  62. data/spec/matchers/regexp_matcher_spec.riml +31 -0
  63. data/spec/matchers/within_matcher_spec.riml +18 -0
  64. data/spec/spec_helper.rb +1 -0
  65. data/spec/speckle/cli/environment_spec.rb +296 -0
  66. data/speckle.gemspec +30 -0
  67. metadata +210 -0
@@ -0,0 +1,13 @@
1
+ class WriterFactory
2
+ defm get_writer(writer_name)
3
+ if a:writer_name == 'file'
4
+ return new FileWriter()
5
+ elseif a:writer_name == 'console'
6
+ return new ConsoleWriter()
7
+ elseif a:writer_name == 'buffer'
8
+ return new BufferWriter()
9
+ else
10
+ return new BufferWriter()
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,58 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class AfterHookSpec
4
+ defm describe
5
+ return 'After hooks'
6
+ end
7
+
8
+ defm before
9
+ self.stuff = 'foo'
10
+ end
11
+
12
+ defm it_adds_more_stuff
13
+ self.more_stuff = 'bar'
14
+ expect(self.stuff).to_equal('foo')
15
+ end
16
+
17
+ defm after
18
+ unless self.stuff == 'foo'
19
+ throw 'before hook not called'
20
+ end
21
+ unless self.more_stuff == 'bar'
22
+ throw 'after called before test'
23
+ end
24
+ end
25
+ end
26
+
27
+ class AfterEachHookSpec
28
+ defm describe
29
+ return 'After_each hooks'
30
+ end
31
+
32
+ defm before
33
+ self.stuff = 'foo'
34
+ end
35
+
36
+ defm it_adds_some_more_stuff
37
+ self.more_stuff = 'bar'
38
+ expect(self.stuff).to_equal('foo')
39
+ end
40
+
41
+ defm after_each
42
+ unless self.stuff == 'foo'
43
+ throw 'before hook not called'
44
+ end
45
+ unless self.more_stuff == 'bar'
46
+ throw 'after called before test'
47
+ end
48
+
49
+ self.even_more_stuff = 'foobar'
50
+ end
51
+
52
+ defm after
53
+ unless self.even_more_stuff == 'foobar'
54
+ throw 'after_each called before after'
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,38 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class BeforeHookSpec
4
+ defm describe
5
+ return 'Before hooks'
6
+ end
7
+
8
+ defm before
9
+ self.stuff = 'foo'
10
+ end
11
+
12
+ defm it_has_stuff_from_before
13
+ expect(self.stuff).to_equal('foo')
14
+ end
15
+
16
+ defm it_still_has_stuff_from_before
17
+ expect(self.stuff).to_equal('foo')
18
+ end
19
+ end
20
+
21
+ class BeforeEachHookSpec
22
+ defm describe
23
+ return 'Before_each hooks'
24
+ end
25
+
26
+ defm before_each
27
+ self.stuff = 'foo'
28
+ end
29
+
30
+ defm it_has_stuff_from_before_each
31
+ expect(self.stuff).to_equal('foo')
32
+ end
33
+
34
+ defm it_still_has_stuff_from_before_each
35
+ expect(self.stuff).to_equal('foo')
36
+ end
37
+ end
38
+
@@ -0,0 +1,27 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class AboveMatcherSpec
4
+ defm describe
5
+ return 'AboveMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_upper_bounds
9
+ expect(10).to_be_above(1)
10
+ expect(20).to_be_above(10)
11
+ end
12
+
13
+ defm it_can_check_for_negation_of_upper_bounds
14
+ expect(10).to_not_be_above(20)
15
+ expect(10).to_not_be_above(10)
16
+ end
17
+
18
+ defm it_can_check_for_upper_bounds_with_alias_gt
19
+ expect(10).to_be_gt(1)
20
+ expect(20).to_be_gt(10)
21
+ end
22
+
23
+ defm it_can_check_for_negation_of_upper_bounds_with_alias_gt
24
+ expect(10).to_not_be_gt(20)
25
+ expect(10).to_not_be_gt(10)
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class AtleastMatcherSpec
4
+ defm describe
5
+ return 'AtleastMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_least
9
+ expect(5).to_be_at_least(5)
10
+ expect(10).to_be_at_least(6)
11
+ end
12
+
13
+ defm it_can_check_for_negation_of_least
14
+ expect(5).to_not_be_at_least(6)
15
+ expect(10).to_not_be_at_least(11)
16
+ end
17
+
18
+ defm it_can_check_for_least_with_gte_alias
19
+ expect(5).to_be_gte(5)
20
+ expect(10).to_be_gte(6)
21
+ end
22
+
23
+ defm it_can_check_for_negation_of_least_with_gte_alias
24
+ expect(5).to_not_be_gte(6)
25
+ expect(10).to_not_be_gte(11)
26
+ end
27
+
28
+ end
@@ -0,0 +1,29 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class AtmostMatcherSpec
4
+ defm describe
5
+ return 'AtmostMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_most
9
+ expect(5).to_be_at_most(5)
10
+ expect(5).to_be_at_most(6)
11
+ expect(6).to_be_at_most(10)
12
+ end
13
+
14
+ defm it_can_check_for_negation_of_most
15
+ expect(6).to_not_be_at_most(5)
16
+ expect(11).to_not_be_at_most(10)
17
+ end
18
+
19
+ defm it_can_check_for_most_with_alias_lte
20
+ expect(5).to_be_lte(5)
21
+ expect(5).to_be_lte(6)
22
+ expect(6).to_be_lte(10)
23
+ end
24
+
25
+ defm it_can_check_for_negation_of_most_with_alias_lte
26
+ expect(6).to_not_be_lte(5)
27
+ expect(11).to_not_be_lte(10)
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class BelowMatcherSpec
4
+ defm describe
5
+ return 'BelowMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_lower_bounds
9
+ expect(10).to_be_below(20)
10
+ expect(10).to_be_below(25)
11
+ end
12
+
13
+ defm it_can_check_for_negation_of_below
14
+ expect(10).to_not_be_below(1)
15
+ expect(10).to_not_be_below(10)
16
+ end
17
+
18
+ defm it_can_check_for_lower_bounds_with_lt_alias
19
+ expect(10).to_be_lt(20)
20
+ expect(10).to_be_lt(25)
21
+ end
22
+
23
+ defm it_can_check_for_negation_of_below_with_lt_alias
24
+ expect(10).to_not_be_lt(1)
25
+ expect(10).to_not_be_lt(10)
26
+ end
27
+
28
+ end
@@ -0,0 +1,17 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class BetweenMatcherSpec
4
+ defm describe
5
+ return 'BetweenMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_value_between_bounds
9
+ expect(10).to_be_between([1, 100])
10
+ expect(10).to_be_between([1, 10])
11
+ expect(1).to_be_between([1, 10])
12
+ end
13
+
14
+ defm it_can_check_for_value_outside_bounds
15
+ expect(10).to_not_be_between([20, 30])
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class BooleanMatcherSpec
4
+ defm describe
5
+ return 'BooleanMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_truthy
9
+ expect(true).to_be_true()
10
+ expect(1).to_be_true()
11
+ end
12
+
13
+ defm it_can_check_for_truthy_with_ok
14
+ expect(true).to_be_ok()
15
+ expect(1).to_be_ok()
16
+ end
17
+
18
+ defm it_can_check_for_falsy
19
+ expect(false).to_be_false()
20
+ expect(0).to_be_false()
21
+ end
22
+
23
+ defm it_can_check_for_falsy_with_not_ok
24
+ expect(false).to_not_be_ok()
25
+ expect(0).to_not_be_ok()
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class Person
4
+ def initialize(name)
5
+ self.name = name
6
+ end
7
+
8
+ defm get_name()
9
+ return self.name
10
+ end
11
+ end
12
+
13
+ class PersonNameMatcher
14
+ defm match(expected, actual)
15
+ self.result = actual.get_name()
16
+ return self.result == expected
17
+ end
18
+
19
+ defm failure_message_for_match(expected, actual)
20
+ return "expected person name to be “#{expected}” but was “#{self.result}”"
21
+ end
22
+
23
+ defm failure_message_for_mismatch(expected, actual)
24
+ return "expected person name to not be “#{expected}” but was “#{self.result}”"
25
+ end
26
+ end
27
+
28
+ matcher = new PersonNameMatcher()
29
+ define_matcher('to_have_name', 'to_not_have_name', matcher)
30
+
31
+ class PersonNameMatcherSpec
32
+ defm describe
33
+ return 'Custom matcher to_have_name and to_not_have_name'
34
+ end
35
+
36
+ defm before_each
37
+ self.person = new Person('john')
38
+ end
39
+
40
+ defm it_can_check_for_persons_name
41
+ expect(self.person).to_have_name('john')
42
+ end
43
+
44
+ defm it_can_check_for_negation_of_persons_name
45
+ expect(self.person).to_not_have_name('foo')
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class DictKeyMatcherSpec
4
+ defm describe
5
+ return 'DictKeyMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_presence_of_key
9
+ box = {}
10
+ box.red = 'yes'
11
+
12
+ expect(box).to_have_key('red')
13
+ end
14
+
15
+ defm it_can_check_for_absence_of_key
16
+ box = {}
17
+ expect(box).to_not_have_key('red')
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class EqualityMatcherSpec
4
+ defm describe
5
+ return "EqualityMatcher"
6
+ end
7
+
8
+ defm it_can_check_equality_of_strings
9
+ expect('foo').to_equal('foo')
10
+ end
11
+
12
+ defm it_can_check_inequality_of_strings
13
+ expect('foo').to_not_equal('bar')
14
+ end
15
+
16
+ defm it_can_check_equality_of_numbers
17
+ expect(1).to_equal(1)
18
+ end
19
+
20
+ defm it_can_check_inequality_of_numbers
21
+ expect(1).to_not_equal(2)
22
+ end
23
+
24
+ defm it_can_check_equality_with_alias_eq
25
+ expect('foo').to_eq('foo')
26
+ end
27
+
28
+ defm it_can_check_inequality_with_alias_neq
29
+ expect('foo').to_neq('bar')
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class ExistanceMatcherSpec
4
+
5
+ defm describe
6
+ return 'ExistanceMatcher'
7
+ end
8
+
9
+ defm it_can_check_for_presence_of_global_variable
10
+ g:existance_matcher_global_var = 1
11
+ expect('g:existance_matcher_global_var').to_exist()
12
+ end
13
+
14
+ defm it_can_check_for_absence_of_global_variable
15
+ expect('g:undefined_existance_matcher_global_var').to_not_exist()
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class LengthMatcherSpec
4
+ defm describe
5
+ return 'LengthMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_length_of_string
9
+ expect("foo").to_have_length(3)
10
+ expect("foo").to_not_have_length(4)
11
+ end
12
+
13
+ defm it_can_check_for_length_of_list
14
+ expect([1, 2, 3]).to_have_length(3)
15
+ expect([1, 2, 3]).to_not_have_length(4)
16
+ end
17
+
18
+ end
@@ -0,0 +1,31 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class RegExpMatcherSpec
4
+ defm describe
5
+ return 'RegExpMatcher'
6
+ end
7
+
8
+ defm it_can_match_string_patterns
9
+ expect('lorem').to_match("ore")
10
+ expect('lorem').to_not_match('foo')
11
+ end
12
+
13
+ defm it_can_match_regex_patterns
14
+ expect('lorem').to_match("^l")
15
+ expect('lorem').to_match("m$")
16
+
17
+ expect('lorem').to_not_match("^r")
18
+ expect('lorem').to_not_match("a$")
19
+ end
20
+
21
+ defm it_can_match_strings
22
+ expect('lorem').to_have_string('ore')
23
+ expect('lorem').to_not_have_string('ipsum')
24
+ end
25
+
26
+ defm it_can_match_complex_patterns
27
+ expect('Four0Five').to_match('^\w\+[0-9]\w\+$')
28
+ expect('0Four0').to_not_match('^\w\+[0-9]\w\+$')
29
+ end
30
+
31
+ end
@@ -0,0 +1,18 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class WithinMatcherSpec
4
+ defm describe
5
+ return 'WithinMatcher'
6
+ end
7
+
8
+ defm it_can_check_for_floats_within_delta
9
+ expect(5).to_be_within([0.2, 5.1])
10
+ expect(5.005).to_be_within([0.01, 5.006])
11
+ end
12
+
13
+ defm it_can_check_for_floats_outside_delta
14
+ expect(5).to_not_be_within([0.02, 5.1])
15
+ expect(5.005).to_not_be_within([0.0001, 5.006])
16
+ end
17
+
18
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/speckle/loader')