wsl 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +18 -0
- data/README.txt +18 -0
- data/Rakefile +15 -0
- data/examples/ClickExample.rb +37 -0
- data/examples/DemoExample.rb +41 -0
- data/examples/DemoTestSuite.rb +18 -0
- data/examples/GoogleSearchExample_WSL.rb +19 -0
- data/examples/SelectExample.rb +50 -0
- data/examples/SuiteCleanup.rb +9 -0
- data/examples/SuiteStartup.rb +9 -0
- data/lib/IEContext.rb +73 -0
- data/lib/utils/Logger.rb +311 -0
- data/lib/utils/TestSuiteCleanup.rb +24 -0
- data/lib/utils/TestSuiteStartup.rb +29 -0
- data/lib/wsl.rb +600 -0
- data/lib/wslPrivate.rb +40 -0
- data/lib/wslSuite.rb +32 -0
- data/wsl.gemspec +34 -0
- metadata +91 -0
data/Manifest
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
examples/ClickExample.rb
|
2
|
+
examples/DemoExample.rb
|
3
|
+
examples/DemoTestSuite.rb
|
4
|
+
examples/GoogleSearchExample_WSL.rb
|
5
|
+
examples/SelectExample.rb
|
6
|
+
examples/SuiteCleanup.rb
|
7
|
+
examples/SuiteStartup.rb
|
8
|
+
lib/IEContext.rb
|
9
|
+
lib/utils/Logger.rb
|
10
|
+
lib/utils/TestSuiteCleanup.rb
|
11
|
+
lib/utils/TestSuiteStartup.rb
|
12
|
+
lib/wsl.rb
|
13
|
+
lib/wslPrivate.rb
|
14
|
+
lib/wslSuite.rb
|
15
|
+
Manifest
|
16
|
+
Rakefile
|
17
|
+
README.txt
|
18
|
+
wsl.gemspec
|
data/README.txt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
This is the WSL gem. Currently there is no licence associated with it, and the source is not open source yet.
|
2
|
+
|
3
|
+
Legal mumbo-jumbo disclaimer (just to cover my ass) -
|
4
|
+
The software is provided as is, and there is no guarantee of its suitability for a particular task.
|
5
|
+
You use it at your own risk, and the creator(s) of the software accept no liability whatsoever.
|
6
|
+
|
7
|
+
Go to http;//wsl.xqoob.com for more details.
|
8
|
+
|
9
|
+
NOTE: if after installing WSL you get the following error -
|
10
|
+
"C:/Ruby/lib/ruby/gems/1.8/gems/windows-pr-0.9.3/lib/windows/thread.rb:59:
|
11
|
+
uninitialized constant Windows::API::Error (NameError)"
|
12
|
+
run these commands-
|
13
|
+
$> Gem uninstall windows-pr
|
14
|
+
$> Gem install windows-pr
|
15
|
+
See http://groups.google.com/group/watir-general/browse_thread/thread/3f6741eccf0cb7b8 for more details.
|
16
|
+
|
17
|
+
30-apr-2009
|
18
|
+
Wadud Ruf
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
spec = Echoe.new('wsl', '0.1.4') do |s|
|
6
|
+
s.platform = Gem::Platform::RUBY
|
7
|
+
s.author = "Wadud Ruf"
|
8
|
+
s.email = "wadud.ruf@xqoob.com"
|
9
|
+
s.summary = "WSL (WATiR Scripting Language) is a DSL built on top of WATiR that allows for the automation of web application testing through Internet Explorer."
|
10
|
+
s.files = FileList['lib/*.rb', 'lib/utils/*.rb', 'lib/utils/cache/', 'test/*', 'examples/*'].to_a
|
11
|
+
s.runtime_dependencies = ["watir >=1.6.2"]
|
12
|
+
s.url = "http://wsl.xqoob.com"
|
13
|
+
s.project = "wsl"
|
14
|
+
s.need_tar_gz = false
|
15
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "wsl" # You require this file for all the WSL keywords.
|
2
|
+
|
3
|
+
# You start all test scripts by specifying a name for it.
|
4
|
+
start "Click Keyword Example"
|
5
|
+
|
6
|
+
rem "This example will show you how to use the 'click' keyword by searching for a stock quote through yahoo."
|
7
|
+
|
8
|
+
open_url "http://www.yahoo.co.uk"
|
9
|
+
|
10
|
+
rem "We will get a quote for the google (goog) share price."
|
11
|
+
enter_text_in "Enter ticker symbol", ":title", "goog"
|
12
|
+
|
13
|
+
rem "We need to click the go button to look up the share price."
|
14
|
+
click "quote-submit"
|
15
|
+
|
16
|
+
rem "We need to do a test to ensure it has worked properly."
|
17
|
+
assert_text "NasdaqGS: GOOG", "Exists on screen for Google stock quote lookup."
|
18
|
+
|
19
|
+
rem "Go back a page."
|
20
|
+
back
|
21
|
+
|
22
|
+
rem "This time we'll use the text of the button with the 'click' keyword (it is case sensitive)."
|
23
|
+
click "Go", ":value"
|
24
|
+
|
25
|
+
rem "Re-assert that it has worked."
|
26
|
+
assert_text "NasdaqGS: GOOG", "Exists on screen for Google stock quote lookup."
|
27
|
+
|
28
|
+
rem "Let's click something other than a button and asset it has worked ok."
|
29
|
+
click "Google Inc. (GOOG)", ":alt"
|
30
|
+
assert_all_text ["Basic Chart", "Full Screen", "Print", "Share", "Send Feedback"]
|
31
|
+
|
32
|
+
rem "Finally let's click a link to go back to the summary page."
|
33
|
+
click "/q?s=GOOG", ":href"
|
34
|
+
|
35
|
+
rem "Finish all test scripts using the 'finish' keyword.
|
36
|
+
This closes the browser and outputs a test summary of passed and failed tests in the script."
|
37
|
+
finish
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "wsl"
|
2
|
+
|
3
|
+
#-------------------------------------------------------------#
|
4
|
+
# Demo test for the WSL.
|
5
|
+
#
|
6
|
+
# Purpose: to demonstrate the following Watir functionality:
|
7
|
+
# * entering text into a text field,
|
8
|
+
# * clicking a button,
|
9
|
+
# * checking to see if a page contains text.
|
10
|
+
# Test will search Google for the "pickaxe" Ruby book and buy
|
11
|
+
# from amazon.
|
12
|
+
#-------------------------------------------------------------#
|
13
|
+
|
14
|
+
# open a browser
|
15
|
+
start "Google Search Test"
|
16
|
+
|
17
|
+
# print some comments
|
18
|
+
rem "Beginning of test: Google search."
|
19
|
+
|
20
|
+
open_url "http://www.google.com"
|
21
|
+
|
22
|
+
rem "Enter 'pickaxe' in the search text field."
|
23
|
+
enter_text_in "Google Search", ":title", "pickaxe book"
|
24
|
+
|
25
|
+
rem "Click the 'Google Search' button."
|
26
|
+
click "Google Search", ":value"
|
27
|
+
|
28
|
+
assert_text "Programming Ruby: The Pragmatic Programmer's", "is shown high on the list."
|
29
|
+
|
30
|
+
rem "Lets buy the book!"
|
31
|
+
click "http://www.amazon.co.uk/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055", ":href"
|
32
|
+
|
33
|
+
assert_url "http://www.amazon.co.uk/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055", "is the current page."
|
34
|
+
|
35
|
+
rem "Lets buy 10 copies."
|
36
|
+
select "quantity", ":id", "10"
|
37
|
+
click "Add to Shopping Basket", ":alt"
|
38
|
+
click "Proceed to Checkout", ":alt"
|
39
|
+
|
40
|
+
assert_text "Enter your e-mail address:", "exists on screen for the sign in page."
|
41
|
+
finish
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#-------------------------------------------------------------#
|
2
|
+
# This script declares a suite of tests that are to be run sequentially.
|
3
|
+
# Before the tests are run a startup script is run, and after a cleanup script.
|
4
|
+
#
|
5
|
+
#-------------------------------------------------------------#
|
6
|
+
|
7
|
+
require "wslSuite"
|
8
|
+
|
9
|
+
# The startup script.
|
10
|
+
startup_script "SuiteStartup"
|
11
|
+
|
12
|
+
# The test suite.
|
13
|
+
test_suite "DemoExample",
|
14
|
+
"ClickExample",
|
15
|
+
"SelectExample"
|
16
|
+
|
17
|
+
# The cleanup script.
|
18
|
+
cleanup_script "SuiteCleanup"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#-------------------------------------------------------------#
|
2
|
+
# Demo test for the Watir controller.
|
3
|
+
#
|
4
|
+
# Purpose: to demonstrate the following WSL functionality:
|
5
|
+
# * entering text into a text field,
|
6
|
+
# * clicking a button,
|
7
|
+
# * checking to see if a page contains text.
|
8
|
+
# Test will search Google for the "pickaxe" Ruby book.
|
9
|
+
#-------------------------------------------------------------#
|
10
|
+
|
11
|
+
require "wsl"
|
12
|
+
|
13
|
+
start "Google Search Test"
|
14
|
+
open_url "http://www.google.com"
|
15
|
+
enter_text_in "Google Search", ":title", "pickaxe book"
|
16
|
+
click "Google Search", ":value"
|
17
|
+
assert_text "The Pragmatic Bookshelf | Programming Ruby", "is shown high on the list."
|
18
|
+
|
19
|
+
finish
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "wsl" # You require this file for all the WSL keywords.
|
2
|
+
|
3
|
+
# You start all test scripts by specifying a name for it.
|
4
|
+
start "Select Keyword Example"
|
5
|
+
|
6
|
+
rem "This example will show you how to use the 'select' keyword by searching for some train times."
|
7
|
+
|
8
|
+
open_url "http://www.thetrainline.com"
|
9
|
+
|
10
|
+
enter_text_in "fromfield", ":id", "Bristol temple meads"
|
11
|
+
enter_text_in "tofield", ":id", "glasgow"
|
12
|
+
|
13
|
+
rem "Enter our departure date as tomorrow."
|
14
|
+
click "Tomorrow", ":text"
|
15
|
+
|
16
|
+
rem "Lets set our departure time as 11:15am."
|
17
|
+
select "ttl-e842cbdc-2bda-4ad4-bb17-1c6ddad60de1", ":id", "11"
|
18
|
+
select "outMinuteField", ":name", "15"
|
19
|
+
|
20
|
+
rem "and I want it to be one-way"
|
21
|
+
select "outonly"
|
22
|
+
|
23
|
+
rem "actually I change my mind and want to make it an open return for the next day."
|
24
|
+
select "outonly", ":id", false
|
25
|
+
click "Next Day", ":text"
|
26
|
+
|
27
|
+
rem "Let's get the train times."
|
28
|
+
click "Get times & tickets", ":value"
|
29
|
+
|
30
|
+
rem "Test to see that we have successfully performed a search."
|
31
|
+
assert_text "Bristol Temple Meads to Glasgow", "exists on screen for a successful search."
|
32
|
+
|
33
|
+
rem "Ensure we have selected the return ticket option."
|
34
|
+
select "ttl-4b048d62-93a1-4408-b4b5-28159e1f8de7", ":id", "Return"
|
35
|
+
|
36
|
+
rem "And the correct railcard"
|
37
|
+
select "ttl-6c1cba59-9ffd-4a5c-a188-2234b04a2419", ":id", "16-25 RAILCARD"
|
38
|
+
|
39
|
+
click "Advanced Options >>", ":text"
|
40
|
+
select "ttl-e8d8a9b9-5c78-44d1-9635-98e5c0203339"
|
41
|
+
enter_text_in "ttl-cfa9a1a7-e970-4f98-ac90-8e7dc35ff759", ":id", "MANCHESTER PICCADILLY"
|
42
|
+
|
43
|
+
click "CHECK_AVAILABILITY", ":name"
|
44
|
+
|
45
|
+
rem "Test for the success of the availability search."
|
46
|
+
assert_text "Tickets /", "Exists on screen for a successful search."
|
47
|
+
|
48
|
+
rem "Finish all test scripts using the 'finish' keyword.
|
49
|
+
This closes the browser and outputs a test summary of passed and failed tests in the script."
|
50
|
+
finish
|
data/lib/IEContext.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require "watir"
|
2
|
+
require "watir/watir_simple"
|
3
|
+
require "utils/Logger"
|
4
|
+
|
5
|
+
|
6
|
+
class BrowserContext
|
7
|
+
include Watir::Simple
|
8
|
+
include Watir
|
9
|
+
include Test::Unit::Assertions
|
10
|
+
|
11
|
+
attr_accessor :testName
|
12
|
+
attr_reader :logger # Readonly access to logger.
|
13
|
+
|
14
|
+
##
|
15
|
+
# Initialises a new BrowserContext object.
|
16
|
+
# Essentially this is inherits from Watir.Simple,
|
17
|
+
# and uses it's class variable '@@browser'.
|
18
|
+
#
|
19
|
+
# testName: The name you want to give the test.
|
20
|
+
# logFile: The file you want to log to. Defaults to
|
21
|
+
# a log file with the same name as the script in the logs directory.
|
22
|
+
#
|
23
|
+
def initialize(testName=nil, logFile=nil)
|
24
|
+
# Set the test name.
|
25
|
+
@testName = testName
|
26
|
+
|
27
|
+
# Put the log file in the logs directory.
|
28
|
+
if logFile == nil then
|
29
|
+
logFile = $0.to_s.split("/")[-1].chomp(".rb") + ".log"
|
30
|
+
end
|
31
|
+
|
32
|
+
logFile = "logs/" + logFile
|
33
|
+
|
34
|
+
# Create the logger.
|
35
|
+
@logger = Wsl::CustomLogger.new(logFile)
|
36
|
+
|
37
|
+
# Output name if passed in.
|
38
|
+
@logger.logTestName(testName) if testName != nil
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Returns the browser url.
|
43
|
+
#
|
44
|
+
def currentUrl
|
45
|
+
if defined? @@browser then
|
46
|
+
return @@browser.url()
|
47
|
+
else
|
48
|
+
return ""
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Provides access to the browser class variable.
|
54
|
+
#
|
55
|
+
def browser
|
56
|
+
return @@browser
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Attaches to a titled browser window.
|
61
|
+
#
|
62
|
+
def attach(windowTitle)
|
63
|
+
@@browser = Watir::IE.attach(:title, windowTitle)
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# The tags which are valid within the browser context.
|
68
|
+
# Note: Ordering of the tags is important.
|
69
|
+
#
|
70
|
+
def tagsInContext()
|
71
|
+
%w[button link image div span text_field checkbox radio select_list]
|
72
|
+
end
|
73
|
+
end
|
data/lib/utils/Logger.rb
ADDED
@@ -0,0 +1,311 @@
|
|
1
|
+
|
2
|
+
#-------------------------------------------------------------#
|
3
|
+
# Summary: Lightweight logger implementation.
|
4
|
+
#
|
5
|
+
# Purpose: To allow logging of messages to console and file.
|
6
|
+
# It is anticipated that the logging mechanism will evolve
|
7
|
+
# in general so having a logger class that implements the
|
8
|
+
# standard logger is the best way to go.
|
9
|
+
# Pre-con: Ensure log file directory exists.
|
10
|
+
# Post-con: None.
|
11
|
+
#-------------------------------------------------------------#
|
12
|
+
|
13
|
+
require "log4r"
|
14
|
+
require "log4r/formatter/patternformatter"
|
15
|
+
|
16
|
+
module Wsl
|
17
|
+
class CustomLogger
|
18
|
+
|
19
|
+
# Class constant cannot be accessed outside of class.
|
20
|
+
@@HEADER = "======"
|
21
|
+
@@localCacheFile = ".\\logs\\.cache\\TestSummary.dat"
|
22
|
+
|
23
|
+
# Static methods to get log level (cannot assign to these).
|
24
|
+
# Within class, but outside of method, use 'self.debug' to call.
|
25
|
+
# within method use 'CustomLogger.debug' to call.
|
26
|
+
def self.debug; "debug"; end
|
27
|
+
def self.info; "info"; end
|
28
|
+
def self.warn; "warn"; end
|
29
|
+
def self.error; "error"; end
|
30
|
+
def self.fatal; "fatal"; end
|
31
|
+
|
32
|
+
# Actual results constants.
|
33
|
+
def self.pass; "PASS"; end
|
34
|
+
def self.fail; "FAIL"; end
|
35
|
+
|
36
|
+
attr_reader :passedTests, :failedTests
|
37
|
+
|
38
|
+
##
|
39
|
+
# Constructor logs to file as well
|
40
|
+
# as screen if specified.
|
41
|
+
#
|
42
|
+
# logFile: path to log file.
|
43
|
+
#
|
44
|
+
def initialize(logFile)
|
45
|
+
# Initialise instance counters.
|
46
|
+
@step = 1
|
47
|
+
@passedTests = 0
|
48
|
+
@failedTests = 0
|
49
|
+
@logFile = logFile
|
50
|
+
|
51
|
+
# Create the log dir and cache dir structure.
|
52
|
+
createDirs()
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Logs the name of the test.
|
57
|
+
#
|
58
|
+
def logTestName(testName)
|
59
|
+
@testName = testName
|
60
|
+
# logEntry(CustomLogger.info, "")
|
61
|
+
logEntry(CustomLogger.info, @@HEADER + " Started Test: " + @testName + " " + @@HEADER)
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Logs a test step.
|
66
|
+
#
|
67
|
+
def logStep(description)
|
68
|
+
logEntry(CustomLogger.info, " Step " + @step.to_s + ": " + description)
|
69
|
+
@step += 1
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
# Logs a test comment.
|
74
|
+
#
|
75
|
+
def logComment(description)
|
76
|
+
logEntry(CustomLogger.info, ">" + description)
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Logs the expected results.
|
81
|
+
#
|
82
|
+
def logExpectedResult(expectedResults)
|
83
|
+
logEntry(CustomLogger.info, "")
|
84
|
+
logEntry(CustomLogger.info, " Expected Result:")
|
85
|
+
logEntry(CustomLogger.info, " " + expectedResults)
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Resets the logger by doing the following -
|
90
|
+
# Step counter starts from 1 again.
|
91
|
+
#
|
92
|
+
def reset
|
93
|
+
@step = 1
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# Logs the actual results.
|
98
|
+
#
|
99
|
+
def logActualResult(passOrFail, message)
|
100
|
+
logEntry(CustomLogger.info, " Actual Result:")
|
101
|
+
logEntry(CustomLogger.info, " " + passOrFail + ": " + message)
|
102
|
+
logEntry(CustomLogger.info, "")
|
103
|
+
|
104
|
+
if passOrFail == CustomLogger.pass then
|
105
|
+
@passedTests += 1
|
106
|
+
else
|
107
|
+
@failedTests += 1
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
##
|
112
|
+
# Logs an exception.
|
113
|
+
#
|
114
|
+
# exception: The exception to log.
|
115
|
+
#
|
116
|
+
def logException(exception)
|
117
|
+
logEntry(CustomLogger.error, " FAIL WITH EXCEPTION: " + exception.message + "\n" +
|
118
|
+
exception.backtrace.join("\n"))
|
119
|
+
|
120
|
+
@failedTests += 1
|
121
|
+
end
|
122
|
+
|
123
|
+
def logEndTest()
|
124
|
+
logEntry(CustomLogger.info, @@HEADER + " Finished Test: " + @testName + " " + @@HEADER)
|
125
|
+
end
|
126
|
+
|
127
|
+
##
|
128
|
+
# Prints a summary of passed and failed tests for
|
129
|
+
# a script.
|
130
|
+
#
|
131
|
+
def summary
|
132
|
+
logEntry(CustomLogger.info, "")
|
133
|
+
logEntry(CustomLogger.info, "Test Summary:")
|
134
|
+
logEntry(CustomLogger.info, " Passed Tests: " + @passedTests.to_s)
|
135
|
+
logEntry(CustomLogger.info, " Failed Tests: " + @failedTests.to_s)
|
136
|
+
logEntry(CustomLogger.info, "")
|
137
|
+
|
138
|
+
file = File.open(@@localCacheFile, "a")
|
139
|
+
file.puts("Passed:" + @passedTests.to_s + "\tFailed:" + @failedTests.to_s + "\t" + @testName)
|
140
|
+
file.close
|
141
|
+
end
|
142
|
+
|
143
|
+
##
|
144
|
+
# Prints a summary of the total passed and failed tests for
|
145
|
+
# all scripts in a run.
|
146
|
+
#
|
147
|
+
def totalSummary
|
148
|
+
|
149
|
+
# Ensure cache file exists first.
|
150
|
+
if !File.exist?(@@localCacheFile) then
|
151
|
+
return
|
152
|
+
end
|
153
|
+
|
154
|
+
# Output the total summary to logger.
|
155
|
+
|
156
|
+
logEntry(CustomLogger.info, "+-------------------------------------------------------------------------------+")
|
157
|
+
logEntry(CustomLogger.info, " Total Test Summary:")
|
158
|
+
|
159
|
+
lines = IO.readlines(@@localCacheFile)
|
160
|
+
lines.each do |line|
|
161
|
+
if line != nil then
|
162
|
+
logEntry(CustomLogger.info, " " + line.chomp)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
logEntry(CustomLogger.info, "+-------------------------------------------------------------------------------+")
|
167
|
+
|
168
|
+
# Delete the file.
|
169
|
+
clearCache
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
# Clears the cache with the results of any old tests that have run.
|
174
|
+
#
|
175
|
+
def clearCache
|
176
|
+
# Delete the file.
|
177
|
+
if File.exist?(@@localCacheFile) then
|
178
|
+
File.delete(@@localCacheFile)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
##
|
183
|
+
# Logs an entry to the log.
|
184
|
+
#
|
185
|
+
# entry: What to log
|
186
|
+
#
|
187
|
+
def log(entry)
|
188
|
+
logEntry(CustomLogger.info, entry)
|
189
|
+
end
|
190
|
+
|
191
|
+
##
|
192
|
+
# Initialises a logger with the standard WSL logger settings
|
193
|
+
# and returns it.
|
194
|
+
#
|
195
|
+
def self.initializeSuiteLogger(logFile)
|
196
|
+
CustomLogger.initializeLogger(logFile)
|
197
|
+
end
|
198
|
+
|
199
|
+
##
|
200
|
+
# Private method from here onwards.
|
201
|
+
#
|
202
|
+
private
|
203
|
+
|
204
|
+
def logEntry(level, entry)
|
205
|
+
# Initialise the logger if it is not already defined.
|
206
|
+
if ! defined? $logger then
|
207
|
+
CustomLogger.initializeLogger(@logFile)
|
208
|
+
end
|
209
|
+
|
210
|
+
# Log to file at correct level.
|
211
|
+
if level == CustomLogger.debug then
|
212
|
+
$logger.debug(entry)
|
213
|
+
elsif level == CustomLogger.info then
|
214
|
+
$logger.info(entry)
|
215
|
+
elsif level == CustomLogger.warn then
|
216
|
+
$logger.warn(entry)
|
217
|
+
elsif level == CustomLogger.error then
|
218
|
+
$logger.error(entry)
|
219
|
+
elsif level == CustomLogger.fatal then
|
220
|
+
$logger.fatal(entry)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
# Creates the directories required by the logger class to
|
226
|
+
# output the log files to.
|
227
|
+
#
|
228
|
+
def createDirs()
|
229
|
+
if(@logFile == nil) then
|
230
|
+
return
|
231
|
+
end
|
232
|
+
|
233
|
+
tmp = ""
|
234
|
+
elems = @logFile.split("/")
|
235
|
+
elems.length.times do |elem|
|
236
|
+
# If it's the current dir '.' skip it.
|
237
|
+
if elems[elem] == "." then
|
238
|
+
next
|
239
|
+
elsif elem == (elems.length - 1) then
|
240
|
+
# Create the .cache directory in the leaf dir.
|
241
|
+
if File.exist?(tmp + ".cache") == false then
|
242
|
+
FileUtils.mkdir(tmp + ".cache")
|
243
|
+
end
|
244
|
+
next
|
245
|
+
end
|
246
|
+
|
247
|
+
# Aggregate the files.
|
248
|
+
tmp += elems[elem] + "/"
|
249
|
+
|
250
|
+
# If subdir doesn't exist create it.
|
251
|
+
if File.exist?(tmp) == false then
|
252
|
+
FileUtils.mkdir(tmp)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
##
|
258
|
+
# Static method that initialises a Log4r logger instance
|
259
|
+
# with default values.
|
260
|
+
#
|
261
|
+
# logFile: The name of the log file.
|
262
|
+
#
|
263
|
+
def self.initializeLogger(logFile)
|
264
|
+
Log4r::Logger.root.level = Log4r::INFO
|
265
|
+
$logger = Log4r::Logger.new("WSL")
|
266
|
+
|
267
|
+
consoleFormat = Log4r::PatternFormatter.new(:pattern => "%.2000m")
|
268
|
+
fileFormat = Log4r::PatternFormatter.new(:pattern => "[%d] [%l] : %.2000m")
|
269
|
+
|
270
|
+
# Create an outputter for $stderr. It defaults to the root level
|
271
|
+
stdOutputter = Log4r::StderrOutputter.new('console', :formatter => consoleFormat)
|
272
|
+
|
273
|
+
# for the file, we want to log only INFO, FATAL and ERROR and don't trunc
|
274
|
+
fileOutputter = Log4r::FileOutputter.new('logfile', :filename=>logFile,
|
275
|
+
:trunc=>true, :level=>Log4r::INFO,
|
276
|
+
:formatter => fileFormat)
|
277
|
+
|
278
|
+
# add the outputters (this method accepts outputter names or references)
|
279
|
+
$logger.add('console','logfile')
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
# ===================================
|
285
|
+
# test methods - comment when released!
|
286
|
+
# =====================================
|
287
|
+
# log = Wsl::CustomLogger.new(".\\test\\test2\\testfile.log")
|
288
|
+
# log = Wsl::CustomLogger.new
|
289
|
+
# log.logStep "test step 1"
|
290
|
+
# log.logStep "test step 2"
|
291
|
+
# log.logStep "test step 3"
|
292
|
+
|
293
|
+
# log = Wsl::CustomLogger.new("testfile.log")
|
294
|
+
# log.logStep "Step 1"
|
295
|
+
# log.logStep "Step 2"
|
296
|
+
# log.logStep "Step 3"
|
297
|
+
# log.logStep "Step 4"
|
298
|
+
# log.logStep "Step 5"
|
299
|
+
# log.logStep "Step 6"
|
300
|
+
# log.logStep "Step 7"
|
301
|
+
# log.logStep "Step 8"
|
302
|
+
# log.logStep "Step 9"
|
303
|
+
# log.logStep "Step 10"
|
304
|
+
|
305
|
+
# puts Wsl::CustomLogger::Fail # Access class constant
|
306
|
+
# puts Wsl::CustomLogger::Fail = "unknown" # Get warning cannot assign to constant more than once.
|
307
|
+
# puts Wsl::CustomLogger::Pass
|
308
|
+
# puts log.logTestName("something")
|
309
|
+
# puts Wsl::CustomLogger::HEADER = "$$$$"
|
310
|
+
# puts Wsl::CustomLogger::info
|
311
|
+
# log.logEndTest "something"
|