| /******************************************************************************* | |
| * Copyright (c) 2017 Christian Pontesegger and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Christian Pontesegger - initial API and implementation | |
| *******************************************************************************/ | |
| loadModule("/Unittest"); | |
| function sleep(milliSeconds) { | |
| stop = java.lang.System.currentTimeMillis() + milliSeconds; | |
| while (java.lang.System.currentTimeMillis() < stop) | |
| ; | |
| } | |
| /** | |
| * Create instances containing test functions. | |
| */ | |
| var modernTest = { | |
| // special marker to indicate this instance as unit test | |
| __unittest : '', | |
| // unit test description | |
| __description : 'Test class demonstrating modern testing', | |
| // globally ignore this instance and all its test methods | |
| // __ignore : 'tests ignored -> list ignored testcases', | |
| /** | |
| * Method to be called before each test function. The name is not important, instead we are looking for our custom annotations | |
| */ | |
| setup : function() { | |
| // annotation indicating that this is the test setup method | |
| '@before'; | |
| print("this is the test setup") | |
| }, | |
| /** | |
| * Method to be called after each test, even in case of errors. | |
| */ | |
| teardown : function() { | |
| '@after'; | |
| print("this is the test teardown") | |
| }, | |
| /** | |
| * Method to be called once before all tests if this instance get executed. | |
| */ | |
| setupClass : function() { | |
| '@beforeclass'; | |
| print("this is the testclass setup") | |
| }, | |
| /** | |
| * Method to be called once after all tests of this instance got executed. | |
| */ | |
| teardownClass : function() { | |
| '@afterclass'; | |
| print("this is the testclass teardown") | |
| }, | |
| /** | |
| * Simple test case. The @test marker indicates it as a test. | |
| */ | |
| valid : function() { | |
| '@test'; | |
| '@description(Working testcase)'; | |
| assertTrue(true); | |
| }, | |
| /** | |
| * Instead of an @test annotation we could prefix the function name with 'test'. | |
| */ | |
| testInvalid : function() { | |
| '@description(testcase that fails)'; | |
| assertTrue(false); | |
| }, | |
| /** | |
| * Even after throwing further tests of this instance will get executed. | |
| */ | |
| testError : function() { | |
| '@description(testcase throwing an exception)'; | |
| throw "this does not work"; | |
| }, | |
| testError2 : function() { | |
| '@description(testcase throwing an exception)'; | |
| java.lang.Class.forName("NonExistingClass"); | |
| }, | |
| /** | |
| * Expect a java exception to be thrown. Test is pass when exception is detected. | |
| */ | |
| testExpectError : function() { | |
| '@description(testcase expecting an exception)'; | |
| '@expect(java.lang.ClassNotFoundException)'; | |
| java.lang.Class.forName("NonExistingClass"); | |
| }, | |
| /** | |
| * This test will fail as the expected exception is not thrown. | |
| */ | |
| testExpectErrorButIsOK : function() { | |
| '@description(testcase expecting an exception)'; | |
| '@expect(java.lang.ClassNotFoundException)'; | |
| }, | |
| /** | |
| * Disable a test. | |
| */ | |
| testIgnored : function() { | |
| '@description(ignored testcase)'; | |
| '@ignore(manually disabled testcase)'; | |
| assertTrue(false); | |
| }, | |
| /** | |
| * Test failing due to exceeded execution time. | |
| */ | |
| testTimeout : function() { | |
| '@description(test running in a timeout)'; | |
| '@timeout(100)'; | |
| sleep(150); | |
| }, | |
| } |