rakedotnet 1.1.51
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 +15 -0
- data/lib/TODO-publish.rb +2 -0
- data/lib/TODO-settingsfiles.rb +11 -0
- data/lib/base_config.rb +83 -0
- data/lib/basetask.rb +70 -0
- data/lib/bcp.rb +136 -0
- data/lib/config.rb +25 -0
- data/lib/database.rb +59 -0
- data/lib/dotframeworksymbolhelp.rb +8 -0
- data/lib/iis.rb +37 -0
- data/lib/jstest.rb +98 -0
- data/lib/minifyjs.rb +41 -0
- data/lib/msbuild.rb +101 -0
- data/lib/mstest.rb +35 -0
- data/lib/nunit.rb +102 -0
- data/lib/registry_accessor.rb +38 -0
- data/lib/sqlcmd.rb +195 -0
- data/lib/tools.rb +3 -0
- data/lib/windowspaths.rb +28 -0
- data/spec/base.rb +32 -0
- data/spec/basetask_spec.rb +66 -0
- data/spec/basetaskmocking.rb +44 -0
- data/spec/bcp_spec.rb +137 -0
- data/spec/config_spec.rb +43 -0
- data/spec/config_testdata/defaultpartialuser_default.rb +17 -0
- data/spec/config_testdata/defaultpartialuser_user.rb +9 -0
- data/spec/config_testdata/local_properties.rb +13 -0
- data/spec/config_testdata/local_properties_default.rb +15 -0
- data/spec/config_testdata/onlydefault.rb +17 -0
- data/spec/db_spec.rb +88 -0
- data/spec/iis_spec.rb +49 -0
- data/spec/jstest_spec.rb +114 -0
- data/spec/minifyjs_spec.rb +27 -0
- data/spec/msbuild_spec.rb +127 -0
- data/spec/mstest_spec.rb +25 -0
- data/spec/nunit_spec.rb +118 -0
- data/spec/registry_accessor_spec.rb +31 -0
- data/spec/sqlcmd_spec.rb +323 -0
- data/spec/windowspaths_spec.rb +39 -0
- metadata +118 -0
data/lib/tools.rb
ADDED
data/lib/windowspaths.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'registry_accessor'
|
2
|
+
|
3
|
+
module BradyW
|
4
|
+
module WindowsPaths
|
5
|
+
private
|
6
|
+
# Fetches the path for tools like bcp.exe and sqlcmd.exe from the registry
|
7
|
+
def sql_tool version
|
8
|
+
regvalue "SOFTWARE\\Microsoft\\Microsoft SQL Server\\#{version}\\Tools\\ClientSetup", 'Path'
|
9
|
+
end
|
10
|
+
|
11
|
+
# Fetches the path for Visual Studio tools like MSTest.exe from the registry
|
12
|
+
def visual_studio version
|
13
|
+
regvalue "SOFTWARE\\Microsoft\\VisualStudio\\#{version}", 'InstallDir'
|
14
|
+
end
|
15
|
+
|
16
|
+
# Fetches the .NET Framework path from the registry
|
17
|
+
def dotnet subpath
|
18
|
+
regvalue "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\#{subpath}", "InstallPath"
|
19
|
+
end
|
20
|
+
|
21
|
+
def regvalue(key, value)
|
22
|
+
keyAndVal = "#{key}\\#{value}"
|
23
|
+
log "Retrieving registry key #{keyAndVal}"
|
24
|
+
regacc = BradyW::RegistryAccessor.new
|
25
|
+
regacc.regvalue(key,value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/base.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
$: << File.expand_path(File.dirname(__FILE__) +"/../lib")
|
2
|
+
require "rspec"
|
3
|
+
# Needed to mock out our config/props
|
4
|
+
require 'config'
|
5
|
+
require "singleton"
|
6
|
+
|
7
|
+
include FileUtils
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
|
11
|
+
# File dependent tests, so we always baseline ourselves in the test directory
|
12
|
+
config.before(:all) do
|
13
|
+
@current = pwd
|
14
|
+
cd File.expand_path(File.dirname(__FILE__))
|
15
|
+
end
|
16
|
+
|
17
|
+
config.after(:all) do
|
18
|
+
cd @current
|
19
|
+
end
|
20
|
+
|
21
|
+
config.before(:each) do
|
22
|
+
@config = BradyW::BaseConfig.new
|
23
|
+
class MockConfig
|
24
|
+
include Singleton
|
25
|
+
attr_accessor :values
|
26
|
+
end
|
27
|
+
|
28
|
+
# Force only our base class to be returned
|
29
|
+
BradyW::Config.stub!(:instance).and_return(MockConfig.instance)
|
30
|
+
MockConfig.instance.values = @config
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "base"
|
2
|
+
require "basetask"
|
3
|
+
require "basetaskmocking"
|
4
|
+
|
5
|
+
module BradyW
|
6
|
+
class BaseTask < Rake::TaskLib
|
7
|
+
attr_accessor :dependencies
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe BradyW::BaseTask do
|
12
|
+
before(:each) do
|
13
|
+
Rake::Task.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
it "Task with no dependencies/default name" do
|
17
|
+
task = BradyW::BaseTask.new
|
18
|
+
task.should_receive(:log).with("Running task: task")
|
19
|
+
task.name.should == :task
|
20
|
+
task.dependencies.should == nil
|
21
|
+
task.unless.should == nil
|
22
|
+
task.should_receive(:exectask)
|
23
|
+
Rake::Task[:task].invoke
|
24
|
+
end
|
25
|
+
|
26
|
+
it "Task with no dependencies/custom name" do
|
27
|
+
task = BradyW::BaseTask.new "mytask"
|
28
|
+
task.should_receive(:log).with("Running task: mytask")
|
29
|
+
task.name.should == "mytask"
|
30
|
+
task.dependencies.should == nil
|
31
|
+
task.unless.should == nil
|
32
|
+
task.should_receive(:exectask)
|
33
|
+
Rake::Task[:mytask].invoke
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Task with dependencies/custom name" do
|
37
|
+
task = BradyW::BaseTask.new "mytask" => :dependenttask
|
38
|
+
task.name.should == "mytask"
|
39
|
+
task.dependencies.should == :dependenttask
|
40
|
+
task.unless.should == nil
|
41
|
+
|
42
|
+
dtask = BradyW::BaseTask.new "dependenttask"
|
43
|
+
task.should_receive(:exectask)
|
44
|
+
dtask.should_receive(:exectask)
|
45
|
+
|
46
|
+
task.should_receive(:log).with("Running task: mytask")
|
47
|
+
dtask.should_receive(:log).with("Running task: dependenttask")
|
48
|
+
Rake::Task[:mytask].invoke
|
49
|
+
end
|
50
|
+
|
51
|
+
it "Task with dependencies/custom name + block" do
|
52
|
+
task = BradyW::BaseTask.new "mytask" => [:dependenttask, :test] do |t|
|
53
|
+
t.unless = "yes"
|
54
|
+
end
|
55
|
+
task.name.should == "mytask"
|
56
|
+
task.dependencies.should == [:dependenttask, :test]
|
57
|
+
task.unless.should == "yes"
|
58
|
+
|
59
|
+
dtask = BradyW::BaseTask.new "dependenttask"
|
60
|
+
task.should_not_receive(:exectask)
|
61
|
+
dtask.should_not_receive(:exectask)
|
62
|
+
|
63
|
+
task.should_receive(:log).with("Skipping task: mytask due to unless condition specified in rakefile")
|
64
|
+
Rake::Task[:mytask].invoke
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'base'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
module BradyW
|
6
|
+
class BaseTask < Rake::TaskLib
|
7
|
+
def exectaskpublic
|
8
|
+
exectask
|
9
|
+
end
|
10
|
+
|
11
|
+
def shell(*cmd, &block)
|
12
|
+
command = cmd.first
|
13
|
+
puts command
|
14
|
+
# We aren't testing concurrent tasks here, so no thread safety worries
|
15
|
+
if !@sh
|
16
|
+
@sh = []
|
17
|
+
end
|
18
|
+
|
19
|
+
@sh << command
|
20
|
+
|
21
|
+
# Make it look like it went OK
|
22
|
+
yield true, nil if block_given?
|
23
|
+
end
|
24
|
+
|
25
|
+
def excecutedPop
|
26
|
+
return nil unless @sh
|
27
|
+
@sh.pop()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class SimulateProcessFailure
|
33
|
+
def exitstatus
|
34
|
+
return "BW Rake Task Problem"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def rm_safe directory
|
39
|
+
# Before we delete the files, copy them to a place where we can verify their correctness
|
40
|
+
if File.exist? directory
|
41
|
+
FileUtils::cp_r directory, "data/output"
|
42
|
+
end
|
43
|
+
FileUtils::rm_rf directory
|
44
|
+
end
|
data/spec/bcp_spec.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
require "base"
|
2
|
+
require "bcp"
|
3
|
+
require "basetaskmocking"
|
4
|
+
|
5
|
+
describe BradyW::BCP do
|
6
|
+
before(:each) do
|
7
|
+
def @config.db_name
|
8
|
+
"regulardb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def @config.db_hostname
|
12
|
+
"myhostname"
|
13
|
+
end
|
14
|
+
|
15
|
+
def @config.db_general_authmode
|
16
|
+
:sqlauth
|
17
|
+
end
|
18
|
+
|
19
|
+
def @config.db_general_user
|
20
|
+
"theuser"
|
21
|
+
end
|
22
|
+
|
23
|
+
def @config.db_general_password
|
24
|
+
"thepassword"
|
25
|
+
end
|
26
|
+
|
27
|
+
def @config.project_prefix
|
28
|
+
"PRE"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
after(:each) do
|
33
|
+
# Remove our generated test data
|
34
|
+
FileUtils::rm_rf "data/output/bcp"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "Works OK with standard delimiters and SQL Auth" do
|
38
|
+
task = BradyW::BCP.new do |bcp|
|
39
|
+
bcp.files = FileList["data/bcp/01-firsttable.csv",
|
40
|
+
"data/bcp/02-nexttable.csv"]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Don't want to depend on specific registry setting
|
44
|
+
task.should_receive(:sql_tool).any_number_of_times.with("100").and_return("z:\\")
|
45
|
+
|
46
|
+
task.exectaskpublic
|
47
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"nexttable\" in 02-nexttable.csv -U theuser -P thepassword /Smyhostname -t \"|d3l1m1t3r|\" /c -m 1 -F 2"
|
48
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"firsttable\" in 01-firsttable.csv -U theuser -P thepassword /Smyhostname -t \"|d3l1m1t3r|\" /c -m 1 -F 2"
|
49
|
+
|
50
|
+
expected = IO.readlines("data/bcp/01-firsttable-expectedout.csv")
|
51
|
+
actual = IO.readlines("data/output/bcp/01-firsttable.csv")
|
52
|
+
|
53
|
+
actual.should == expected
|
54
|
+
|
55
|
+
expected = IO.readlines("data/bcp/02-nexttable-expectedout.csv")
|
56
|
+
actual = IO.readlines("data/output/bcp/02-nexttable.csv")
|
57
|
+
|
58
|
+
actual.should == expected
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
it "Works OK with custom delimiters, Custom Version, and Windows Auth" do
|
63
|
+
def @config.db_general_authmode
|
64
|
+
:winauth
|
65
|
+
end
|
66
|
+
|
67
|
+
task = BradyW::BCP.new do |bcp|
|
68
|
+
bcp.files = FileList["data/bcp/01-firsttable.csv",
|
69
|
+
"data/bcp/02-nexttable.csv"]
|
70
|
+
bcp.delimiter = "foobar"
|
71
|
+
bcp.version = "852"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Don't want to depend on specific registry setting
|
75
|
+
task.should_receive(:sql_tool).any_number_of_times.with("852").and_return("z:\\")
|
76
|
+
|
77
|
+
task.exectaskpublic
|
78
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"regulardb.dbo.nexttable\" in 02-nexttable.csv -T -S myhostname -t \"foobar\" /c -m 1 -F 2"
|
79
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"regulardb.dbo.firsttable\" in 01-firsttable.csv -T -S myhostname -t \"foobar\" /c -m 1 -F 2"
|
80
|
+
|
81
|
+
expected = IO.readlines("data/bcp/01-firsttable-expectedout2.csv")
|
82
|
+
actual = IO.readlines("data/output/bcp/01-firsttable.csv")
|
83
|
+
|
84
|
+
actual.should == expected
|
85
|
+
|
86
|
+
expected = IO.readlines("data/bcp/02-nexttable-expectedout2.csv")
|
87
|
+
actual = IO.readlines("data/output/bcp/02-nexttable.csv")
|
88
|
+
|
89
|
+
actual.should == expected
|
90
|
+
end
|
91
|
+
|
92
|
+
it "Handles delimiter interference Properly" do
|
93
|
+
def @config.db_general_authmode
|
94
|
+
:winauth
|
95
|
+
end
|
96
|
+
|
97
|
+
task = BradyW::BCP.new do |bcp|
|
98
|
+
bcp.files = FileList["data/bcp/delimInData.csv"]
|
99
|
+
end
|
100
|
+
|
101
|
+
lambda { task.exectaskpublic }.should raise_exception()
|
102
|
+
end
|
103
|
+
|
104
|
+
it "Handles failure gracefully" do
|
105
|
+
task = BradyW::BCP.new do |bcp|
|
106
|
+
bcp.files = FileList["data/bcp/01-firsttable.csv",
|
107
|
+
"data/bcp/02-nexttable.csv"]
|
108
|
+
end
|
109
|
+
|
110
|
+
# Don't want to depend on specific registry setting
|
111
|
+
task.should_receive(:sql_tool).any_number_of_times.with("100").and_return("z:\\")
|
112
|
+
|
113
|
+
task.stub!(:shell).and_yield(nil, SimulateProcessFailure.new)
|
114
|
+
|
115
|
+
lambda { task.exectaskpublic }.should raise_exception("Command failed with status (BW Rake Task Problem):")
|
116
|
+
|
117
|
+
# This means our temporary file was correctly cleaned up
|
118
|
+
File.exist?("#{ENV['tmp']}/bcp").should_not == true
|
119
|
+
# Our test code should have done this
|
120
|
+
File.exist?("data/output/bcp").should == true
|
121
|
+
end
|
122
|
+
|
123
|
+
it "Properly disables identity inserts when set" do
|
124
|
+
task = BradyW::BCP.new do |bcp|
|
125
|
+
bcp.identity_inserts = true
|
126
|
+
bcp.files = FileList["data/bcp/01-firsttable.csv",
|
127
|
+
"data/bcp/02-nexttable.csv"]
|
128
|
+
end
|
129
|
+
# Don't want to depend on specific registry setting
|
130
|
+
task.should_receive(:sql_tool).any_number_of_times.with("100").and_return("z:\\")
|
131
|
+
|
132
|
+
task.exectaskpublic
|
133
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"nexttable\" in 02-nexttable.csv -U theuser -P thepassword /Smyhostname -t \"|d3l1m1t3r|\" /c -E -m 1 -F 2"
|
134
|
+
task.excecutedPop.should == "\"z:\\bcp.exe\" \"firsttable\" in 01-firsttable.csv -U theuser -P thepassword /Smyhostname -t \"|d3l1m1t3r|\" /c -E -m 1 -F 2"
|
135
|
+
|
136
|
+
end
|
137
|
+
end
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require "base"
|
2
|
+
require "config"
|
3
|
+
|
4
|
+
describe "Configuration Works Properly" do
|
5
|
+
before(:all) do
|
6
|
+
$: << File.expand_path(File.dirname(__FILE__))+"/config_testdata"
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
File.delete "newuserfile.rb" if File.exist? "newuserfile.rb"
|
11
|
+
end
|
12
|
+
|
13
|
+
def fetchprops(defaultfile,userfile)
|
14
|
+
# get around the private method
|
15
|
+
BradyW::Config.send(:new,defaultfile,userfile).values
|
16
|
+
end
|
17
|
+
|
18
|
+
it "Should work fine with only default properties" do
|
19
|
+
props = fetchprops("onlydefault.rb",
|
20
|
+
"newuserfile.rb")
|
21
|
+
|
22
|
+
props.setting.should == "yep"
|
23
|
+
props.setting2.should == "nope"
|
24
|
+
props.setting3.should == "yep"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "Should work OK with default + partially filled out user properties" do
|
28
|
+
props = fetchprops("defaultpartialuser_default.rb",
|
29
|
+
"defaultpartialuser_user.rb")
|
30
|
+
|
31
|
+
props.setting.should == "overrodethis"
|
32
|
+
props.setting2.should == "nope"
|
33
|
+
props.setting3.should == "yep"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Should work OK with default + completely filled out user properties" do
|
37
|
+
props = BradyW::Config.send(:new).values
|
38
|
+
|
39
|
+
props.setting.should == "yep2"
|
40
|
+
props.setting2.should == "nope2"
|
41
|
+
props.setting3.should == "yep2"
|
42
|
+
end
|
43
|
+
end
|
data/spec/db_spec.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "base"
|
2
|
+
require "database"
|
3
|
+
|
4
|
+
describe BradyW::Database do
|
5
|
+
before(:each) do
|
6
|
+
@db = BradyW::Database.new
|
7
|
+
def @config.db_name
|
8
|
+
"regulardb"
|
9
|
+
end
|
10
|
+
def @config.project_prefix
|
11
|
+
"PRE"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "DB Name Plain" do
|
16
|
+
@db.name.should == "regulardb"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "DB Name with hostname/prefix" do
|
20
|
+
def @config.db_name
|
21
|
+
"@prefix@-@thismachinehostname@"
|
22
|
+
end
|
23
|
+
@db.name.should == "PRE-"+Socket.gethostname
|
24
|
+
end
|
25
|
+
|
26
|
+
it "User plain" do
|
27
|
+
def @config.db_general_user
|
28
|
+
"username2"
|
29
|
+
end
|
30
|
+
|
31
|
+
@db.user.should == "username2"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "Password" do
|
35
|
+
def @config.db_general_password
|
36
|
+
"thepassword"
|
37
|
+
end
|
38
|
+
|
39
|
+
@db.password.should == "thepassword"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "User hostname/prefix" do
|
43
|
+
def @config.db_general_user
|
44
|
+
"@prefix@-@thismachinehostname@"
|
45
|
+
end
|
46
|
+
@db.user.should == "PRE-"+Socket.gethostname
|
47
|
+
end
|
48
|
+
|
49
|
+
it "Connect String for .NET Code/SQL Auth" do
|
50
|
+
def @config.db_hostname
|
51
|
+
"myhostname"
|
52
|
+
end
|
53
|
+
|
54
|
+
def @config.db_general_authmode
|
55
|
+
:sqlauth
|
56
|
+
end
|
57
|
+
|
58
|
+
def @config.db_general_user
|
59
|
+
"theuser"
|
60
|
+
end
|
61
|
+
|
62
|
+
def @config.db_general_password
|
63
|
+
"thepassword"
|
64
|
+
end
|
65
|
+
|
66
|
+
def @config.db_connect_string_sqlauth
|
67
|
+
"user @user@ pass @password@ host @host@ db @initialcatalog@"
|
68
|
+
end
|
69
|
+
|
70
|
+
@db.connect_code.should == "user theuser pass thepassword host myhostname db regulardb"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "Connect String for .NET Code/Windows Auth" do
|
74
|
+
def @config.db_hostname
|
75
|
+
"myhostname"
|
76
|
+
end
|
77
|
+
|
78
|
+
def @config.db_general_authmode
|
79
|
+
:winauth
|
80
|
+
end
|
81
|
+
|
82
|
+
def @config.db_connect_string_winauth
|
83
|
+
"host @host@ db @initialcatalog@"
|
84
|
+
end
|
85
|
+
|
86
|
+
@db.connect_code.should == "host myhostname db regulardb"
|
87
|
+
end
|
88
|
+
end
|