Test-Cases CLASS ( ‘,’ CLASS ) * | bnd
Description: private void checkForTesting(Project project, Properties properties) throws Exception {

- # 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
      		}