File: ReferenceGenerator.rb

package info (click to toggle)
tj3 3.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,048 kB
  • sloc: ruby: 36,481; javascript: 1,113; sh: 19; makefile: 17
file content (91 lines) | stat: -rw-r--r-- 2,589 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env ruby -w
# encoding: UTF-8
#
# = ReferenceGenerator.rb -- The TaskJuggler III Project Management Software
#
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
#               by Chris Schlaeger <cs@taskjuggler.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#

# This script can be used to (re-)generate all reference reports in the
# TaskJuggler test suite. These reports will be put in the /refs directories
# in the TestSuite sub-directories. Usually, reference reports are generated
# by hand and then manually checked for correctness before they are added to
# the test suite. But sometimes changes in the syntax will require all
# reference files to be regenerated.
# Reference reports must use the following naming scheme:
# <test case name>-[0-9]+.(csv|html)

$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if __FILE__ == $0
$:.unshift File.dirname(__FILE__)

require 'fileutils'

require 'taskjuggler/Tj3Config'
require 'taskjuggler/TaskJuggler'

class TaskJuggler

  class ReferenceGenerator

    def initialize
      AppConfig.appName = 'taskjuggler3'
      ENV['TASKJUGGLER_DATA_PATH'] = './:../'
      ENV['TZ'] = 'Europe/Berlin'
    end

    def generate
      processDirectory('ReportGenerator/Correct')
    end

    private

    def processProject(tjpFile, outputDir)
      deleteOldReports(tjpFile[0..-5])

      puts "Generating references for #{tjpFile}"
      tj = TaskJuggler.new
      tj.parse([ tjpFile ]) || error("Parser failed for ${tjpFile}")
      tj.schedule || error("Scheduler failed for #{tjpFile}")
      tj.generateReports(outputDir) ||
        error("Report generator failed for #{tjpFile}")
      unless tj.messageHandler.messages.empty?
        error("Unexpected error in #{tjpFile}")
      end
    end

    def processDirectory(dir)
      puts "Generating references in #{dir}"
      path = File.dirname(__FILE__) + '/'
      projectDir = path + "TestSuite/#{dir}/"
      outputDir = path + "TestSuite/#{dir}/refs/"

      Dir.glob(projectDir + '*.tjp').each do |f|
        processProject(f, outputDir)
      end
    end

    def deleteOldReports(basename)
      %w( .csv .html ).each do |ext|
        Dir.glob(basename + "-[0-9]*" + ext).each do |f|
          puts "Removing old report #{f}"
          File.delete(f)
        end
      end
    end

    def error(text)
      $stderr.puts text
      exit 1
    end

  end

  ReferenceGenerator.new.generate

end