totally-osom-tests 0.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.
@@ -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: []