totally-osom-tests 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTI5YzFkNjE0MjkyMzVmMGMyYWYwYTViNjc0YzAyYzU1NjJiNmMwYw==
5
+ data.tar.gz: !binary |-
6
+ ZDQ1ODhjNTc5NGFiYzJlNTlkMTZlNDg0MmJhN2UyOTVhZThkZTQ2YQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NTQ5NTFlMTQ1Nzc3MDkyMTcyZTliZTY1YjY4NTI1YmZmNjdjMDRiNjRlY2E1
10
+ ODhiODNiOWUyZmZjOWQwYTI4YjFhNWUzMzI0YjZiNzNkYmMzOWZlODUzODIw
11
+ NjE0ZGVjYTY3NjBiZmI2NjJjOGU0MDJjNGNiNWJmNDU4OTI1NTc=
12
+ data.tar.gz: !binary |-
13
+ ZTgzZTBlZGFmNzZhZjIxNTllNGVmNDY3ZTc5ZjVlZWU5NGZhMDVmZDRlNGI2
14
+ ZWVmN2Y3MjgzNDRiODc1YTY4MDFlODdlNzFiYzViMWYxMWQ3NzY0NDdhOWNm
15
+ OTU5NzAxNDczNWM5YjgxZmQ4YWRjODJhYjNmNTExOTczMzhmM2E=
@@ -0,0 +1,28 @@
1
+ # Totaly Osom Tests
2
+
3
+ __NOTE__: This is purely an excersize in awesomeness. If you need testing framework
4
+ for a real-life project, please use rspec/test_case/whatever.
5
+
6
+ ## The Goal
7
+
8
+ 1. Zero hassle TDD experiense
9
+ 2. Simplified BDD specs syntax
10
+ 3. Flexible internal structure
11
+ 4. Easily extensible interface
12
+
13
+
14
+ ## Credits
15
+
16
+ Most of the parts in this thing are "inspired" by the following projects:
17
+
18
+ 1. [rspec](https://github.com/rspec/rspec)
19
+ 2. [minitest](https://github.com/seattlerb/minitest)
20
+ 3. [mocha](http://visionmedia.github.com/mocha)
21
+ 4. [vows](http://vowsjs.org)
22
+
23
+
24
+ ## Copyright
25
+
26
+ All the code in this repo is released under the terms of the MIT license
27
+
28
+ Copyright (C) 2013 Nikolay Nemshilov
@@ -0,0 +1,3 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require_relative '../lib/tots/cli'
@@ -0,0 +1,6 @@
1
+ #
2
+ # Just a rubygem hook
3
+ #
4
+ # Copyright (C) 2013 Nikolay Nemshilov
5
+ #
6
+ require_relative './tots'
@@ -0,0 +1,20 @@
1
+ #
2
+ # The main project's namespace
3
+ #
4
+ # Copyright (C) 2013 Nikolay Nemshilov
5
+ #
6
+ module TOTS
7
+ VERSION = '0.0.0'
8
+ end
9
+
10
+ require_relative './tots/asserts'
11
+ require_relative './tots/matcher'
12
+ require_relative './tots/matcher/awesome'
13
+ require_relative './tots/printer'
14
+ require_relative './tots/printer/dots'
15
+ require_relative './tots/printer/emoji'
16
+ require_relative './tots/watcher'
17
+ require_relative './tots/runner'
18
+ require_relative './tots/test'
19
+ require_relative './tots/spec'
20
+
@@ -0,0 +1,58 @@
1
+ #
2
+ # The standard assertions
3
+ #
4
+ module TOTS::Asserts
5
+ def assert(smth, msg="No message given")
6
+ TOTS::Printer.asserting(msg)
7
+
8
+ unless smth
9
+ raise TOTS::Test::Fail, msg
10
+ end
11
+ end
12
+
13
+ def assert_equal(v1, v2, msg=nil)
14
+ assert v1 == v2, msg || "#{v1.inspect} supposed to be equal to #{v2.inspect}"
15
+ end
16
+
17
+ def assert_empty(v, msg=nil)
18
+ assert_respond_to v, :empty?
19
+ assert v.empty?, msg || "#{v.inspect} supposed to be empty"
20
+ end
21
+
22
+ def assert_respond_to(obj, method, msg=nil)
23
+ assert obj.respond_to?(method), msg || "#{obj.inspect} supposed to respond to the #{method} method"
24
+ end
25
+
26
+ def assert_nil(v, msg=nil)
27
+ assert v === nil, msg || "#{v.inspect} supposed to be nil"
28
+ end
29
+
30
+ def assert_includes(list, value, msg=nil)
31
+ assert_respond_to list, :include?
32
+ assert list.include?(value), msg || "#{list.inspect} supposed to include #{value.inspect}"
33
+ end
34
+
35
+ def assert_match(obj, re, msg=nil)
36
+ assert_respond_to re, :=~
37
+ assert re =~ obj, msg || "#{obj.inspect} supposed to match #{re.inspect}"
38
+ end
39
+
40
+ def assert_instance_of(obj, klass, msg=nil)
41
+ assert obj.instance_of?(klass), msg || "#{obj.inspect} supposed to be instance of #{klass}"
42
+ end
43
+
44
+ def assert_raises(type, msg=nil, &block)
45
+ raise ArgumentError, "no block given" if !block_given?
46
+
47
+ begin
48
+ yield
49
+
50
+ assert false, msg || "expected to raise #{type}, but nothing was raised"
51
+
52
+ rescue Exception => e
53
+ if type && !(e.is_a?(type))
54
+ assert false, msg || "expected to raise #{type}, but got #{e.class} instead"
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ #
2
+ # Just an auto-run hook
3
+ #
4
+ # Add this into your tests to be able to run them as plain ruby
5
+ #
6
+ # ```ruby
7
+ # require 'tots/autorun'
8
+ #
9
+ # describe Stuff do
10
+ # end
11
+ # ```
12
+ #
13
+
14
+ require_relative '../tots' unless defined?(TOTS)
15
+
16
+ at_exit { TOTS::Runner.start }
@@ -0,0 +1,62 @@
1
+ #
2
+ # A simple CLI for the `tots` cmd
3
+ #
4
+ require_relative '../tots/autorun'
5
+
6
+ args = {}
7
+ dirs = []
8
+
9
+ dirt = ARGV.dup
10
+
11
+ while arg = dirt.shift
12
+ case arg
13
+ when '-h', '--help'
14
+ puts <<-EOF.gsub(/(\A|\n)\s+\|/, "\\1")
15
+ |TOTS Runner Help:
16
+ |
17
+ | tots path[ path ...] [OPTSIONS]
18
+ |
19
+ |
20
+ |OPTIONS:
21
+ |
22
+ | -h --help # show this help
23
+ | -w --watch # watch for changes in specified files/dires
24
+ | -r name --reporter name # specify the reporter
25
+ |
26
+ EOF
27
+ exit
28
+
29
+ when '-w', '--watch'
30
+ args['-w'] = true
31
+
32
+ when '-r', '--reporter'
33
+ args['-r'] = dirt.shift
34
+
35
+ else
36
+ # assuming it's a dir
37
+ dirs << arg
38
+ end
39
+ end
40
+
41
+ # setting the reporter
42
+ TOTS::Printer.set args['-r'] if args['-r']
43
+
44
+ # figuring the paths
45
+ dirs << 'test' if dirs.empty?
46
+
47
+ dirs.map! do |name|
48
+ name = name.slice(0, name.size - 1) if name[name.size-1] == '/'
49
+ File.exists?(name) && File.directory?(name) ? "#{name}/**/*_test.rb" : name
50
+ end
51
+
52
+ # including the test files
53
+ $LOAD_PATH << "#{Dir.pwd}/test/" if File.exists?('test') && File.directory?('test')
54
+
55
+ require "test_helper" if File.exists?("test/test_helper.rb")
56
+
57
+ Dir[*dirs].each do |name|
58
+ require "#{Dir.pwd}/#{name}"
59
+ end
60
+
61
+ # watching for the changes
62
+ TOTS::Watcher.watch(dirs) if args.include?('-w')
@@ -0,0 +1,16 @@
1
+ #
2
+ # The `must` thingy
3
+ #
4
+ class TOTS::Matcher
5
+ include TOTS::Asserts
6
+
7
+ def initialize(object, *args)
8
+ @object = object
9
+ end
10
+ end
11
+
12
+ class Object
13
+ def must(*args)
14
+ TOTS::Matcher.new(self)
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ #
2
+ # Awesome matchers handler
3
+ #
4
+ # ```ruby
5
+ # describe TOTS::Matcher::Awesome do
6
+ # it "must provide awesome matchers" do
7
+ # 22.must == 22
8
+ # 22.must > 11
9
+ # 22.must =~ /2/
10
+ # end
11
+ # end
12
+ # ```
13
+ #
14
+ class TOTS::Matcher
15
+ def ==(value)
16
+ assert @object == value, "#{@object.inspect} supposed to be equal #{value.inspect}"
17
+ end
18
+
19
+ def !=(value)
20
+ assert @object != value, "#{@object.inspect} supposed not to be equal #{value.inspect}"
21
+ end
22
+
23
+ def =~(value)
24
+ assert value =~ @object, "#{@object.inspect} doesn't match #{value.inspect}"
25
+ end
26
+
27
+ def >(value)
28
+ assert @object > value, "#{@object.inspect} supposed to be > than #{value.inspect}"
29
+ end
30
+
31
+ def <(value)
32
+ assert @object < value, "#{@object.inspect} supposed to be < than #{value.inspect}"
33
+ end
34
+
35
+ def >=(value)
36
+ assert @object >= value, "#{@object.inspect} supposed to be >= than #{value.inspect}"
37
+ end
38
+
39
+ def <=(value)
40
+ assert @object <= value, "#{@object.inspect} supposed to be <= than #{value.inspect}"
41
+ end
42
+ end
@@ -0,0 +1,126 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # Generic printer
5
+ #
6
+ class TOTS::Printer
7
+ RED = '1'
8
+ GREEN = '2'
9
+ YELLOW = '3'
10
+ VIOLET = '4'
11
+ MARGETA = '5'
12
+ BLUE = '6'
13
+ GREY = '7;2'
14
+
15
+ def self.set(name)
16
+ @klass = const_get(name[0].upcase + name.slice(1, name.size - 1))
17
+ end
18
+
19
+ def self.method_missing(*args)
20
+ @inst ||= (@klass || Dots).new
21
+
22
+ @inst.__send__(*args)
23
+ end
24
+
25
+ def initialize
26
+ @suites_count = 0
27
+ @tests_count = 0
28
+ @asserts_count = 0
29
+ @passed_count = 0
30
+ @fails_count = 0
31
+ @errors_count = 0
32
+ @skipped_count = 0
33
+
34
+ print "\n"
35
+ end
36
+
37
+ def pass
38
+ raise "Should be implemented in a subclass"
39
+ end
40
+
41
+ def skip
42
+ raise "Should be implemented in a subclass"
43
+ end
44
+
45
+ def fail
46
+ raise "Should be implemented in a subclass"
47
+ end
48
+
49
+ def error
50
+ raise "Should be implemented in a subclass"
51
+ end
52
+
53
+ def summary
54
+ {
55
+ :Asserts => @asserts_count,
56
+ :Tests => @tests_count,
57
+ :Passed => @passed_count,
58
+ :Failed => @fails_count,
59
+ :Errored => @errors_count,
60
+ :Skipped => @skipped_count
61
+
62
+ }.map do |key, value|
63
+ "#{value} #{key}"
64
+ end.join(', ')
65
+ end
66
+
67
+ def waiting
68
+ raise "Should be implemented in a subclass"
69
+ end
70
+
71
+ def paint(string, color)
72
+ "\e[3#{color}m#{string}\e[0m"
73
+ end
74
+
75
+ def highlight(string, color)
76
+ "\e[4#{color}m#{string}\e[0m"
77
+ end
78
+
79
+ def testing(suite)
80
+ @suite = suite
81
+
82
+ @suites_count += 1
83
+ end
84
+
85
+ def running(test)
86
+ @tests_count += 1
87
+ end
88
+
89
+ def asserting(msg)
90
+ @asserts_count += 1
91
+ end
92
+
93
+ def passed
94
+ @passed_count += 1
95
+ pass
96
+ end
97
+
98
+ def failed(e)
99
+ @fails_count += 1
100
+ fail(e)
101
+ end
102
+
103
+ def errored(e)
104
+ @errors_count += 1
105
+ error(e)
106
+ end
107
+
108
+ def skipped
109
+ @skipped_count += 1
110
+ skip
111
+ end
112
+
113
+ def finish
114
+ summary
115
+ end
116
+
117
+ def watching(on)
118
+ if on
119
+ puts "\n"
120
+ @waiting = Thread.new { waiting }
121
+ else
122
+ @waiting.kill if @waiting
123
+ puts "\n"
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # Your good old dots printer
5
+ #
6
+ class TOTS::Printer::Dots < TOTS::Printer
7
+ def pass
8
+ print paint(".", GREEN)
9
+ end
10
+
11
+ def skip
12
+ print paint('S', YELLOW)
13
+ end
14
+
15
+ def fail(e)
16
+ print paint('F', RED)
17
+ end
18
+
19
+ def error(e)
20
+ print paint('E', RED)
21
+ end
22
+
23
+ def summary
24
+ puts "\n\n"
25
+
26
+ if @fails_count == 0 && @errors_count == 0
27
+ print paint("✔ Osom! ", GREEN)
28
+ else
29
+ print paint("✖ Doh... ", RED)
30
+ end
31
+
32
+ puts paint(super, GREY)
33
+ end
34
+
35
+ CYLON_SIZE = 10
36
+
37
+ def waiting
38
+ puts "\n\n"
39
+
40
+ i = 0
41
+
42
+ while true
43
+ inc = 1 if i == 0
44
+ inc = -1 if i > (CYLON_SIZE - 3)
45
+
46
+ dots = Array.new(CYLON_SIZE).map{ |i| ' ' }
47
+
48
+ dots[i] = paint("■", RED)
49
+ dots[i - inc] = paint("■", RED + ";2") if i > 0
50
+ dots[i - 2 * inc] = paint("∙", RED + ";2") if i < CYLON_SIZE - 2 && i > 1
51
+
52
+ puts "\u001b[2A\r" + paint('Watching ', GREY) + dots.join('') + "\n\n"
53
+
54
+ sleep 0.07
55
+
56
+ i += inc
57
+ end
58
+ end
59
+ end
60
+
61
+
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # Emoji printer
5
+ #
6
+ class TOTS::Printer::Emoji < TOTS::Printer
7
+ GOOD = %w(🌵 🌴 🌲 🌳 🌿 🍀 🎄)
8
+ WAIT = %w(🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘)
9
+
10
+ def pass
11
+ print GOOD[rand(GOOD.size)] + " "
12
+ end
13
+
14
+ def skip
15
+ print '😴 '
16
+ end
17
+
18
+ def fail(e)
19
+ print '😡 '
20
+ end
21
+
22
+ def error(e)
23
+ print '💥 '
24
+ end
25
+
26
+ def summary
27
+ puts "\n\n"
28
+
29
+ if @fails_count == 0 && @errors_count == 0
30
+ print paint("😊 Happy! ", GREEN)
31
+ else
32
+ print paint("😱 Oh, no... ", RED)
33
+ end
34
+
35
+ puts paint(super, GREY)
36
+ end
37
+
38
+ CYLON_SIZE = 10
39
+
40
+ def waiting
41
+ puts "\n\n"
42
+
43
+ i = 0
44
+
45
+ while true
46
+ i = 0 if i > (WAIT.size - 1)
47
+
48
+ puts "\u001b[2A\r" + paint('Waiting ', GREY) + WAIT[i] + "\n\n"
49
+
50
+ sleep 0.08
51
+
52
+ i += 1
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # The runner
3
+ #
4
+ class TOTS::Runner
5
+
6
+ def self.<<(spec)
7
+ specs << spec
8
+ end
9
+
10
+ def self.specs
11
+ @specs ||= []
12
+ end
13
+
14
+ def self.start
15
+ specs.each(&:run)
16
+
17
+ TOTS::Printer.finish
18
+
19
+ TOTS::Watcher.check
20
+ end
21
+ end
@@ -0,0 +1,101 @@
1
+ #
2
+ # The spec unit
3
+ #
4
+ # Copyright (C) 2013 Nikolay Nemshilov
5
+ #
6
+ class TOTS::Spec
7
+ include TOTS::Asserts
8
+
9
+ # the tests stash
10
+ def self.tests
11
+ @tests ||= []
12
+ end
13
+
14
+ def self.specs
15
+ @specs ||= []
16
+ end
17
+
18
+ #
19
+ # Sub-describe blocks catcher
20
+ #
21
+ def self.describe(*args, &block)
22
+ specs << Class.new(TOTS::Spec, &block)
23
+ end
24
+
25
+ #
26
+ # alias for `describe`
27
+ #
28
+ def self.context(*args, &block)
29
+ describe(*args, &block)
30
+ end
31
+
32
+ #
33
+ # The basic `it` thingy
34
+ #
35
+ # ```ruby
36
+ # describe Smth do
37
+ # it "must do stuff" do
38
+ # end
39
+ # end
40
+ # ```
41
+ #
42
+ def self.it(*args,&block)
43
+ if args.size == 0
44
+ self
45
+ else
46
+ tests << TOTS::Test.new(args + [block])
47
+ end
48
+ end
49
+
50
+ #
51
+ # Quick, skip marking
52
+ #
53
+ # ```ruby
54
+ # describe Smth do
55
+ # it.skip "this test" do
56
+ # this_code.will_be(:skipped)
57
+ # end
58
+ # end
59
+ # ```
60
+ #
61
+ def self.skip(*args, &block)
62
+ it *args # skipping the block
63
+ end
64
+
65
+ #
66
+ # Runs the spec
67
+ #
68
+ def self.run
69
+ TOTS::Printer.testing self
70
+
71
+ suite = new
72
+
73
+ tests.each do |test|
74
+ TOTS::Printer.running test.name
75
+
76
+ begin
77
+ test.run(suite)
78
+
79
+ TOTS::Printer.passed
80
+
81
+ rescue TOTS::Test::Skip => e
82
+ TOTS::Printer.skipped
83
+
84
+ rescue TOTS::Test::Fail => e
85
+ TOTS::Printer.failed(e)
86
+ end
87
+ end
88
+
89
+ specs.each(&:run)
90
+ end
91
+
92
+ end
93
+
94
+ #
95
+ # the top-level describe
96
+ #
97
+ module Kernel
98
+ def describe(*args, &block)
99
+ TOTS::Runner << Class.new(TOTS::Spec, &block)
100
+ end
101
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # A single test case entity
3
+ #
4
+ class TOTS::Test
5
+ attr_accessor :name, :options, :block
6
+
7
+ class Skip < Exception; end
8
+ class Fail < Exception; end
9
+
10
+ def initialize(args)
11
+ @block = args.last.is_a?(Proc) ? args.pop : skip
12
+ @options = args.size > 1 && args.last.is_a?(Hash) ? args.pop : {}
13
+ @name = args[0] || 'no name given'
14
+ end
15
+
16
+ def skip
17
+ @block = Proc.new do
18
+ raise Skip
19
+ end
20
+ end
21
+
22
+ def run(context)
23
+ test = self
24
+
25
+ context.instance_eval do
26
+ @test_options = test.options
27
+ instance_eval &test.block
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # File changes watcher
3
+ #
4
+ class TOTS::Watcher
5
+
6
+ def self.watch(paths)
7
+ @paths = paths
8
+ end
9
+
10
+ def self.check
11
+ return if ! @paths
12
+
13
+ TOTS::Printer.watching(true)
14
+
15
+ setup; @watching = true if !@watching
16
+ end
17
+
18
+ def self.setup
19
+ require 'rb-fsevent'
20
+
21
+ fsevent = FSEvent.new
22
+ fsevent.watch Dir.pwd do |directories|
23
+ TOTS::Printer.watching(false)
24
+
25
+ puts "Detected change inside: #{directories.inspect}\n"
26
+
27
+ TOTS::Runner.start
28
+ end
29
+
30
+ fsevent.run
31
+ end
32
+
33
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../lib/tots/autorun'
2
+
3
+ class TOTS::Spec
4
+
5
+ def assert_fails(&block)
6
+ assert_raises TOTS::Test::Fail do
7
+ block.yield
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,113 @@
1
+ require 'test_helper'
2
+
3
+ describe TOTS::Spec do
4
+
5
+ describe "standard assertions" do
6
+ describe "assert" do
7
+ it "must pass with trues" do
8
+ assert true
9
+ end
10
+
11
+ it "must fail with false" do
12
+ assert_fails { assert(false) }
13
+ end
14
+ end
15
+
16
+ describe "assert_equal" do
17
+ it "must pass with equal data" do
18
+ assert_equal 2, 2
19
+ end
20
+
21
+ it "must fail with different data" do
22
+ assert_fails { assert_equal(1,2) }
23
+ end
24
+ end
25
+
26
+ describe "assert_empty" do
27
+ it "must pass correctly" do
28
+ assert_empty ''
29
+ end
30
+
31
+ it "must fail with a non-empty objects" do
32
+ assert_fails { assert_empty(' ') }
33
+ end
34
+
35
+ it "must fail with objects without the :empty? method" do
36
+ assert_fails { assert_empty(nil) }
37
+ end
38
+ end
39
+
40
+ describe "assert_respond_to" do
41
+ it "must pass correctly" do
42
+ assert_respond_to '', :size
43
+ end
44
+
45
+ it "must fail when method is missing" do
46
+ assert_fails { assert_respond_to('', :non_existing_method) }
47
+ end
48
+ end
49
+
50
+ describe "assert_nil" do
51
+ it "must pass correctly" do
52
+ assert_nil nil
53
+ end
54
+
55
+ it "must fail with non nils" do
56
+ assert_fails { assert_nil(false) }
57
+ assert_fails { assert_nil('') }
58
+ assert_fails { assert_nil(0) }
59
+ end
60
+ end
61
+
62
+ describe "assert_includes" do
63
+ it "must pass correctly" do
64
+ assert_includes [1,2,3], 2
65
+ end
66
+
67
+ it "must fail correctly" do
68
+ assert_fails { assert_includes([1,2,3], 4) }
69
+ assert_fails { assert_includes(nil, 4) }
70
+ end
71
+ end
72
+
73
+ describe "assert_match" do
74
+ it "must pass correctly" do
75
+ assert_match "22", /2/
76
+ end
77
+
78
+ it "must fail correctly" do
79
+ assert_fails { assert_match("22", /3/) }
80
+ assert_fails { assert_match("22", nil) }
81
+ end
82
+ end
83
+
84
+ describe "assert_instance_of" do
85
+ it "must pass correctly" do
86
+ assert_instance_of '', String
87
+ end
88
+
89
+ it "must fail correctly" do
90
+ assert_fails { assert_instance_of('', Integer) }
91
+ end
92
+ end
93
+
94
+ describe "assert_raises" do
95
+ it "must pass when something raised" do
96
+ assert_raises(Exception) { raise Exception }
97
+ end
98
+
99
+ it "must fail when nothing raised" do
100
+ assert_fails do
101
+ assert_raises(Exception) { }
102
+ end
103
+ end
104
+
105
+ it "must fail when raised a different type of exception" do
106
+ assert_fails do
107
+ assert_raises(ArgumentError) { raise Exception }
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ describe TOTS::Matcher do
4
+
5
+ describe "awesome matchers" do
6
+ describe "==" do
7
+ it "must assert properly" do
8
+ 22.must == 22
9
+ end
10
+
11
+ it "must fail correctly" do
12
+ assert_fails { 22.must == 33 }
13
+ end
14
+ end
15
+
16
+ describe "!=" do
17
+ it "must assert correctly" do
18
+ 22.must != 33
19
+ end
20
+
21
+ it "must fail correctly" do
22
+ assert_fails { 22.must != 22 }
23
+ end
24
+ end
25
+
26
+ describe "=~" do
27
+ it "must assert correctly" do
28
+ '22'.must =~ /2/
29
+ end
30
+
31
+ it "must fail correctly" do
32
+ assert_fails { '22'.must =~ /3/ }
33
+ end
34
+ end
35
+
36
+ describe ">" do
37
+ it "must assert properly" do
38
+ 22.must > 11
39
+ end
40
+
41
+ it "must fail correctly" do
42
+ assert_fails { 22.must > 22 }
43
+ assert_fails { 22.must > 33 }
44
+ end
45
+ end
46
+
47
+ describe "<" do
48
+ it "must assert properly" do
49
+ 22.must < 33
50
+ end
51
+
52
+ it "must fail correctly" do
53
+ assert_fails { 22.must < 22 }
54
+ assert_fails { 22.must < 11 }
55
+ end
56
+ end
57
+
58
+ describe ">=" do
59
+ it "must assert properly" do
60
+ 22.must >= 11
61
+ 22.must >= 22
62
+ end
63
+
64
+ it "must fail correctly" do
65
+ assert_fails { 22.must >= 21 }
66
+ end
67
+ end
68
+
69
+ describe "<=" do
70
+ it "must assert properly" do
71
+ 22.must <= 22
72
+ 22.must <= 33
73
+ end
74
+
75
+ it "must fail correctly" do
76
+ assert_fails { 22.must <= 23 }
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ describe TOTS::Matcher do
4
+ it "must be accessible" do
5
+ assert ''.must.class == TOTS::Matcher
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ describe TOTS::Spec do
4
+
5
+ it.skip "must be skipped" do
6
+ assert false, "this block should not be called"
7
+ end
8
+
9
+ it "must allow to specify options", some: 'options' do
10
+ assert_equal @test_options, some: 'options'
11
+ end
12
+
13
+ context "sub-block" do
14
+ it "must be called too" do
15
+ assert true
16
+ end
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: totally-osom-tests
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Nikolay Nemshilov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-03-12 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: It's gonna be totally awesome!
14
+ email: nemshilov@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/totally-osom-tests.rb
20
+ - lib/tots/asserts.rb
21
+ - lib/tots/autorun.rb
22
+ - lib/tots/cli.rb
23
+ - lib/tots/matcher/awesome.rb
24
+ - lib/tots/matcher.rb
25
+ - lib/tots/printer/dots.rb
26
+ - lib/tots/printer/emoji.rb
27
+ - lib/tots/printer.rb
28
+ - lib/tots/runner.rb
29
+ - lib/tots/spec.rb
30
+ - lib/tots/test.rb
31
+ - lib/tots/watcher.rb
32
+ - lib/tots.rb
33
+ - test/test_helper.rb
34
+ - test/tots/assert_test.rb
35
+ - test/tots/matcher/awesome_test.rb
36
+ - test/tots/matcher_test.rb
37
+ - test/tots/spec_test.rb
38
+ - bin/tots
39
+ - README.md
40
+ homepage: http://github.com/MadRabbit/totally-osom-tests
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.0.0
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Totally awesome testing framework for ruby
64
+ test_files: []