# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # import unittest import os.path from org.apache.rat.eye import engine from zipfile import ZipFile class AReviewer(): def __init__(self): self.jars = [] self.dirs = [] self.artifacts = [] def reviewJar(self, jar): self.jars.append(jar) def reviewDirectory(self, dir): self.dirs.append(dir) def reviewArtifact(self, artifact): self.artifacts.append(artifact) class AStyle(): def __init__(self): self.resources = [] def present(self, resource): self.resources.append(resource) class TestEngine(unittest.TestCase): def testSmoke(self): """ Smoke or choke? """ engine.Scanner().scan() def testRoot(self): """ Extract roots from file names. """ self.assertEqual(engine.root("whatever.jar"), "whatever") self.assertEqual(engine.root("bing.html"), "bing") self.assertEqual(engine.root("ping.md5"), "ping") self.assertEqual(engine.root("toast.tar.gz"), "toast") self.assertEqual(engine.root("sing.zip"), "sing") def testExtension(self): """ Extract extension from file names. """ self.assertEqual(engine.extension("whatever"), "") self.assertEqual(engine.extension("whatever.jar"), "jar") self.assertEqual(engine.extension("bing.html"), "html") self.assertEqual(engine.extension("ping.md5"), "md5") self.assertEqual(engine.extension("toast.tar.gz"), "tar.gz") self.assertEqual(engine.extension("sing.zip"), "zip") def testBuildJar(self): """ Jar building tests. """ self.assertIsInstance(engine.buildJar("whatever.jar"), engine.Jar) self.assertIsNone(engine.buildJar("whatever")) self.assertIsNone(engine.buildJar("bing.html")) self.assertIsNone(engine.buildJar("ping.md5")) self.assertIsNone(engine.buildJar("toast.tar.gz")) self.assertIsNone(engine.buildJar("sing.zip")) def testBuildArtifact(self): """ Archive building tests. """ self.assertIsInstance(engine.buildArtifact("whatever.jar"), engine.Jar) self.assertIsInstance(engine.buildArtifact("bogo-justajar-0.1.jar"), engine.Jar) self.assertIsNone(engine.buildArtifact("whatever")) self.assertIsNone(engine.buildArtifact("bing.html")) self.assertIsNone(engine.buildArtifact("ping.md5")) self.assertIsNone(engine.buildArtifact("toast.tar.gz")) self.assertIsNone(engine.buildArtifact("sing.zip")) def testListArtifactsWhenOneJarPresent(self): aDirectoryPath = "." aJarName = "something.jar" jarArchiveWithPathAndName = engine.Jar(aDirectoryPath, aJarName) # Chaff aNameWithoutPrefix = "whatever" notAJarName = "somethingelse.html" # Combined names = [aNameWithoutPrefix, aJarName , notAJarName] self.assertEqual(engine.listArtifacts(aDirectoryPath, names), [jarArchiveWithPathAndName]) self.assertEqual(engine.Directory(aDirectoryPath, names).artifacts, [jarArchiveWithPathAndName]) def testConstructArtifact(self): """ Smoke test for Artifact construction. """ a = engine.Artifact("direct", "something.jar") self.assertEqual(a.name, "something.jar") self.assertEqual(a.root, "something") self.assertEqual(a.path, "direct") a = engine.Artifact("another", "whatever.tar.gz") self.assertEqual(a.name, "whatever.tar.gz") self.assertEqual(a.root, "whatever") self.assertEqual(a.path, "another") def sampleJar(self): sampleJarName = "test/bogo-justajar-0.1.jar" if not (os.path.exists(sampleJarName)): self.fail("Cannot find required resource: " + sampleJarName) try: return ZipFile(sampleJarName, "r") except IOError: self.fail("Test requires sample jar " + sampleJarName) def testSampleJarIsReadable(self): self.sampleJar().testzip() def sampleManifest(self): return ['Manifest-Version: 1.0\r\n', 'Archiver-Version: Plexus Archiver\r\n', 'Created-By: Apache Maven\r\n', 'Built-By: rob\r\n', 'Build-Jdk: 1.6.0_22\r\n', 'Specification-Title: bogo-justajar\r\n', 'Specification-Version: 0.1\r\n', 'Specification-Vendor: The Apache Software Foundation\r\n', 'Implementation-Title: bogo-justajar\r\n', 'Implementation-Version: 0.1\r\n', 'Implementation-Vendor-Id: org.apache.rat.eye.test\r\n', 'Implementation-Vendor: The Apache Software Foundation\r\n', '\r\n'] def testReadContentFromJar(self): manifestName = "META-INF/MANIFEST.MF" self.assertEquals(engine.contentFromZip(self.sampleJar(), [manifestName]), {manifestName: self.sampleManifest()}) def testfilterContentFromZip(self): manifestName = "META-INF/MANIFEST.MF" self.assertEquals(engine.filterContentFromZip(self.sampleJar(), lambda name: (name == manifestName)), {manifestName: self.sampleManifest()}) def testReadContentsFromDirectoryInZip(self): contents = engine.readContentsFromDirectoryInZip(self.sampleJar(), "META-INF") self.assertEquals(sorted(contents.keys()), sorted(["META-INF/MANIFEST.MF", "META-INF/LICENSE", "META-INF/NOTICE", "META-INF/DEPENDENCIES"])) self.assertEquals(contents["META-INF/MANIFEST.MF"], self.sampleManifest()) def testJarMetainf(self): contents = engine.Jar("test", "bogo-justajar-0.1.jar").metainf() self.assertEquals(sorted(contents.keys()), sorted(["META-INF/MANIFEST.MF", "META-INF/LICENSE", "META-INF/NOTICE", "META-INF/DEPENDENCIES"])) self.assertEquals(contents["META-INF/MANIFEST.MF"], self.sampleManifest()) def testIsHidden(self): self.assertTrue(engine.isHidden("./.svn")) self.assertFalse(engine.isHidden("./svn")) self.assertTrue(engine.isHidden("./.svn/tmp/")) self.assertTrue(engine.isHidden("./.svn/tmp/whatever")) self.assertFalse(engine.isHidden("./svn/tmp/whatever")) def testDirectoryIsHidden(self): self.assertTrue(engine.Directory("./.svn").isHidden()) self.assertFalse(engine.Directory("./svn").isHidden()) self.assertTrue(engine.Directory("./.svn/tmp/").isHidden()) self.assertTrue(engine.Directory("./.svn/tmp/whatever").isHidden()) self.assertFalse(engine.Directory("./svn/tmp/whatever").isHidden()) def testJarReport(self): aReviewer = AReviewer() subject = engine.Jar(".", "foo.jar") subject.reportTo(aReviewer) self.assertEquals(aReviewer.jars, [subject]) self.assertEquals(aReviewer.dirs, []) self.assertEquals(aReviewer.artifacts, [subject]) def testArtifactReport(self): aReviewer = AReviewer() subject = engine.Artifact(".", "foo.jar") subject.reportTo(aReviewer) self.assertEquals(aReviewer.jars, []) self.assertEquals(aReviewer.dirs, []) self.assertEquals(aReviewer.artifacts, [subject]) def testDirReport(self): aReviewer = AReviewer() subject = engine.Directory(".", []) subject.reportTo(aReviewer) self.assertEquals(aReviewer.jars, []) self.assertEquals(aReviewer.dirs, [subject]) self.assertEquals(aReviewer.artifacts, []) def testAcculativeScannerSmokeOrChoke(self): engine.AccumulativeScanner() def testAppendFirstReport(self): reports = ["whatever"] self.assertEquals(engine.Reports("hill").addReports(reports).reports, reports) def testAppendReportNone(self): self.assertEquals(engine.Reports("hill").addReports(None).reports, []) def testAppendAnotherReport(self): reports = ["tom"] extra_reports = ["one"] self.assertEquals(engine.Reports("hill").addReports(reports) .addReports(extra_reports).reports, reports + extra_reports) def testReviewerSmokeOrChoke(self): engine.Reviewer([]).review([]) def testReporterSmokeOrChoke(self): engine.Reporter([]).report([]) def testReviewerReview(self): aJar = engine.Jar(".", "whatever.jar") subject = engine.Reviewer([AReviewer()]) subject.review([aJar]) self.assertEquals(subject.reviews[0].jars, [aJar]) self.assertEquals(subject.reviews[0].dirs, []) self.assertEquals(subject.reviews[0].artifacts, [aJar]) def testReporterReport(self): aJar = engine.Jar(".", "whatever.jar") anotherJar = engine.Jar(".", "biff.jar") styles = [AStyle(), AStyle()] engine.Reporter(styles).report if __name__ == '__main__': unittest.main()