⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 failsgenerator.groovy

📁 大名鼎鼎的java动态脚本语言。已经通过了sun的认证
💻 GROOVY
字号:
package org.codehaus.groovy.tools;import java.io.*;import groovy.util.XmlSlurper;import groovy.xml.StreamingMarkupBuilder;class FailsGenerator {    def public conf;    def public map = new HashMap();    def public save=false    public boolean hasChanged=false    public int nr=0;    public boolean skipIgnores=true        public FailsGenerator(){}        static void main(args) {        if (args.length<2) {            println "usage: FailsGenerator [--save] [--skip-ignores] <conf-file> <reports-dir>"            println "         save           is optional argument and let the script store the results"            println "                        found in the xml files in the conf file"            println "         skip-ignores   don't print information about ignored files "            println "         conf-file      is the configuration file"            println "         reports-dir    is the directory containing the xml reports from JUnit"            System.exit(1)        }        def gen = new FailsGenerator();        int argIndex=0        while (args[argIndex].startsWith("--")) {          switch (args[argIndex]) {            case "--save":              gen.save=true              break;            case "--skip-ignores":              gen.skipIgnores=true              break;            default:              println "unknown option "+ args[argIndex]              System.exit(1);          }          argIndex++;        }        gen.conf = new File(args[argIndex])        gen.readConf()        gen.compareFiles(args[argIndex+1])        gen.saveConf()        println "DONE"    }            void compareFiles(dir) {            def attReader = { name, attName, oldVal, newVal ->            if (attName!=null) oldVal=Integer.parseInt(oldVal)            boolean success = (oldVal!=0 && newVal==0)            if (success) {                println("${name}: well done, no more ${attName}");            } else if (oldVal==-1) {                // do nothing            } else if (newVal<oldVal) {                println("${name}: improved ${attName} from ${oldVal} to ${newVal}");            } else if (newVal>oldVal) {                println("${name}: more ${attName} (from ${oldVal} to ${newVal})");            }            hasChanged = hasChanged || newVal!=oldVal            return success        }        dir = new File(dir)        if (!dir.isDirectory()) throw new RuntimeException("${dir} has to be a directory containg the xml tests reports")        dir.eachFileRecurse {            file ->            if (!file.getName().endsWith(".xml")) return            if (file.getName().indexOf("\$")>-1) {              if (!skipIgnores) println("${file.name} is ignored because it's output for a subclass")              return            }            def node = new XmlSlurper().parse(file);            def name = node['@name']            def errorVal = Integer.parseInt(node['@errors'])            def failureVal = Integer.parseInt(node['@failures'])            def el = map.get(name)            if (el==null && !save) throw new RuntimeException("unknown test ${name}, please add it to conf file ${conf.name}")            if (el==null && save) {                el = new HashMap()                el.put("errors","-1");                el.put("failures","-1");                println "added configuration for test ${name}"                addToMap(name,el)                hasChanged=true            }            def err  = attReader(name,"errors",el.errors,errorVal)            def fail = attReader(name,"failures",el.failures,failureVal)            if (err && fail) {                println(">>> Congratulations ${name} has passed the test <<<");            }            el.errors = errorVal            el.failures = failureVal        }    }                void saveConf() {        if (!save) return        if (!hasChanged) {            println "no changes to configuration"            return        }        println "saving conf in ${conf}, old configuration is saved in ${conf}.old"        println "WARNING: comments are not in the new file"        def oldConf = new File(conf.absolutePath+".old")        def bytes = conf.readBytes()        def out = oldConf.newOutputStream()        out << bytes        out.close()        out = conf.newWriter()        try {            map.each {                 out.writeLine("[${it.key}]")                 it.value.each {                     out.writeLine("${it.key}=${it.value}")                 }            }        } finally {            out.close();        }    }    void readConf() {        def reader = new LineNumberReader(new FileReader(conf));        def line = null;        def readLine = {l ->            if (l!=null) return l            while (true) {                l = reader.readLine()                if (l==null) return null                if (""==l) continue                l=l.trim()                if (l[0] == "#") continue                return l            }        }        def lineloop = {l,lbreak,func ->            while(true) {                if (l!=null && lbreak) return l                if (l==null) l = readLine(l)                if (l==null) return                nr= reader.lineNumber;                l = func(l)            }            return l        }        def attRead = {el,l->            l = lineloop(l,true) {ll ->                if (ll[0]=="[" || ll[-1]=="]") return ll                int index = ll.indexOf('=');                if (index==-1) throw new RuntimeException(" ${conf.name}:${nr} = expected somewhere, but got ${ll}");                String name = ll.substring(0,index).trim();                String value = "";                if (ll.length()>=index) value = ll.substring(index+1).trim();                el.put(name,value);                return null            }            return l        }        def fileStart = {->            lineloop(null,false) {l ->                if (l[0]!="[" || l[-1]!="]") {                    throw new RuntimeException("${conf.name}:${nr} filename inside of [] expected, but got ${line}")                }                def el = new HashMap()                def file = line.substring(1,l.length()-1)                addToMap(file,el);                l = attRead(el,null)                return l            }        }                try {            fileStart()        } finally {            reader.close();        }        if (map.size==0) throw new RuntimeException("${conf.name} was empty");    }        def addToMap(name, el) {        map.put(name,el)    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -