ataru 0.0.1 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +11 -0
- data/README.md +100 -11
- data/Rakefile +7 -0
- data/ataru.gemspec +8 -4
- data/bin/ataru +6 -0
- data/lib/ataru.rb +9 -5
- data/lib/ataru/application.rb +14 -0
- data/lib/ataru/argument_checker.rb +39 -0
- data/lib/ataru/cli/application.rb +39 -0
- data/lib/ataru/code_sample.rb +26 -0
- data/lib/ataru/errors.rb +4 -0
- data/lib/ataru/markdown_loader.rb +10 -0
- data/lib/ataru/test_class_builder.rb +35 -0
- data/lib/ataru/test_converter.rb +8 -0
- data/lib/ataru/traverser.rb +36 -0
- data/lib/ataru/version.rb +1 -1
- data/test/code_sample_test.rb +24 -0
- data/test/resources/test.md +9 -0
- data/test/resources/test.rb +3 -0
- data/test/resources/test1.md +9 -0
- data/test/resources/test2.md +9 -0
- data/test/resources/test_ataru_error.md +5 -0
- data/test/resources/test_empty_string.md +3 -0
- data/test/resources/test_expectation_incorrect.md +8 -0
- data/test/resources/test_expectation_running.md +4 -0
- data/test/resources/test_expectation_warning.md +4 -0
- data/test/resources/test_linebreak.md +6 -0
- data/test/resources/test_markdown.md +28 -0
- data/test/test_class_builder_test.rb +42 -0
- data/test/test_converter_test.rb +48 -0
- data/test/traverser_test.rb +38 -0
- metadata +95 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fcbdef8608fe4c9f4b1980f83af3aef1fd23bcd6
|
4
|
+
data.tar.gz: 1a6d8144749525a5a9b7b5b6eaa2b8415c7d7aca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21e1251423908020c79a09eec665fb495c7f5549f315bcd0ad4978475fd135c586b80ebaa71a1d66533de918cd991ce22c2b4b92c531ec547d826a30719ceef9
|
7
|
+
data.tar.gz: 922a4de8be0b190c4095dd3ad1eeec4407f4d6bd33a73b90af6f8f8795cfd9be066b646a06f7a332fd710412fb47ded005393a27660aa0d492457d37f2dbb2af
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,24 +1,113 @@
|
|
1
|
+
| Project | Ataru
|
2
|
+
|:----------------|:--------------------------------------------------
|
3
|
+
| CI | [](https://travis-ci.org/CodePadawans/ataru)
|
4
|
+
| Gem Version | [](http://badge.fury.io/rb/ataru)
|
5
|
+
|
1
6
|
# Ataru
|
2
7
|
|
3
|
-
|
8
|
+
Ataru is a gem that provides a command line tool for testing code samples in the documentation files.
|
9
|
+
You can also integrate ataru in your continuous integration process on Travis CI.
|
10
|
+
|
11
|
+
Ataru will check if your documentation is still in sync with the application it was written for.
|
12
|
+
The output of the results has the MiniTest style.
|
13
|
+
|
14
|
+
## What can ataru check
|
15
|
+
|
16
|
+
- Ataru can read files written in Github Flavoured Markdown, as it uses Kramdown with Github Flavoured Markdown Parser.
|
17
|
+
|
18
|
+
- Ataru is currently able to test the Ruby code only.
|
19
|
+
|
20
|
+
## Requirements
|
21
|
+
|
22
|
+
- The dependencies of your gem have to be in the range of the latest major versions of:
|
23
|
+
|
24
|
+
- minitest (~> 5)
|
25
|
+
- kramdown (~> 1)
|
26
|
+
- thor (~> 0)
|
27
|
+
|
28
|
+
- You need to create the setup file (for more info read Setup section).
|
29
|
+
|
30
|
+
## Usage as command line tool
|
31
|
+
|
32
|
+
1. Add ataru to your project Gemfile.
|
33
|
+
|
34
|
+
2. From the top level of your project execute:
|
35
|
+
|
36
|
+
```sh
|
37
|
+
$ bundle install
|
38
|
+
```
|
39
|
+
|
40
|
+
3. To create the setup file (for more info read Setup section) execute:
|
41
|
+
```sh
|
42
|
+
$ bundle exec ataru setup
|
43
|
+
```
|
44
|
+
|
45
|
+
4. Finally, execute:
|
46
|
+
- in case you want to check all the markdown files from your project:
|
47
|
+
|
48
|
+
```sh
|
49
|
+
$ bundle exec ataru check
|
50
|
+
```
|
51
|
+
- in case you want to check only specific markdown files from your project:
|
52
|
+
|
53
|
+
```sh
|
54
|
+
$ bundle exec ataru check PROJECT_ROOT/foo/bar/filename_1.md PROJECT_ROOT/foo/bar/filename_2.md
|
55
|
+
```
|
56
|
+
5. Check the results.
|
57
|
+
|
58
|
+
## Workflow with Travis CI
|
59
|
+
|
60
|
+
1. Add ataru to your project Gemfile.
|
61
|
+
|
62
|
+
2. From the top level of your project execute:
|
63
|
+
|
64
|
+
```sh
|
65
|
+
$ bundle install
|
66
|
+
```
|
67
|
+
|
68
|
+
3. To create the setup file (for more info read Setup section) execute:
|
69
|
+
|
70
|
+
```sh
|
71
|
+
$ bundle exec ataru setup
|
72
|
+
```
|
4
73
|
|
5
|
-
|
74
|
+
4. In your .travis.yml file add:
|
75
|
+
- in case you want to check all the markdown files from your project:
|
76
|
+
|
77
|
+
```
|
78
|
+
script:
|
79
|
+
- bundle exec rake build
|
80
|
+
- bundle exec rake ataru check
|
81
|
+
```
|
82
|
+
- in case you want to check only specific markdown files from your project:
|
83
|
+
```
|
84
|
+
script:
|
85
|
+
- bundle exec rake build
|
86
|
+
- bundle exec ataru check PROJECT_ROOT/foo/bar/filename_1.md PROJECT_ROOT/foo/bar/filename_2.md
|
87
|
+
```
|
88
|
+
5. Now you can commit and push the changes to github.
|
89
|
+
6. Check the results of your build.
|
6
90
|
|
7
|
-
Add this line to your application's Gemfile:
|
8
91
|
|
9
|
-
|
92
|
+
## Setup
|
10
93
|
|
11
|
-
|
94
|
+
The setup file has to be created in order to enable ataru to read your project source code and use it for its checks.
|
95
|
+
Ataru comes with an easy to use generator for creating that file. When the generator process is finished, the created
|
96
|
+
setup file is automatically passed to ataru.
|
12
97
|
|
13
|
-
|
98
|
+
To create the setup file execute:
|
14
99
|
|
15
|
-
|
100
|
+
```sh
|
101
|
+
$ bundle exec ataru setup
|
102
|
+
```
|
16
103
|
|
17
|
-
|
104
|
+
Open created file in your text editor and write:
|
18
105
|
|
19
|
-
|
106
|
+
```
|
107
|
+
require "your_project_name"
|
108
|
+
```
|
20
109
|
|
21
|
-
|
110
|
+
Save the file.
|
22
111
|
|
23
112
|
## Contributing
|
24
113
|
|
@@ -26,4 +115,4 @@ TODO: Write usage instructions here
|
|
26
115
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
116
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
117
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5. Create new Pull Request
|
118
|
+
5. Create new Pull Request`
|
data/Rakefile
CHANGED
data/ataru.gemspec
CHANGED
@@ -5,12 +5,12 @@ require 'ataru/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "ataru"
|
8
|
-
spec.version = "0.0
|
8
|
+
spec.version = "0.1.0"
|
9
9
|
spec.authors = ["Code_Padawans"]
|
10
10
|
spec.email = ["hello@code-padawans.de"]
|
11
11
|
spec.summary = %q{A documentation testing tool}
|
12
|
-
spec.description = %q{A documentation testing tool}
|
13
|
-
spec.homepage = ""
|
12
|
+
spec.description = %q{A documentation testing tool, for documentation in Markdown files, for Ruby code}
|
13
|
+
spec.homepage = "https://github.com/CodePadawans/ataru"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -19,5 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
-
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.3"
|
23
|
+
|
24
|
+
spec.add_runtime_dependency "minitest", "~> 5"
|
25
|
+
spec.add_runtime_dependency "kramdown", "~> 1"
|
26
|
+
spec.add_runtime_dependency "thor", "~> 0"
|
23
27
|
end
|
data/bin/ataru
ADDED
data/lib/ataru.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require 'ataru/version'
|
2
|
+
require 'ataru/markdown_loader'
|
3
|
+
require 'ataru/traverser'
|
4
|
+
require 'ataru/code_sample'
|
5
|
+
require 'ataru/argument_checker'
|
6
|
+
require 'ataru/test_converter'
|
7
|
+
require 'ataru/test_class_builder'
|
8
|
+
require 'ataru/application'
|
9
|
+
require 'ataru/cli/application'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Ataru
|
2
|
+
class Application
|
3
|
+
def self.run_test_for_file(file_name)
|
4
|
+
|
5
|
+
#creating kramdown doc out of md file
|
6
|
+
kramdown_doc = MarkdownLoader.load_file(file_name)
|
7
|
+
#pulling an array of codespans/code samples from markdown document
|
8
|
+
code_samples = Traverser.new(kramdown_doc, file_name).code_samples
|
9
|
+
#wrapping code samples in minitest tests
|
10
|
+
TestClassBuilder.new(code_samples).build_test_class
|
11
|
+
require 'minitest/autorun'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Ataru
|
2
|
+
class ArgumentChecker
|
3
|
+
|
4
|
+
def initialize(file_names)
|
5
|
+
exit_if_empty(file_names)
|
6
|
+
@file_names = file_names
|
7
|
+
end
|
8
|
+
|
9
|
+
def exit_if_empty(file_names)
|
10
|
+
if file_names.empty?
|
11
|
+
puts "ataru: command line usage error"
|
12
|
+
puts "ataru: please give the file name"
|
13
|
+
puts "usage: ataru.rb <filename>"
|
14
|
+
exit 64
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def verify(file_name)
|
19
|
+
if file_name !~ /.+\.md/
|
20
|
+
puts "ataru: data format error"
|
21
|
+
puts "ataru: #{file_name} is not a markdown file"
|
22
|
+
puts "ataru: markdown file required"
|
23
|
+
exit 65
|
24
|
+
elsif File.file?(file_name) == false
|
25
|
+
puts "ataru: cannot open input"
|
26
|
+
puts "ataru: #{file_name} file not found"
|
27
|
+
exit 66
|
28
|
+
else
|
29
|
+
file_name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def each
|
34
|
+
@file_names.each do |file_name|
|
35
|
+
yield verify(file_name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'ataru'
|
3
|
+
|
4
|
+
module Ataru
|
5
|
+
module CLI
|
6
|
+
class Application < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
def self.source_root
|
10
|
+
File.dirname(__FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "setup", "Create the setup file containing all dependencies for running code snippets"
|
14
|
+
def setup
|
15
|
+
create_file(Dir.pwd + "/ataru_setup.rb") do
|
16
|
+
<<-eos
|
17
|
+
# "Please require your project source code, with the correct path"
|
18
|
+
|
19
|
+
# require "path_to_your_project_source_code"
|
20
|
+
eos
|
21
|
+
end
|
22
|
+
puts "Well done, young Padawan!\nNow, change the created ataru_setup.rb file."
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "check", "Check code snippets in all .md files of the project or, if given, specific .md files"
|
26
|
+
def check(*filenames)
|
27
|
+
if filenames.length == 0
|
28
|
+
filenames = Dir.glob('**/*md')
|
29
|
+
end
|
30
|
+
path = Dir.pwd + '/ataru_setup.rb'
|
31
|
+
require path if File.exist?(path)
|
32
|
+
Ataru::ArgumentChecker.new(filenames).each do |checked_file|
|
33
|
+
Ataru::Application.run_test_for_file(checked_file)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ataru
|
2
|
+
class CodeSample
|
3
|
+
attr_accessor :code, :file, :line_number, :prepared_code
|
4
|
+
|
5
|
+
def initialize(code, file, line_number)
|
6
|
+
self.code = code
|
7
|
+
self.file = file
|
8
|
+
self.line_number = line_number
|
9
|
+
end
|
10
|
+
|
11
|
+
def ==(other)
|
12
|
+
self.class == other.class &&
|
13
|
+
self.file == other.file &&
|
14
|
+
self.code == other.code &&
|
15
|
+
self.line_number == other.line_number
|
16
|
+
end
|
17
|
+
|
18
|
+
def prepared_code
|
19
|
+
@prepared_code ||= TestConverter.convert(self.code)
|
20
|
+
end
|
21
|
+
|
22
|
+
def run(b)
|
23
|
+
eval(self.prepared_code, b, self.file, self.line_number)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/ataru/errors.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'minitest'
|
2
|
+
require 'pathname'
|
3
|
+
require_relative 'errors'
|
4
|
+
require_relative 'code_sample'
|
5
|
+
|
6
|
+
module Ataru
|
7
|
+
class TestClassBuilder
|
8
|
+
attr_accessor :code_samples
|
9
|
+
|
10
|
+
def initialize(code_samples)
|
11
|
+
self.code_samples = code_samples
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_test_class
|
15
|
+
samples = code_samples
|
16
|
+
klass = Class.new(MiniTest::Test) do
|
17
|
+
samples.each_with_index do |sample, index|
|
18
|
+
basename = Pathname.new(sample.file).basename(".*").to_s
|
19
|
+
define_method("test_#{basename}_#{index}") do
|
20
|
+
|
21
|
+
b = binding
|
22
|
+
|
23
|
+
begin
|
24
|
+
sample.run(b)
|
25
|
+
rescue StandardError => e
|
26
|
+
raise AtaruError.new("In the file: #{sample.file}, in line: #{sample.line_number}, the code sample number: #{index} is raising an error:" + e.inspect)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
klass
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'markdown_loader'
|
2
|
+
require_relative 'code_sample'
|
3
|
+
|
4
|
+
module Ataru
|
5
|
+
class Traverser
|
6
|
+
CODE_ELEMENTS = [:codeblock, :codespan]
|
7
|
+
|
8
|
+
attr_accessor :document, :language, :file_name
|
9
|
+
|
10
|
+
def initialize(document, file_name, language = "language-ruby")
|
11
|
+
self.document = document
|
12
|
+
self.language = language
|
13
|
+
self.file_name = file_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def code_samples
|
17
|
+
tree = document.root
|
18
|
+
self.walk_tree(tree)
|
19
|
+
end
|
20
|
+
|
21
|
+
def walk_tree(element)
|
22
|
+
code_samples = []
|
23
|
+
element.children.each do |child|
|
24
|
+
if CODE_ELEMENTS.include?(child.type)
|
25
|
+
if child.attr["class"] == language
|
26
|
+
line_number = child.options[:location] + 1
|
27
|
+
code_samples << CodeSample.new(child.value.strip, file_name, line_number)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
code_samples += walk_tree(child)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
code_samples
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/ataru/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/ataru/code_sample'
|
3
|
+
|
4
|
+
class CodeSampleTest < MiniTest::Test
|
5
|
+
include Ataru
|
6
|
+
|
7
|
+
class TestException < Exception
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_run_with_file_name_and_line_number
|
11
|
+
code = CodeSample.new("1\n raise TestException.new('bad stuff')", "test.md", 1)
|
12
|
+
b = binding
|
13
|
+
begin
|
14
|
+
code.run(b)
|
15
|
+
rescue TestException => e
|
16
|
+
e.backtrace.first
|
17
|
+
file_name = e.backtrace.first.split(":").first
|
18
|
+
line_number = e.backtrace.first.split(":")[1].to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_equal "test.md", file_name
|
22
|
+
assert_equal 2, line_number
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
this is written without anythng
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
def a
|
5
|
+
2 + 2
|
6
|
+
end
|
7
|
+
```
|
8
|
+
|
9
|
+
### header
|
10
|
+
|
11
|
+
```
|
12
|
+
bundle exec
|
13
|
+
```
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
def add2(number)
|
17
|
+
number + 2
|
18
|
+
end
|
19
|
+
|
20
|
+
a = 10
|
21
|
+
b = add2(a)
|
22
|
+
assert_equal 11, b
|
23
|
+
b #=> 11
|
24
|
+
```
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
a + 1
|
28
|
+
```
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'kramdown'
|
3
|
+
require_relative '../lib/ataru/test_class_builder'
|
4
|
+
require_relative '../lib/ataru/errors'
|
5
|
+
require_relative '../lib/ataru/code_sample'
|
6
|
+
|
7
|
+
class TestClassBuilderTest < MiniTest::Test
|
8
|
+
include Ataru
|
9
|
+
@name_of_the_runnable = "the_name_of_the_runnable"
|
10
|
+
|
11
|
+
def test_empty_list
|
12
|
+
code_samples = []
|
13
|
+
klass = TestClassBuilder.new(code_samples).build_test_class
|
14
|
+
|
15
|
+
refute_respond_to klass.new(@name_of_the_runnable), :test_my_test_0
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_one_code_example
|
19
|
+
code_samples = [CodeSample.new("puts 'Hello world'", "my_test.md", 5)]
|
20
|
+
klass = TestClassBuilder.new(code_samples).build_test_class
|
21
|
+
|
22
|
+
assert_respond_to klass.new(@name_of_the_runnable), :test_my_test_0
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_two_code_examples
|
26
|
+
code_samples = [CodeSample.new("puts 'blah'", "my_test.md", 5), CodeSample.new("puts 2 + 5", "my_test.md", 5)]
|
27
|
+
klass = TestClassBuilder.new(code_samples).build_test_class
|
28
|
+
|
29
|
+
assert_respond_to klass.new(@name_of_the_runnable), :test_my_test_0
|
30
|
+
assert_respond_to klass.new(@name_of_the_runnable), :test_my_test_1
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_invalid_code_sample
|
34
|
+
code_samples = [CodeSample.new("a + 1", "my_test.md", 5)]
|
35
|
+
message = AtaruError.new("In the file: #{code_samples[0].file}, in line: #{code_samples[0].line_number}, is raising an error:")
|
36
|
+
klass = TestClassBuilder.new(code_samples).build_test_class
|
37
|
+
|
38
|
+
assert_raises(AtaruError) { klass.new(@name_of_the_runnable).send(:test_my_test_0) }
|
39
|
+
assert_equal "In the file: my_test.md, in line: 5, is raising an error:", message.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/ataru/test_converter'
|
3
|
+
|
4
|
+
class TestConverterTest < MiniTest::Test
|
5
|
+
include Ataru
|
6
|
+
|
7
|
+
def test_no_hash
|
8
|
+
code_sample = CodeSample.new("puts 'blah'", "test.md", 2)
|
9
|
+
converted = TestConverter.convert(code_sample.code)
|
10
|
+
assert_equal "puts 'blah'", converted
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_hash_without_context_hash_without_space
|
14
|
+
code_sample = CodeSample.new("a #=> 5", "test.md", 2)
|
15
|
+
converted = TestConverter.convert(code_sample.code)
|
16
|
+
assert_equal "assert_equal(5, a)", converted
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_hash_without_context_hash_with_space
|
20
|
+
code_sample = CodeSample.new("a # => 5", "test.md", 2)
|
21
|
+
converted = TestConverter.convert(code_sample.code)
|
22
|
+
assert_equal "assert_equal(5, a)", converted
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_hash_with_context_hash_without_space
|
26
|
+
code_sample = CodeSample.new("a = 1 + 2\na #=> 3", "test.md", 2)
|
27
|
+
converted = TestConverter.convert(code_sample.code)
|
28
|
+
assert_equal "a = 1 + 2\nassert_equal(3, a)", converted
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_hash_with_context_hash_with_space
|
32
|
+
code_sample = CodeSample.new("a = 1 + 2\na # => 3", "test.md", 2)
|
33
|
+
converted = TestConverter.convert(code_sample.code)
|
34
|
+
assert_equal "a = 1 + 2\nassert_equal(3, a)", converted
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_assertion_in_the_middle
|
38
|
+
code_sample = CodeSample.new("a = 1 + 2\na # => 3\nb = 2", "test.md", 2)
|
39
|
+
converted = TestConverter.convert(code_sample.code)
|
40
|
+
assert_equal "a = 1 + 2\nassert_equal(3, a)\nb = 2", converted
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_assertion_at_the_end
|
44
|
+
code_sample = CodeSample.new("a = 1 + 2\nb = 2\na # => 3", "test.md", 2)
|
45
|
+
converted = TestConverter.convert(code_sample.code)
|
46
|
+
assert_equal "a = 1 + 2\nb = 2\nassert_equal(3, a)", converted
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'kramdown'
|
3
|
+
require_relative "../lib/ataru/traverser"
|
4
|
+
|
5
|
+
class TraverserTest < Minitest::Test
|
6
|
+
|
7
|
+
include Ataru
|
8
|
+
|
9
|
+
def test_single_codespan
|
10
|
+
doc = Kramdown::Document.new("```ruby\nputs 'Hello'\n```", :input => 'GFM')
|
11
|
+
assert_equal CodeSample.new("puts 'Hello'", "test.md", 2), Traverser.new(doc, "test.md").code_samples.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_multiple_codespans
|
15
|
+
doc = Kramdown::Document.new("```ruby\nputs 'Hello'\n```\n```ruby\nputs 'Goodbye!'\n```", :input => 'GFM')
|
16
|
+
assert_equal [CodeSample.new("puts 'Hello'", "test.md", 2), CodeSample.new("puts 'Goodbye!'", "test.md", 5)], Traverser.new(doc, "test.md").code_samples
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_no_codespans
|
21
|
+
doc = Kramdown::Document.new("#Header", :input => 'GFM')
|
22
|
+
assert_equal [], Traverser.new(doc, "test.md").code_samples
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_codespan_in_complicated_structure
|
26
|
+
doc = Kramdown::Document.new <<-MARKDOWN, :input => 'GFM'
|
27
|
+
#Header
|
28
|
+
|
29
|
+
* list 1
|
30
|
+
* list 2
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
puts 'Hello'
|
34
|
+
```
|
35
|
+
MARKDOWN
|
36
|
+
assert_equal [CodeSample.new("puts 'Hello'", "test.md", 7)], Traverser.new(doc, "test.md").code_samples
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ataru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code_Padawans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,32 +28,103 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: kramdown
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thor
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
39
81
|
- !ruby/object:Gem::Version
|
40
82
|
version: '0'
|
41
|
-
description: A documentation testing tool
|
83
|
+
description: A documentation testing tool, for documentation in Markdown files, for
|
84
|
+
Ruby code
|
42
85
|
email:
|
43
86
|
- hello@code-padawans.de
|
44
|
-
executables:
|
87
|
+
executables:
|
88
|
+
- ataru
|
45
89
|
extensions: []
|
46
90
|
extra_rdoc_files: []
|
47
91
|
files:
|
48
92
|
- .gitignore
|
93
|
+
- .travis.yml
|
49
94
|
- Gemfile
|
50
95
|
- LICENSE.txt
|
51
96
|
- README.md
|
52
97
|
- Rakefile
|
53
98
|
- ataru.gemspec
|
99
|
+
- bin/ataru
|
54
100
|
- lib/ataru.rb
|
101
|
+
- lib/ataru/application.rb
|
102
|
+
- lib/ataru/argument_checker.rb
|
103
|
+
- lib/ataru/cli/application.rb
|
104
|
+
- lib/ataru/code_sample.rb
|
105
|
+
- lib/ataru/errors.rb
|
106
|
+
- lib/ataru/markdown_loader.rb
|
107
|
+
- lib/ataru/test_class_builder.rb
|
108
|
+
- lib/ataru/test_converter.rb
|
109
|
+
- lib/ataru/traverser.rb
|
55
110
|
- lib/ataru/version.rb
|
56
|
-
|
111
|
+
- playground/arrays.rb
|
112
|
+
- test/code_sample_test.rb
|
113
|
+
- test/resources/test.md
|
114
|
+
- test/resources/test.rb
|
115
|
+
- test/resources/test1.md
|
116
|
+
- test/resources/test2.md
|
117
|
+
- test/resources/test_ataru_error.md
|
118
|
+
- test/resources/test_empty_string.md
|
119
|
+
- test/resources/test_expectation_incorrect.md
|
120
|
+
- test/resources/test_expectation_running.md
|
121
|
+
- test/resources/test_expectation_warning.md
|
122
|
+
- test/resources/test_linebreak.md
|
123
|
+
- test/resources/test_markdown.md
|
124
|
+
- test/test_class_builder_test.rb
|
125
|
+
- test/test_converter_test.rb
|
126
|
+
- test/traverser_test.rb
|
127
|
+
homepage: https://github.com/CodePadawans/ataru
|
57
128
|
licenses:
|
58
129
|
- MIT
|
59
130
|
metadata: {}
|
@@ -77,4 +148,19 @@ rubygems_version: 2.0.14
|
|
77
148
|
signing_key:
|
78
149
|
specification_version: 4
|
79
150
|
summary: A documentation testing tool
|
80
|
-
test_files:
|
151
|
+
test_files:
|
152
|
+
- test/code_sample_test.rb
|
153
|
+
- test/resources/test.md
|
154
|
+
- test/resources/test.rb
|
155
|
+
- test/resources/test1.md
|
156
|
+
- test/resources/test2.md
|
157
|
+
- test/resources/test_ataru_error.md
|
158
|
+
- test/resources/test_empty_string.md
|
159
|
+
- test/resources/test_expectation_incorrect.md
|
160
|
+
- test/resources/test_expectation_running.md
|
161
|
+
- test/resources/test_expectation_warning.md
|
162
|
+
- test/resources/test_linebreak.md
|
163
|
+
- test/resources/test_markdown.md
|
164
|
+
- test/test_class_builder_test.rb
|
165
|
+
- test/test_converter_test.rb
|
166
|
+
- test/traverser_test.rb
|