• Intro Headers Instructions Macros Commands
Fork me on GitHub
    • Introduction
    • How to install bnd
    • Guided Tour
    • Guided Tour Workspace & Projects
    • Concepts
    • Best practices
    • Build
    • Project Setup
    • Generating JARs
    • Versioning
    • Baselining
    • Service Components
    • Metatype
    • Contracts
    • Bundle Annotations
    • Accessor Properties
    • SPI Annotations
    • Resolving Dependencies
    • Launching
    • Startlevels
    • Testing
    • Testing with Launchpad
    • Packaging Applications
    • JPMS Libraries
    • Wrapping Libraries to OSGi Bundles
    • Generating Documentation
    • Commands
    • For Developers
    • Tips for Windows users
    • Tools bound to bnd
    • Reference
    • Headers
    • Instruction Reference
    • Instruction Index
    • Macro Reference
    • Macro Index
    • Plugins
    • External Plugins
    • Settings
    • Errors
    • Warnings
    • Frequently Asked Questions
  • Test-Cases CLASS ( ',' CLASS ) *
    Header

    private void checkForTesting(Project project, Properties properties) throws Exception {
    
    	//
    	// Only run junit when we have a test src directory
    	//
    
    	boolean junit = project.getTestSrc().isDirectory() && !Processor.isTrue(project.getProperty(Constants.NOJUNIT));
    	boolean junitOsgi = project.getProperties().getProperty(Constants.TESTCASES) != null
    			&& !Processor.isTrue(project.getProperty(Constants.NOJUNITOSGI));
    
    	if (junit)
    		properties.setProperty("project.junit", "true");
    	if (junitOsgi)
    		properties.setProperty("project.osgi.junit", "true");
    }
    
    public void test(List<String> tests) throws Exception {
    
    	String testcases = getProperties().getProperty(Constants.TESTCASES);
    	if (testcases == null) {
    		warning("No %s set", Constants.TESTCASES);
    		return;
    	}
    	clear();
    
    	ProjectTester tester = getProjectTester();
    	if ( tests != null) {
    		trace("Adding tests %s", tests);
    		for ( String test : tests) {
    			tester.addTest(test);
    		}
    	}
    	tester.setContinuous(isTrue(getProperty(Constants.TESTCONTINUOUS)));
    	tester.prepare();
    
    	if (!isOk()) {
    		return;
    	}
    	int errors = tester.test();
    	if (errors == 0) {
    		System.err.println("No Errors");
    	} else {
    		if (errors > 0) {
    			System.err.println(errors + " Error(s)");
    
    		} else
    			System.err.println("Error " + errors);
    	}
    }
    
    	void automatic() throws IOException {
    	String testerDir = context.getProperty(TESTER_DIR);
    	if (testerDir == null)
    		testerDir = "testdir";
    
    	final File reportDir = new File(testerDir);
    	final List<Bundle> queue = new Vector<Bundle>();
    	if (!reportDir.exists() && !reportDir.mkdirs()) {
    		throw new IOException("Could not create directory " + reportDir);
    	}
    	trace("using %s, needed creation %s", reportDir, reportDir.mkdirs());
    
    	trace("adding Bundle Listener for getting test bundle events");
    	context.addBundleListener(new SynchronousBundleListener() {
    		public void bundleChanged(BundleEvent event) {
    			if (event.getType() == BundleEvent.STARTED) {
    				checkBundle(queue, event.getBundle());
    			}
    
    		}
    	});
    
    	for (Bundle b : context.getBundles()) {
    		checkBundle(queue, b);
    	}
    
    	trace("starting queue");
    	int result = 0;
    	outer: while (active) {
    		Bundle bundle;
    		synchronized (queue) {
    			while (queue.isEmpty() && active) {
    				try {
    					queue.wait();
    				}
    				catch (InterruptedException e) {
    					trace("tests bundle queue interrupted");
    					thread.interrupt();
    					break outer;
    				}
    			}
    		}
    		try {
    			bundle = queue.remove(0);
    			trace("received bundle to test: %s", bundle.getLocation());
    			Writer report = getReportWriter(reportDir, bundle);
    			try {
    				trace("test will run");
    				result += test(bundle, (String) bundle.getHeaders().get(aQute.bnd.osgi.Constants.TESTCASES), report);
    				trace("test ran");
    				if (queue.isEmpty() && !continuous) {
    					trace("queue " + queue);
    					System.exit(result);
    				}
    			}
    			finally {
    				if (report != null)
    					report.close();
    			}
    		}
    		catch (Exception e) {
    			error("Not sure what happened anymore %s", e);
    			System.exit(254);
    		}
    	}
    }
    
    
    	void checkBundle(List<Bundle> queue, Bundle bundle) {
    	if (bundle.getState() == Bundle.ACTIVE) {
    		String testcases = (String) bundle.getHeaders().get(aQute.bnd.osgi.Constants.TESTCASES);
    		if (testcases != null) {
    			trace("found active bundle with test cases %s : %s", bundle, testcases);
    			synchronized (queue) {
    				queue.add(bundle);
    				queue.notifyAll();
    			}
    		}
    	}
    }
    
    
    
    
    	if (testcases == null) { //			if ( !continuous) { //				System.err.println("\nThe -testcontinuous property must be set if invoked without arguments\n"); //				System.exit(255); //			}
    			
    		trace("automatic testing of all bundles with " + aQute.bnd.osgi.Constants.TESTCASES + " header");
    		try {
    			automatic();
    		}
    		catch (IOException e) {
    			// ignore
    		}
    
    • GitHub