fitnexus 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/History.md +12 -0
- data/MIT-LICENSE +22 -0
- data/README.md +130 -0
- data/bin/fitnexus +18 -0
- data/fitnexus.gemspec +19 -0
- data/lib/fitnexus/project.rb +156 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/FeedKitty/content.txt +8 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/FeedKitty/properties.xml +12 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/SetUp/content.txt +4 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/SetUp/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/content.txt +12 -0
- data/lib/fitnexus/template/FitNesseRoot/CukableTemplate/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/FrontPage/content.txt +8 -0
- data/lib/fitnexus/template/FitNesseRoot/FrontPage/properties.xml +13 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/DemoPage/content.txt +16 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/DemoPage/properties.xml +12 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/GoogleFor/content.txt +10 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/GoogleFor/properties.xml +12 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/content.txt +3 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/SetUp/content.txt +7 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/SetUp/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/content.txt +10 -0
- data/lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/LoginTest/content.txt +15 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/LoginTest/properties.xml +12 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/ScenarioLibrary/content.txt +12 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/ScenarioLibrary/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/SetUp/content.txt +4 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/SetUp/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/content.txt +12 -0
- data/lib/fitnexus/template/FitNesseRoot/RselTemplate/properties.xml +11 -0
- data/lib/fitnexus/template/FitNesseRoot/files/css/fitnesse.css +91 -0
- data/lib/fitnexus/template/Gemfile +6 -0
- data/lib/fitnexus/template/plugins.properties +1 -0
- data/lib/fitnexus/template/run.sh +4 -0
- metadata +103 -0
data/.gitignore
ADDED
data/History.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
FitNexus History
|
2
|
+
================
|
3
|
+
|
4
|
+
0.0.1
|
5
|
+
-----
|
6
|
+
|
7
|
+
- Initial public release
|
8
|
+
- Lightweight script to install a FitNexus project
|
9
|
+
- Installs FitNesse .jar
|
10
|
+
- Installs Mastiffe from GitHub
|
11
|
+
- Adds a Gemfile to make rsel/cukable/rubyslim installation easier
|
12
|
+
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2010 Eric Pierce
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
FitNexus
|
2
|
+
========
|
3
|
+
|
4
|
+
This project aims to include a set of plugins and add-ons to [FitNesse](http://fitnesse.org/)
|
5
|
+
to enhance its capabilities and make it into a more full-featured testing platform. The
|
6
|
+
add-ons include:
|
7
|
+
|
8
|
+
- [Cukable](http://github.com/wapcaplet/cukable): [Cucumber](http://cukes.info)
|
9
|
+
frontend for FitNesse
|
10
|
+
- [Mastiffe](http://github.com/Ken-g6/Mastiffe): Manual testing interface for FitNesse
|
11
|
+
- [Rsel](http://github.com/a-e/rsel): Ruby-based Selenium support for FitNesse
|
12
|
+
|
13
|
+
FitNexus is being developed by the [Automation Excellence](http://github.com/a-e)
|
14
|
+
team, and is still in early development. So far, it has only been tested on
|
15
|
+
Linux; it might work on OSX, but it will definitely not work on Windows.
|
16
|
+
|
17
|
+
|
18
|
+
Installation
|
19
|
+
------------
|
20
|
+
|
21
|
+
FitNexus is distributed as a lightweight gem file, and consists primarily of a
|
22
|
+
Ruby script that installs and configures a new FitNesse wiki in a directory of
|
23
|
+
your choice. To install FitNexus:
|
24
|
+
|
25
|
+
$ gem install fitnexus
|
26
|
+
|
27
|
+
To create a new project in `/tmp/foo`, run:
|
28
|
+
|
29
|
+
$ fitnexus /tmp/foo
|
30
|
+
|
31
|
+
If all goes to plan, this will create the following files and folders in
|
32
|
+
`/tmp/foo`:
|
33
|
+
|
34
|
+
- `fitnesse.jar`: FitNesse executable
|
35
|
+
- `FitNesseRoot`: Wiki files and content
|
36
|
+
- `Gemfile`: Gem dependencies to be installed
|
37
|
+
- `mastiffe`: Symlink to Mastiffe files
|
38
|
+
- `Mastiffe`: Git clone of Mastiffe
|
39
|
+
- `plugins.properties`: FitNesse configuration
|
40
|
+
- `run.sh`: Script to start up the wiki
|
41
|
+
|
42
|
+
There's one more thing you need to do manually before FitNexus will be fully
|
43
|
+
installed, and that's to install the gem dependencies (Rsel and Cukable). This
|
44
|
+
is not handled automatically because FitNexus doesn't know whether you want to
|
45
|
+
use [RVM](http://beginrescueend.com) or not.
|
46
|
+
|
47
|
+
If you do NOT want to use RVM, you need to ensure that you have Ruby and
|
48
|
+
Rubygems installed systemwide. Then do:
|
49
|
+
|
50
|
+
$ cd /tmp/foo
|
51
|
+
$ gem install bundler
|
52
|
+
$ bundle install
|
53
|
+
|
54
|
+
Then skip ahead to "Running FitNexus" below.
|
55
|
+
|
56
|
+
If you do want to use RVM, then begin by doing this:
|
57
|
+
|
58
|
+
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
|
59
|
+
|
60
|
+
[Follow the instructions](http://www.beginrescueend.com/rvm/install/) to configure it.
|
61
|
+
When you get to the part about installing Ruby, use Ruby Enterprise Edition 1.8.7:
|
62
|
+
|
63
|
+
$ rvm install ree
|
64
|
+
|
65
|
+
Switch to that ruby:
|
66
|
+
|
67
|
+
$ rvm ree
|
68
|
+
|
69
|
+
Create a gemset for FitNexus:
|
70
|
+
|
71
|
+
$ rvm gemset create fitnexus
|
72
|
+
$ rvm ree@fitnexus
|
73
|
+
|
74
|
+
Once your gemset is created, you can switch to it at any time with `rvm
|
75
|
+
ree@fitnexus`. To do this automatically whenever you `cd` into the `FitNexus`
|
76
|
+
directory, create an `.rvmrc` file containing that command:
|
77
|
+
|
78
|
+
$ echo "rvm ree@fitnexus" > .rvmrc
|
79
|
+
|
80
|
+
Install bundler in your global gemset:
|
81
|
+
|
82
|
+
$ rvm ree@global
|
83
|
+
$ gem install bundler
|
84
|
+
|
85
|
+
Then install the gem dependencies for FitNexus:
|
86
|
+
|
87
|
+
$ rvm ree@fitnexus
|
88
|
+
$ bundle install
|
89
|
+
|
90
|
+
|
91
|
+
Running FitNexus
|
92
|
+
----------------
|
93
|
+
|
94
|
+
FitNexus is just a regular FitNesse wiki with a few enhancements. A startup
|
95
|
+
script is provided, which you can edit to meet your needs (for instance, if you
|
96
|
+
want to run on a port other than 8080). Just run this:
|
97
|
+
|
98
|
+
$ ./run.sh
|
99
|
+
|
100
|
+
Then visit `http://localhost:8080` (or whatever hostname you're using) in your
|
101
|
+
web browser. You should get a FitNexus welcome page, with links to some
|
102
|
+
templates that will help you get started writing tests.
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
License
|
107
|
+
-------
|
108
|
+
The MIT License
|
109
|
+
|
110
|
+
Copyright (c) 2011 Automation Excellence
|
111
|
+
|
112
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
113
|
+
a copy of this software and associated documentation files (the
|
114
|
+
"Software"), to deal in the Software without restriction, including
|
115
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
116
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
117
|
+
permit persons to whom the Software is furnished to do so, subject to
|
118
|
+
the following conditions:
|
119
|
+
|
120
|
+
The above copyright notice and this permission notice shall be
|
121
|
+
included in all copies or substantial portions of the Software.
|
122
|
+
|
123
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
124
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
125
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
126
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
127
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
128
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
129
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
130
|
+
|
data/bin/fitnexus
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../lib/fitnexus/project'
|
4
|
+
|
5
|
+
USAGE = "fitnexus: Create a FitNexus project
|
6
|
+
Usage:
|
7
|
+
fitnexus <path>
|
8
|
+
Where <path> is the directory where you want to create the new project."
|
9
|
+
|
10
|
+
# Main program
|
11
|
+
if ARGV.count != 1
|
12
|
+
puts USAGE
|
13
|
+
Process.exit
|
14
|
+
else
|
15
|
+
include FitNexus
|
16
|
+
create_project(ARGV.pop)
|
17
|
+
end
|
18
|
+
|
data/fitnexus.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "fitnexus"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
s.summary = "FitNesse with benefits"
|
5
|
+
s.description = <<-EOS
|
6
|
+
FitNexus installs a FitNesse wiki with several enhancements, including
|
7
|
+
Mastiffe for manual testing, Rsel for Selenium testing, and Cukable for
|
8
|
+
Cucumber testing.
|
9
|
+
EOS
|
10
|
+
s.authors = ["Automation Excellence"]
|
11
|
+
s.email = "wapcaplet88@gmail.com"
|
12
|
+
s.homepage = "http://github.com/a-e/fitnexus"
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.require_path = 'lib'
|
17
|
+
|
18
|
+
s.executables = ['fitnexus']
|
19
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'open3'
|
3
|
+
require 'timeout'
|
4
|
+
require 'ftools' # For File.copy
|
5
|
+
|
6
|
+
FITNESSE_VERSION = "20110104"
|
7
|
+
FITNESSE_DOWNLOAD = "http://fitnesse.org/fitnesse.jar?responder=releaseDownload\\&release=#{FITNESSE_VERSION}"
|
8
|
+
|
9
|
+
module FitNexus
|
10
|
+
|
11
|
+
# Display a prompt with the given question. If the user answers
|
12
|
+
# 'y' or 'Y', return true. Otherwise, return false.
|
13
|
+
def prompt(question)
|
14
|
+
print("#{question} [y/N]: ")
|
15
|
+
answer = gets.strip.downcase
|
16
|
+
if answer == 'y'
|
17
|
+
return true
|
18
|
+
else
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
# Attempt to create a new directory at the given `path`. If
|
25
|
+
# a file or directory already exists there
|
26
|
+
def create_dir(path)
|
27
|
+
is_file = File.file?(path)
|
28
|
+
is_dir = File.directory?(path)
|
29
|
+
|
30
|
+
# Check for existing file/dir, and offer to overwrite
|
31
|
+
if is_file || is_dir
|
32
|
+
puts "File #{path} already exists." if is_file
|
33
|
+
puts "Directory #{path} already exists." if is_dir
|
34
|
+
|
35
|
+
if prompt("WARNING: Existing #{path} will be deleted. Continue?")
|
36
|
+
puts "Removing existing #{path} ..."
|
37
|
+
FileUtils.rm_rf(path)
|
38
|
+
else
|
39
|
+
puts "Please use another directory."
|
40
|
+
Process.exit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
puts "Creating directory #{path} ..."
|
45
|
+
FileUtils.mkdir_p(path)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# Download a fitnesse.jar into the given path.
|
50
|
+
def download_fitnesse(path)
|
51
|
+
puts "Downloading fitnesse.jar version #{FITNESSE_VERSION} ..."
|
52
|
+
Dir.chdir(path) do
|
53
|
+
`wget --quiet #{FITNESSE_DOWNLOAD} -O fitnesse.jar`
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# Create the FitNesseRoot directory hierarchy in the given path,
|
59
|
+
# by starting fitnesse.jar and waiting for it to begin producing
|
60
|
+
# output. A bit of hack, but gets the job done.
|
61
|
+
def create_fitnesse_root(path)
|
62
|
+
puts "Temporarily starting FitNesse to create FitNesseRoot ..."
|
63
|
+
Dir.chdir(path) do
|
64
|
+
cmd = "java -jar fitnesse.jar -p 8080"
|
65
|
+
pipe = IO.popen(cmd)
|
66
|
+
|
67
|
+
# This will block until FitNesse starts up and writes to stdout
|
68
|
+
line = pipe.gets
|
69
|
+
|
70
|
+
fitnesse_started = (line =~ /Started/)
|
71
|
+
root_dir = File.join(path, 'FitNesseRoot')
|
72
|
+
root_created = File.directory?(root_dir)
|
73
|
+
|
74
|
+
# If FitNesse started, kill it
|
75
|
+
if fitnesse_started
|
76
|
+
puts "Stopping FitNesse server ..."
|
77
|
+
Process.kill 'HUP', pipe.pid
|
78
|
+
if root_created
|
79
|
+
puts "Created #{root_dir}"
|
80
|
+
else
|
81
|
+
puts "Error: #{root_dir} wasn't created. Quitting."
|
82
|
+
Process.exit
|
83
|
+
end
|
84
|
+
# If it didn't start, display an appropriate message and/or quit
|
85
|
+
else
|
86
|
+
if root_created
|
87
|
+
puts "FitNesse didn't start, but that's OK."
|
88
|
+
puts "Created #{root_dir}"
|
89
|
+
else
|
90
|
+
puts "Error: #{root_dir} wasn't created. Quitting."
|
91
|
+
Process.exit
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
# Install project template onto `path`
|
99
|
+
def install_template(path)
|
100
|
+
puts "Installing project template to #{path} ..."
|
101
|
+
template_dir = File.expand_path('../template', __FILE__)
|
102
|
+
FileUtils.cp_r("#{template_dir}/.", path)
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
# Install Mastiffe into the given path
|
107
|
+
def install_mastiffe(path)
|
108
|
+
puts "Installing Mastiffe into #{path} ..."
|
109
|
+
Dir.chdir(path) do
|
110
|
+
`git clone git://github.com/a-e/Mastiffe.git`
|
111
|
+
`ln -sv #{path}/Mastiffe/FitNesseRoot/files/mastiffe #{path}/FitNesseRoot/files/mastiffe`
|
112
|
+
`ln -sv #{path}/Mastiffe/mastiffe #{path}/mastiffe`
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def startup_message(path)
|
117
|
+
puts "------------------"
|
118
|
+
puts "FitNexus installer"
|
119
|
+
puts "------------------"
|
120
|
+
end
|
121
|
+
|
122
|
+
def success_message(path)
|
123
|
+
puts "Done!"
|
124
|
+
puts "-----"
|
125
|
+
puts "You still need to install some gems manually; a bundler Gemfile is"
|
126
|
+
puts "provided, so all you really need to do is:"
|
127
|
+
puts " $ cd #{path}"
|
128
|
+
puts " $ gem install bundler"
|
129
|
+
puts " $ bundle install"
|
130
|
+
puts "But there are some extra steps if you want to use RVM. See the README:"
|
131
|
+
puts " http://github.com/a-e/FitNexus"
|
132
|
+
puts "for more information."
|
133
|
+
puts ""
|
134
|
+
puts "Once all gems are installed, you can start using your new wiki:"
|
135
|
+
puts " $ cd #{path}"
|
136
|
+
puts " $ ./run.sh"
|
137
|
+
puts "Please report any problems to http://github.com/a-e/FitNexus/issues"
|
138
|
+
puts "Enjoy!"
|
139
|
+
end
|
140
|
+
|
141
|
+
# Create a FitNexus project in the given path.
|
142
|
+
def create_project(path)
|
143
|
+
path = File.expand_path(path)
|
144
|
+
startup_message(path)
|
145
|
+
create_dir(path)
|
146
|
+
download_fitnesse(path)
|
147
|
+
create_fitnesse_root(path)
|
148
|
+
install_mastiffe(path)
|
149
|
+
install_template(path)
|
150
|
+
# TODO: Error handling
|
151
|
+
success_message(path)
|
152
|
+
end
|
153
|
+
|
154
|
+
end # module FitNexus
|
155
|
+
|
156
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
This page is an example of a Cukable feature. The steps in this table must be defined normally in your Cucumber step definitions.
|
2
|
+
|
3
|
+
!| Table: Cuke |
|
4
|
+
| Feature: Feed kitty |
|
5
|
+
| Scenario: Canned food |
|
6
|
+
| Given I have a can of cat food |
|
7
|
+
| When I feed it to my cat |
|
8
|
+
| Then the cat should purr |
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Test/>
|
10
|
+
<Versions>true</Versions>
|
11
|
+
<WhereUsed>true</WhereUsed>
|
12
|
+
</properties>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
This subwiki has some examples of how to write automated Cucumber tests using Cukable. See the [[Cukable documentation][http://rdoc.info/github/wapcaplet/cukable/frames]] for more comprehensive information.
|
2
|
+
|
3
|
+
If you already have a suite of Cucumber tests, and you'd like to convert them for use by Cukable, [[use the cuke2fit script][http://rdoc.info/github/wapcaplet/cukable/master/file/docs/converting.md]]. You'll also need to [[configure Cucumber with the Slim JSON output formatter][http://rdoc.info/github/wapcaplet/cukable/master/file/docs/install.md]].
|
4
|
+
|
5
|
+
The main subwiki for your Cukable tests must include these lines:
|
6
|
+
!define TEST_SYSTEM {slim}
|
7
|
+
!define TEST_RUNNER {rubyslim}
|
8
|
+
!define COMMAND_PATTERN {rubyslim}
|
9
|
+
|
10
|
+
If you're using [[Bundler][http://gembundler.com]], you may need to change ''rubyslim'' to ''bundle exec rubyslim'' in the lines above.
|
11
|
+
|
12
|
+
!contents -R2 -g -p -f -h
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
!1 Welcome to !-FitNexus-!
|
2
|
+
|
3
|
+
Now that you've set up your !-FitNexus-! wiki, you can start writing some tests. Check out the templates below to get started.
|
4
|
+
|
5
|
+
* MastiffeTemplate - for manual tests
|
6
|
+
* RselTemplate - for automated tests using Selenium
|
7
|
+
* CukableTemplate - for automated tests using Cucumber
|
8
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
This page is an example of what a Mastiffe test looks like. When you edit this page, you should see a section above the editing area with Mastiffe buttons for adding new steps or editing existing ones.
|
2
|
+
|
3
|
+
!define passbutton {Pass}
|
4
|
+
!define failbutton {Fail}
|
5
|
+
|
6
|
+
| table: Mastiffe test |
|
7
|
+
| Test step | Expected result | Example data |
|
8
|
+
| Start the test |!- a FitNesse dialog appears -!| |
|
9
|
+
| Click ${passbutton} | The step passes | |
|
10
|
+
| Click ${failbutton} | the step fails | |
|
11
|
+
| This is a really long test step. I wonder how it will wrap, or if it will wrap at all, or if it will simply create a really wide dialog? | The text wraps | |
|
12
|
+
|!- Look at <img src="/files/images/FitNesseLogo.gif" /> -!|!- The FitNesse logo appears. -!| |
|
13
|
+
| Click on http://www.automation-excellence.com/ | The link works. After clicking on it the <a href="www.automation-excellence.com">Automation Excellence page</a> appears. But this HTML still looks like HTML. | |
|
14
|
+
| Call HelperTests.GoogleFor | | |
|
15
|
+
| Call .MastiffeDemo.HelperTests.GoogleFor | | searchengine:Yahoo! |
|
16
|
+
|!- This|step|is|escaped -!| the step is pipe-delimited |!-Like|this|text|is.-!|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Test/>
|
10
|
+
<Versions>true</Versions>
|
11
|
+
<WhereUsed>true</WhereUsed>
|
12
|
+
</properties>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Mastiffe tests can call each other using the '''Call''' command. This page defines a reusable test that can be called from other tests.
|
2
|
+
|
3
|
+
!contents
|
4
|
+
|
5
|
+
!define searchterms {Automation Excellence}
|
6
|
+
!define searchengine {Google}
|
7
|
+
|
8
|
+
|table:mastiffe test|
|
9
|
+
|Browse to the ${searchengine} homepage|The ${searchengine} homepage appears| |
|
10
|
+
|Search ${searchengine} for ${searchterms}|The page for ${searchterms} is found successfully| |
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Test/>
|
10
|
+
<Versions>true</Versions>
|
11
|
+
<WhereUsed>true</WhereUsed>
|
12
|
+
</properties>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
This subwiki is a template for writing manual tests using Mastiffe. Some basic configuration settings are provided, along with example tests. See the [[Mastiffe documentation][http://github.com/a-e/Mastiffe]] for more information.
|
2
|
+
|
3
|
+
These variables must be defined in order for Mastiffe to work:
|
4
|
+
!define TEST_SYSTEM {slim}
|
5
|
+
!define TEST_RUNNER {rubyslim}
|
6
|
+
!define COMMAND_PATTERN {rubyslim}
|
7
|
+
|
8
|
+
If you're using [[Bundler][http://gembundler.com]], you may need to change ''rubyslim'' to ''bundle exec rubyslim'' in the lines above.
|
9
|
+
|
10
|
+
!contents -R2 -g -p -f -h
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
The website you are testing:
|
2
|
+
!define SITE_URL {http://www.example.com}
|
3
|
+
|
4
|
+
Where Selenium Server is running (host name or IP):
|
5
|
+
!define SELENIUM_HOST {localhost}
|
6
|
+
|
7
|
+
Here's a script table that uses the "Login" and "Logout" scenarios defined in ScenarioLibrary:
|
8
|
+
| script | selenium test | ${SITE_URL} | !{host:${SELENIUM_HOST}} |
|
9
|
+
| Open browser |
|
10
|
+
| Maximize browser |
|
11
|
+
| Login with username douglas and password slartibartfast |
|
12
|
+
| See | Sirius Cybernetics Corporation |
|
13
|
+
| Do not see | Marketing Division |
|
14
|
+
| Logout |
|
15
|
+
| Close browser |
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Test/>
|
10
|
+
<Versions>true</Versions>
|
11
|
+
<WhereUsed>true</WhereUsed>
|
12
|
+
</properties>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
This is where you may optionally define reusable scenarios that are shared by your Rsel script tables. Here are a couple of examples:
|
2
|
+
|
3
|
+
| scenario | Login with username _ and password _ | username, password |
|
4
|
+
| Visit | /login |
|
5
|
+
| Fill in | Username | with | @username |
|
6
|
+
| Fill in | Password | with | @password |
|
7
|
+
| Press | Log in |
|
8
|
+
| See | Welcome, @username |
|
9
|
+
|
10
|
+
| scenario | Logout |
|
11
|
+
| Click | Log out | link |
|
12
|
+
| See | You are logged out |
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
This subwiki is a template for writing Selenium-automated tests using Rsel. It provides some basic configuration and suggestions, but you'll need to customize it to meet your needs. See the [[Rsel documentation][http://rdoc.info/github/a-e/rsel/master/frames]] for more details.
|
2
|
+
|
3
|
+
These variables must be defined in order for Rsel to work:
|
4
|
+
!define TEST_SYSTEM {slim}
|
5
|
+
!define TEST_RUNNER {rubyslim}
|
6
|
+
!define COMMAND_PATTERN {rubyslim}
|
7
|
+
|
8
|
+
If you're using [[Bundler][http://gembundler.com]], you may need to change ''rubyslim'' to ''bundle exec rubyslim'' in the lines above.
|
9
|
+
|
10
|
+
Put your tests in subpages of this page. See the example tests below for ideas.
|
11
|
+
|
12
|
+
!contents -R2 -g -p -f -h
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<properties>
|
3
|
+
<Edit>true</Edit>
|
4
|
+
<Files>true</Files>
|
5
|
+
<Properties>true</Properties>
|
6
|
+
<RecentChanges>true</RecentChanges>
|
7
|
+
<Refactor>true</Refactor>
|
8
|
+
<Search>true</Search>
|
9
|
+
<Versions>true</Versions>
|
10
|
+
<WhereUsed>true</WhereUsed>
|
11
|
+
</properties>
|
@@ -0,0 +1,91 @@
|
|
1
|
+
/* CSS tweaks for FitNexus */
|
2
|
+
|
3
|
+
@import url( "/files/css/fitnesse_base.css" );
|
4
|
+
|
5
|
+
div.sidebar {
|
6
|
+
background-color: #fff;
|
7
|
+
}
|
8
|
+
|
9
|
+
a:link {
|
10
|
+
color: #84AC17;
|
11
|
+
text-decoration: none;
|
12
|
+
}
|
13
|
+
a:visited {
|
14
|
+
color: #84AC17;
|
15
|
+
text-decoration: none;
|
16
|
+
}
|
17
|
+
a:hover {
|
18
|
+
color: #54CC08;
|
19
|
+
text-decoration: underline;
|
20
|
+
}
|
21
|
+
|
22
|
+
.actions a {
|
23
|
+
border-radius: 3px;
|
24
|
+
-moz-border-radius: 3px;
|
25
|
+
-webkitborder-radius: 3px;
|
26
|
+
}
|
27
|
+
|
28
|
+
.actions a:link,
|
29
|
+
.actions a:visited {
|
30
|
+
background-color: #F7F5F3;
|
31
|
+
border: 1px solid #EAE7E3;
|
32
|
+
}
|
33
|
+
|
34
|
+
.actions a:hover {
|
35
|
+
background-color: #EFEBE7;
|
36
|
+
}
|
37
|
+
|
38
|
+
h1, h2, h3, h4 {
|
39
|
+
font-variant: normal;
|
40
|
+
}
|
41
|
+
|
42
|
+
.page_type {
|
43
|
+
font-variant: normal;
|
44
|
+
}
|
45
|
+
|
46
|
+
table {
|
47
|
+
border: 1px solid black;
|
48
|
+
background: white;
|
49
|
+
}
|
50
|
+
|
51
|
+
tr {
|
52
|
+
background: transparent;
|
53
|
+
}
|
54
|
+
|
55
|
+
td, th {
|
56
|
+
border-width: 0 1 1px 0;
|
57
|
+
border-color: #ccc;
|
58
|
+
border-style: solid;
|
59
|
+
}
|
60
|
+
|
61
|
+
.source_file {
|
62
|
+
color: #aaa;
|
63
|
+
padding-left: 1em;
|
64
|
+
float: right;
|
65
|
+
}
|
66
|
+
|
67
|
+
.pass {
|
68
|
+
color: #090;
|
69
|
+
background-color: #DFD;
|
70
|
+
}
|
71
|
+
|
72
|
+
.fail {
|
73
|
+
color: #B00;
|
74
|
+
background-color: #FDD;
|
75
|
+
}
|
76
|
+
|
77
|
+
.ignore {
|
78
|
+
color: #999;
|
79
|
+
font-style: italic;
|
80
|
+
background-color: #EEE;
|
81
|
+
}
|
82
|
+
|
83
|
+
.error {
|
84
|
+
color: #C80;
|
85
|
+
background-color: #FEB;
|
86
|
+
}
|
87
|
+
#execution-status, #stop-test {
|
88
|
+
width: 130px;
|
89
|
+
font-size: 0.8em;
|
90
|
+
}
|
91
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
HtmlPageFactory=mastiffe.MastiffeHtmlPageFactory
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fitnexus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Automation Excellence
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-09-02 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: " FitNexus installs a FitNesse wiki with several enhancements, including\n Mastiffe for manual testing, Rsel for Selenium testing, and Cukable for\n Cucumber testing.\n"
|
23
|
+
email: wapcaplet88@gmail.com
|
24
|
+
executables:
|
25
|
+
- fitnexus
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- History.md
|
33
|
+
- MIT-LICENSE
|
34
|
+
- README.md
|
35
|
+
- bin/fitnexus
|
36
|
+
- fitnexus.gemspec
|
37
|
+
- lib/fitnexus/project.rb
|
38
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/FeedKitty/content.txt
|
39
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/FeedKitty/properties.xml
|
40
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/SetUp/content.txt
|
41
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/SetUp/properties.xml
|
42
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/content.txt
|
43
|
+
- lib/fitnexus/template/FitNesseRoot/CukableTemplate/properties.xml
|
44
|
+
- lib/fitnexus/template/FitNesseRoot/FrontPage/content.txt
|
45
|
+
- lib/fitnexus/template/FitNesseRoot/FrontPage/properties.xml
|
46
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/DemoPage/content.txt
|
47
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/DemoPage/properties.xml
|
48
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/GoogleFor/content.txt
|
49
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/GoogleFor/properties.xml
|
50
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/content.txt
|
51
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/HelperTests/properties.xml
|
52
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/SetUp/content.txt
|
53
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/SetUp/properties.xml
|
54
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/content.txt
|
55
|
+
- lib/fitnexus/template/FitNesseRoot/MastiffeTemplate/properties.xml
|
56
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/LoginTest/content.txt
|
57
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/LoginTest/properties.xml
|
58
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/ScenarioLibrary/content.txt
|
59
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/ScenarioLibrary/properties.xml
|
60
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/SetUp/content.txt
|
61
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/SetUp/properties.xml
|
62
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/content.txt
|
63
|
+
- lib/fitnexus/template/FitNesseRoot/RselTemplate/properties.xml
|
64
|
+
- lib/fitnexus/template/FitNesseRoot/files/css/fitnesse.css
|
65
|
+
- lib/fitnexus/template/Gemfile
|
66
|
+
- lib/fitnexus/template/plugins.properties
|
67
|
+
- lib/fitnexus/template/run.sh
|
68
|
+
has_rdoc: true
|
69
|
+
homepage: http://github.com/a-e/fitnexus
|
70
|
+
licenses: []
|
71
|
+
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
version: "0"
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.3.7
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: FitNesse with benefits
|
102
|
+
test_files: []
|
103
|
+
|