diff --git a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
index d68d3de..9e2a64e 100644
--- a/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
+++ b/tests/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TransformTests.java
@@ -1,50 +1,50 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2022 Borland Software Corporation and others
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- *
- * Contributors:
- *     Borland Software Corporation - initial API and implementation
- *     Christopher Gerking - bugs 302594, 309762, 377882, 388325, 392080, 392153,
+/*******************************************************************************
+ * Copyright (c) 2007, 2022 Borland Software Corporation and others
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *     Borland Software Corporation - initial API and implementation
+ *     Christopher Gerking - bugs 302594, 309762, 377882, 388325, 392080, 392153,
  *                         397215, 397959, 358709, 388801, 254962, 414555, 561707,
- *                         565747, 566216, 566230
+ *                         565747, 566216, 566230
  *     Alex Paperno - bugs 410470, 392429, 294127, 400720, 314443, 404647, 413131,
  *                         274105, 274505, 415029, 419299, 403440, 267917, 420970,
  *                         424584, 424869
  *******************************************************************************/
 package org.eclipse.m2m.tests.qvt.oml.transform;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.m2m.internal.qvt.oml.expressions.ExpressionsPackage;
-import org.eclipse.m2m.internal.qvt.oml.trace.TracePackage;
-import org.eclipse.m2m.qvt.oml.TransformationExecutor.BlackboxRegistry;
-import org.eclipse.m2m.qvt.oml.ocl.legacy.libraries.EmfToolsLibrary;
-import org.eclipse.m2m.qvt.oml.ocl.legacy.libraries.StringLibrary;
-import org.eclipse.m2m.tests.qvt.oml.TestBlackboxLibrary;
-import org.eclipse.m2m.tests.qvt.oml.bbox.AnnotatedJavaLibrary;
-import org.eclipse.m2m.tests.qvt.oml.bbox.Bug289982_Library;
-import org.eclipse.m2m.tests.qvt.oml.bbox.Bug425066_Library;
-import org.eclipse.m2m.tests.qvt.oml.bbox.Bug427237_Library;
-import org.eclipse.m2m.tests.qvt.oml.bbox.Bug565747_Library;
-import org.eclipse.m2m.tests.qvt.oml.bbox.Bug577992_Library;
-import org.eclipse.m2m.tests.qvt.oml.bbox.SimpleJavaLibrary;
-import org.eclipse.m2m.tests.qvt.oml.bbox.bug577992.Bug577992Package;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
-
-import generics.GenericsPackage;
-import junit.framework.TestCase;
-import simpleuml.SimpleumlPackage;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.m2m.internal.qvt.oml.expressions.ExpressionsPackage;
+import org.eclipse.m2m.internal.qvt.oml.trace.TracePackage;
+import org.eclipse.m2m.qvt.oml.TransformationExecutor.BlackboxRegistry;
+import org.eclipse.m2m.qvt.oml.ocl.legacy.libraries.EmfToolsLibrary;
+import org.eclipse.m2m.qvt.oml.ocl.legacy.libraries.StringLibrary;
+import org.eclipse.m2m.tests.qvt.oml.TestBlackboxLibrary;
+import org.eclipse.m2m.tests.qvt.oml.bbox.AnnotatedJavaLibrary;
+import org.eclipse.m2m.tests.qvt.oml.bbox.Bug289982_Library;
+import org.eclipse.m2m.tests.qvt.oml.bbox.Bug425066_Library;
+import org.eclipse.m2m.tests.qvt.oml.bbox.Bug427237_Library;
+import org.eclipse.m2m.tests.qvt.oml.bbox.Bug565747_Library;
+import org.eclipse.m2m.tests.qvt.oml.bbox.Bug577992_Library;
+import org.eclipse.m2m.tests.qvt.oml.bbox.SimpleJavaLibrary;
+import org.eclipse.m2m.tests.qvt.oml.bbox.bug577992.Bug577992Package;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+import generics.GenericsPackage;
+import junit.framework.TestCase;
+import simpleuml.SimpleumlPackage;
 import testqvt.TestqvtPackage;
 
 
