diff --git a/cms/.coveragerc b/cms/.coveragerc new file mode 100644 index 0000000000..fe84c60bdc --- /dev/null +++ b/cms/.coveragerc @@ -0,0 +1,9 @@ +# .coveragerc for cms +[report] +ignore_errors = True + +[html] +directory = reports/cms/cover + +[xml] +output = reports/cms/coverage.xml diff --git a/cms/envs/test.py b/cms/envs/test.py index 08b25346be..d55c309827 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -14,6 +14,7 @@ from path import path # Nose Test Runner INSTALLED_APPS += ('django_nose',) +NOSE_ARGS = ['--with-xunit'] TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' TEST_ROOT = path('test_root') diff --git a/common/lib/capa/.coveragerc b/common/lib/capa/.coveragerc new file mode 100644 index 0000000000..726675d448 --- /dev/null +++ b/common/lib/capa/.coveragerc @@ -0,0 +1,9 @@ +# .coveragerc for common/lib/capa +[report] +ignore_errors = True + +[html] +directory = reports/common/lib/capa/cover + +[xml] +output = reports/common/lib/capa/coverage.xml diff --git a/common/lib/xmodule/.coveragerc b/common/lib/xmodule/.coveragerc new file mode 100644 index 0000000000..4d5a3c286d --- /dev/null +++ b/common/lib/xmodule/.coveragerc @@ -0,0 +1,9 @@ +# .coveragerc for common/lib/xmodule +[report] +ignore_errors = True + +[html] +directory = reports/common/xmodule/capa/cover + +[xml] +output = reports/common/lib/xmodule/coverage.xml diff --git a/lms/.coveragerc b/lms/.coveragerc new file mode 100644 index 0000000000..84d6e74e4c --- /dev/null +++ b/lms/.coveragerc @@ -0,0 +1,9 @@ +# .coveragerc for cms +[report] +ignore_errors = True + +[html] +directory = reports/lms/cover + +[xml] +output = reports/lms/coverage.xml diff --git a/lms/envs/test.py b/lms/envs/test.py index 01abce9f5a..e11946a47a 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -27,7 +27,6 @@ SOUTH_TESTS_MIGRATE = False # To disable migrations and use syncdb instead # Nose Test Runner INSTALLED_APPS += ('django_nose',) -NOSE_ARGS = [] NOSE_ARGS = [ '--with-xunit', diff --git a/rakefile b/rakefile index 8ada145b18..97ed5435bd 100644 --- a/rakefile +++ b/rakefile @@ -84,26 +84,33 @@ end $failed_tests = 0 -def run_under_coverage(cmd) +def run_under_coverage(cmd, root) cmd0, cmd_rest = cmd.split(" ", 2) - cmd = "coverage run `which #{cmd0}` #{cmd_rest}" + # We use "python -m coverage" so that the proper python will run the importable coverage + # rather than the coverage that OS path finds. + cmd = "python -m coverage run --rcfile=#{root}/.coveragerc `which #{cmd0}` #{cmd_rest}" return cmd end +def coverage_reports(root) + sh("coverage xml --rcfile=#{root}/.coveragerc") + sh("coverage html --rcfile=#{root}/.coveragerc") +end + def run_tests(system, report_dir, stop_on_failure=true) ENV['NOSE_XUNIT_FILE'] = File.join(report_dir, "nosetests.xml") - ENV['NOSE_COVER_HTML_DIR'] = File.join(report_dir, "cover") dirs = Dir["common/djangoapps/*"] + Dir["#{system}/djangoapps/*"] cmd = django_admin(system, :test, 'test', '--logging-clear-handlers', *dirs.each) - sh(run_under_coverage(cmd)) do |ok, res| + sh(run_under_coverage(cmd, system)) do |ok, res| if !ok and stop_on_failure abort "Test failed!" end $failed_tests += 1 unless ok end + coverage_reports(system) end -TEST_TASKS = [] +TEST_TASK_SYMBOLS = [] [:lms, :cms].each do |system| report_dir = File.join(REPORT_DIR, system.to_s) @@ -120,7 +127,7 @@ TEST_TASKS = [] run_tests(system, report_dir, args.stop_on_failure) end - TEST_TASKS << "test_#{system}" + TEST_TASK_SYMBOLS << system desc <<-desc Start the #{system} locally with the specified environment (defaults to dev). @@ -150,7 +157,7 @@ TEST_TASKS = [] end end -Dir["common/lib/*"].each do |lib| +Dir["common/lib/*"].select{|lib| File.directory?(lib)}.each do |lib| task_name = "test_#{lib}" report_dir = File.join(REPORT_DIR, task_name.gsub('/', '_')) @@ -160,21 +167,23 @@ Dir["common/lib/*"].each do |lib| task task_name => report_dir do ENV['NOSE_XUNIT_FILE'] = File.join(report_dir, "nosetests.xml") cmd = "nosetests #{lib} --logging-clear-handlers --with-xunit" - sh(run_under_coverage(cmd)) + sh(run_under_coverage(cmd, lib)) do |ok, res| + $failed_tests += 1 unless ok + end + coverage_reports(lib) end - TEST_TASKS << task_name + TEST_TASK_SYMBOLS << lib desc "Run tests for common lib #{lib} (without coverage)" task "fasttest_#{lib}" do sh("nosetests #{lib}") end - end task :test do - TEST_TASKS.each do |task| - Rake::Task[task].invoke(false) + TEST_TASK_SYMBOLS.each do |sym| + Rake::Task["test_#{sym}"].invoke(false) end if $failed_tests > 0