Commit 334cc8af authored by Martti Käärik's avatar Martti Käärik
Browse files

Rendering of the test class that uses ComponentExecutor.

parent eed73d6f
Loading
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
@@ -384,10 +384,12 @@ public class JUnitTestGenerator extends Renderer {
		final List<IOException> ex = new ArrayList<IOException>();
		List<ComponentInstance> testers = td.getTestConfiguration().getComponentInstance().stream()
				.filter(c -> c.getRole() == ComponentInstanceRole.TESTER).collect(Collectors.toList());
		Set<String> testerClasses = new HashSet<String>();
		testers.forEach(tester -> {
			String className = getElementName(td);
			if (testers.size() > 1)
				className += "_" + getElementName(tester);
			testerClasses.add(className);
			try {
				this.currentTester = tester;
				String fClassName = className;
@@ -398,11 +400,58 @@ public class JUnitTestGenerator extends Renderer {
				return;
			}
		});
		if (testerClasses.size() > 1) {
			String className = getElementName(td);
			try {
				writeClassFile(packageName, className,
						() -> renderTestExecutionClass(fPackageName, className, td, testerClasses));
			} catch (IOException e) {
				ex.add(e);
				return;
			}
		}
		if (!ex.isEmpty())
			throw ex.get(0);

	}

	private void renderTestExecutionClass(String packageName, String className, TestDescription td,
			Set<String> testerClasses) {
		
		String tdName = getElementName(td);

		line("package " + packageName + ";");
		newLine();

		Set<String> imports = new HashSet<String>();
		gatherImports(imports);
		writeImports(imports);

		append("public class " + className);
		blockOpen();
		newLine();

		line("@Test");
		append("public void test_" + tdName + "()");
		blockOpen();
		
		for (String tClass : testerClasses)
			line(tClass + " a" + tClass + " = new " + tClass + "();");
		newLine();
		for (String tClass : testerClasses)
			line("a" + tClass + ".configure_" + tdName + "();");

		newLine();
		line("ComponentExecutor executor = new ComponentExecutor();");
		for (String tClass : testerClasses)
			line("executor.addTest(a" + tClass + ".getTestControl(), () -> a" + tClass + ".test_" + tdName + "());");

		blockClose();
		newLine();

		blockClose();
	}

	private void renderTestDescriptionClass(String packageName, String className, TestDescription td,
			ComponentInstance tester) {

@@ -423,6 +472,13 @@ public class JUnitTestGenerator extends Renderer {
		// Component instance
		String componentClassName = classNames.get(tester.getType());
		line("private " + componentClassName + " " + COMPONENT_FIELD + ";");
		newLine();

		append("public " + TESTER_CLASS + " getTestControl()");
		blockOpen();
		line("return " + COMPONENT_FIELD + ";");
		blockClose();
		

		// Declare TimeLabels
		td.eAllContents().forEachRemaining(e -> {