@@ -149,7 +149,7 @@
                 new FileToFileData("bug244701"), //$NON-NLS-1$
         		new FileToFileData("virtualPredefinedTypeOpers"), //$NON-NLS-1$
         		new FileToFileData("blackboxlib_237781") {
-        			@Override
+        			@Override
 					public void prepare(BlackboxRegistry blackboxRegistry) {
         				blackboxRegistry.registerModule(TestBlackboxLibrary.class, "TestBlackboxLibrary", "TestBlackboxLibrary", new String[] {"http://www.eclipse.org/emf/2002/Ecore"});
         			};
@@ -519,20 +519,8 @@
         		new FilesToFilesData("urilessModeltype"), //$NON-NLS-1$
         		new FilesToFilesData("bug449445"), //$NON-NLS-1$
         		new FilesToFilesData("bug449912", Collections.<String>emptyList(), Collections.singletonList("expected.qvtoperational")), //$NON-NLS-1$ //$NON-NLS-2$
-        		new ReferencedProjectData("bug433937", "bug433937_referenced", false) { //$NON-NLS-1$ //$NON-NLS-2$
-        			@Override
-        			public boolean isUseCompiledXmi() {
-        				// TODO it should be possible to run this test with the using of compiled XMI
-        				return false;
-        			}
-        		},
-        		new ReferencedProjectData("bug433937", "bug433937_referenced", true) { //$NON-NLS-1$ //$NON-NLS-2$
-        			@Override
-        			public boolean isUseCompiledXmi() {
-        				// TODO it should be possible to run this test with the using of compiled XMI
-        				return false;
-        			}
-        		},
+        		new ReferencedProjectData("bug433937", "bug433937_referenced", false), //$NON-NLS-1$ //$NON-NLS-2$
+        		new ReferencedProjectData("bug433937", "bug433937_referenced", true), //$NON-NLS-1$ //$NON-NLS-2$
         		new FilesToFilesData("bug457433", Arrays.asList("in.ecore", "in2.ecore"), Collections.<String>emptyList()), //$NON-NLS-1$ //$NON-NLS-2$
         		new FilesToFilesData("bug440514"), //$NON-NLS-1$
         		new FilesToFilesData("bug415024"), //$NON-NLS-1$
@@ -604,18 +592,18 @@
         		new PluginDependencyProjectData("bug573659", "bug573659_referenced", true), //$NON-NLS-1$ //$NON-NLS-2$
         		new FilesToFilesData("bug570407").includeMetamodelFile("bug570407.ecore"),
         		new FilesToFilesData("bug573718"), //$NON-NLS-1$
-        		new FilesToFilesData("bug577992") { //$NON-NLS-1$
-        			@Override
-        			public List<? extends EPackage> getUsedPackages() {
-        				List<EPackage> packages = new ArrayList<EPackage>(super.getUsedPackages());
-        				packages.add(Bug577992Package.eINSTANCE);
-        				return packages;
-        			}
-
-        			@Override
-        			public void prepare(BlackboxRegistry blackboxRegistry) {
-        				blackboxRegistry.registerModule(Bug577992_Library.class);
-        			}
+        		new FilesToFilesData("bug577992") { //$NON-NLS-1$
+        			@Override
+        			public List<? extends EPackage> getUsedPackages() {
+        				List<EPackage> packages = new ArrayList<EPackage>(super.getUsedPackages());
+        				packages.add(Bug577992Package.eINSTANCE);
+        				return packages;
+        			}
+
+        			@Override
+        			public void prepare(BlackboxRegistry blackboxRegistry) {
+        				blackboxRegistry.registerModule(Bug577992_Library.class);
+        			}
         		}.includeMetamodelFile("bug577992.ecore"),
         		new FilesToFilesData("bug507955") { //$NON-NLS-1$
         			@Override
@@ -630,21 +618,21 @@
 
         			@Override
         			public void prepare(BlackboxRegistry blackboxRegistry) {
-         				Class<?> libraryClass = org.eclipse.m2m.tests.qvto.transformationProject.Bug507955_Library.class;
+         				Class<?> libraryClass = org.eclipse.m2m.tests.qvto.transformationProject.Bug507955_Library.class;
         		    	blackboxRegistry.registerModule(libraryClass);
         			};
         		},
-        		new FilesToFilesData("bug566236") { //$NON-NLS-1$
-        			@Override
-					public String getTestDataFolder() {
-        				return "parserTestData with%20whitespace"; //$NON-NLS-1$
-        			};
-        		},
-        		new FilesToFilesData("bug581992") {
-        			@Override
-					public int getExpectedSeverity() {
-        				return Diagnostic.WARNING;
-        			};
+        		new FilesToFilesData("bug566236") { //$NON-NLS-1$
+        			@Override
+					public String getTestDataFolder() {
+        				return "parserTestData with%20whitespace"; //$NON-NLS-1$
+        			};
+        		},
+        		new FilesToFilesData("bug581992") {
+        			@Override
+					public int getExpectedSeverity() {
+        				return Diagnostic.WARNING;
+        			};
         		}
         	};
     }
