package working;

import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
import org.junit.jupiter.api.extension.ExtensionContext.Store;

public class TimingExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback {

	@Override
	public void beforeTestExecution(ExtensionContext context) throws Exception {
		long start = System.currentTimeMillis();
		getStore(context).put("START", start);
	}

	@Override
	public void afterTestExecution(ExtensionContext context) throws Exception {
		long start = getStore(context).get("START", long.class);
		long duration = System.currentTimeMillis() - start;
		// System.out.println("Test method " + context.getRequiredTestMethod().getName() + " took " + duration + " ms");
		context.publishReportEntry("exucution time", "" + duration);
	}

	private Store getStore(ExtensionContext context) {
		return context.getStore(Namespace.create(context.getRequiredTestMethod()));
	}

}