mirror of https://github.com/AMT-Cheif/Stylet.git
174 lines
5.3 KiB
Ruby
174 lines
5.3 KiB
Ruby
CONFIG = ENV['CONFIG'] || 'Debug'
|
|
|
|
COVERAGE_DIR = 'Coverage'
|
|
COVERAGE_FILE = File.join(COVERAGE_DIR, 'coverage.xml')
|
|
|
|
GITLINK_REMOTE = 'https://github.com/canton7/stylet'
|
|
NUSPEC = 'NuGet/Stylet.nuspec'
|
|
NUSPEC_START = 'NuGet/Stylet.start.nuspec'
|
|
|
|
ASSEMBLY_INFO = 'Stylet/Properties/AssemblyInfo.cs'
|
|
|
|
CSPROJ = 'Stylet/Stylet.csproj'
|
|
MSBUILD = %q{C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe}
|
|
|
|
directory COVERAGE_DIR
|
|
|
|
desc "Build the project for release"
|
|
task :build do
|
|
sh MSBUILD, CSPROJ, "/t:Clean;Rebuild", "/p:Configuration=Release", "/verbosity:normal"
|
|
end
|
|
|
|
task :test_environment => [:build] do
|
|
NUNIT_TOOLS = 'packages/NUnit.Runners.*/tools'
|
|
NUNIT_CONSOLE = Dir[File.join(NUNIT_TOOLS, 'nunit-console.exe')].first
|
|
NUNIT_EXE = Dir[File.join(NUNIT_TOOLS, 'nunit.exe')].first
|
|
|
|
OPENCOVER_CONSOLE = Dir['packages/OpenCover.*/tools/OpenCover.Console.exe'].first
|
|
REPORT_GENERATOR = Dir['packages/ReportGenerator.*/tools/ReportGenerator.exe'].first
|
|
|
|
UNIT_TESTS_DLL = "StyletUnitTests/bin/#{CONFIG}/StyletUnitTests.dll"
|
|
INTEGRATION_TESTS_EXE = "StyletIntegrationTests/bin/#{CONFIG}/StyletIntegrationTests.exe"
|
|
|
|
raise "NUnit.Runners not found. Restore NuGet packages" unless NUNIT_CONSOLE && NUNIT_EXE
|
|
raise "OpenCover not found. Restore NuGet packages" unless OPENCOVER_CONSOLE
|
|
raise "ReportGenerator not found. Restore NuGet packages" unless REPORT_GENERATOR
|
|
end
|
|
|
|
task :nunit_test_runner => [:test_environment] do
|
|
sh NUNIT_CONSOLE, UNIT_TESTS_DLL
|
|
end
|
|
|
|
desc "Run unit tests using the current CONFIG (or Debug)"
|
|
task :test => [:nunit_test_runner] do |t|
|
|
rm 'TestResult.xml', :force => true
|
|
end
|
|
|
|
desc "Launch the NUnit gui pointing at the correct DLL for CONFIG (or Debug)"
|
|
task :nunit => [:test_environment] do |t|
|
|
sh NUNIT_EXE, UNIT_TESTS_DLL
|
|
end
|
|
|
|
|
|
namespace :cover do
|
|
|
|
desc "Generate unit test code coverage reports for CONFIG (or Debug)"
|
|
task :unit => [:test_environment, COVERAGE_DIR] do |t|
|
|
coverage(instrument(:nunit, UNIT_TESTS_DLL))
|
|
end
|
|
|
|
desc "Create integration test code coverage reports for CONFIG (or Debug)"
|
|
task :integration => [:test_environment, COVERAGE_DIR] do |t|
|
|
coverage(instrument(:exe, INTEGRATION_TESTS_EXE))
|
|
end
|
|
|
|
desc "Create test code coverage for everything for CONFIG (or Debug)"
|
|
task :all => [:test_environment, COVERAGE_DIR] do |t|
|
|
coverage([instrument(:nunit, UNIT_TESTS_DLL), instrument(:exe, INTEGRATION_TESTS_EXE)])
|
|
end
|
|
|
|
end
|
|
|
|
def instrument(runner, target)
|
|
case runner
|
|
when :nunit
|
|
opttarget = NUNIT_CONSOLE
|
|
opttargetargs = target
|
|
when :exe
|
|
opttarget = target
|
|
opttargetargs = ''
|
|
else
|
|
raise "Unknown runner #{runner}"
|
|
end
|
|
|
|
coverage_file = File.join(COVERAGE_DIR, File.basename(target).ext('xml'))
|
|
sh OPENCOVER_CONSOLE, '-register:user', "-target:#{opttarget}", "-filter:+[Stylet]* -[Stylet]XamlGeneratedNamespace.*", "-targetargs:#{opttargetargs} /noshadow", "-output:#{coverage_file}"
|
|
|
|
rm('TestResult.xml', :force => true) if runner == :nunit
|
|
|
|
coverage_file
|
|
end
|
|
|
|
def coverage(coverage_files)
|
|
coverage_files = [*coverage_files]
|
|
sh REPORT_GENERATOR, "-reports:#{coverage_files.join(';')}", "-targetdir:#{COVERAGE_DIR}"
|
|
end
|
|
|
|
desc "Create NuGet package"
|
|
task :package do
|
|
local_hash = `git rev-parse HEAD`.chomp
|
|
sh "NuGet/GitLink.exe . -s #{local_hash} -u #{GITLINK_REMOTE} -f Stylet.sln -ignore StyletUnitTests,StyletIntegrationTests"
|
|
Dir.chdir(File.dirname(NUSPEC)) do
|
|
sh "nuget.exe pack #{File.basename(NUSPEC)}"
|
|
end
|
|
Dir.chdir(File.dirname(NUSPEC_START)) do
|
|
sh "nuget.exe pack #{File.basename(NUSPEC_START)}"
|
|
end
|
|
end
|
|
|
|
desc "Bump version number"
|
|
task :version, [:version] do |t, args|
|
|
parts = args[:version].split('.')
|
|
parts << '0' if parts.length == 3
|
|
version = parts.join('.')
|
|
|
|
content = IO.read(ASSEMBLY_INFO)
|
|
content[/^\[assembly: AssemblyVersion\(\"(.+?)\"\)\]/, 1] = version
|
|
content[/^\[assembly: AssemblyFileVersion\(\"(.+?)\"\)\]/, 1] = version
|
|
File.open(ASSEMBLY_INFO, 'w'){ |f| f.write(content) }
|
|
|
|
content = IO.read(NUSPEC)
|
|
content[/<version>(.+?)<\/version>/, 1] = args[:version]
|
|
File.open(NUSPEC, 'w'){ |f| f.write(content) }
|
|
|
|
content = IO.read(NUSPEC_START)
|
|
content[/<version>(.+?)<\/version>/, 1] = args[:version]
|
|
content[%r{<dependency id="Stylet" version="\[(.+?)\]"/>}, 1] = args[:version]
|
|
File.open(NUSPEC_START, 'w'){ |f| f.write(content) }
|
|
end
|
|
|
|
desc "Extract StyletIoC as a standalone file"
|
|
task :"extract-stylet-ioc" do
|
|
filenames = Dir['Stylet/StyletIoC/**/*.cs']
|
|
usings = Set.new
|
|
files = []
|
|
|
|
filenames.each do |file|
|
|
contents = File.read(file)
|
|
file_usings = contents.scan(/using .*?;$/)
|
|
usings.merge(file_usings)
|
|
|
|
matches = contents.match(/namespace (.+?)\n{\n(.+)}.*/m)
|
|
namespace, file_contents = matches.captures
|
|
|
|
files << {
|
|
:from => file,
|
|
:contents => file_contents,
|
|
:namespace => namespace
|
|
}
|
|
# merged_contents << " // Originally from #{file}\n\n" << file_contents << "\n"
|
|
end
|
|
|
|
File.open('StyletIoC.cs', 'w') do |outf|
|
|
outf.write(usings.to_a.join("\n"))
|
|
|
|
outf.puts
|
|
|
|
files.group_by{ |x| x[:namespace ] }.each do |namespace, ns_files|
|
|
outf.puts("\nnamespace #{namespace}")
|
|
outf.puts("{")
|
|
|
|
ns_files.each do |file|
|
|
outf.puts("\n // Originally from #{file[:from]}\n\n")
|
|
outf.puts(file[:contents])
|
|
end
|
|
|
|
outf.puts("}\n")
|
|
end
|
|
end
|
|
|
|
# puts merged_contents
|
|
|
|
end
|
|
|