@Override
	void toHtml() throws IOException {
		writeHtmlHeader();
		htmlCoreReport.toHtml();
		writeHtmlFooter();
	}
@Test
	public void testJob() throws IOException, SchedulerException {
		// job quartz
		initJobGlobalListener();
		getJobCounter().clear();

		//Grab the Scheduler instance from the Factory
		final Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

		try {
			// and start it off
			scheduler.start();

			final Random random = new Random();

			//Define a Trigger that will fire "later"
			final JobDetail job2 = JobBuilder.newJob(JobTestImpl.class)
					.withIdentity("job" + random.nextInt()).build();
			final Trigger trigger2 = TriggerBuilder.newTrigger()
					.withIdentity("trigger" + random.nextInt())
					.startAt(new Date(System.currentTimeMillis() + 60000))
					.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInHours(48)
							.repeatForever())
					.build();
			scheduler.scheduleJob(job2, trigger2);
			scheduler.pauseJob(job2.getKey());

			final JobDetail job3 = JobBuilder.newJob(JobTestImpl.class)
					.withIdentity("job" + random.nextInt()).build();
			// cron trigger that will never fire
			final Trigger trigger3 = TriggerBuilder.newTrigger()
					.withIdentity("crontrigger" + random.nextInt())
					.withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ? 2030")).build();
			scheduler.scheduleJob(job3, trigger3);

			// JavaInformations doit être réinstancié pour récupérer les jobs
			// (mais "Aucun job" dans le counter)
			final List<JavaInformations> javaInformationsList2 = Collections
					.singletonList(new JavaInformations(null, true));
			final HtmlReport htmlReport = new HtmlReport(collector, null, javaInformationsList2,
					Period.TOUT, writer);
			htmlReport.toHtml(null, null);
			assertNotEmptyAndClear(writer);

			// on lance 10 jobs pour être à peu près sûr qu'il y en a un qui fait une erreur
			// (aléatoirement il y en a 2/10 qui font une erreur)
			for (int i = 0; i < 10; i++) {
				//Define a Trigger that will fire "now"
				final JobDetail job = JobBuilder.newJob(JobTestImpl.class)
						.withIdentity("job" + random.nextInt()).withDescription("description")
						.build();

				final Trigger trigger = TriggerBuilder.newTrigger()
						.withIdentity("trigger" + random.nextInt()).startNow()
						// pour que les jobs restent en cours après la 1ère exécution
						.withSchedule(SimpleScheduleBuilder.simpleSchedule()
								.withIntervalInMinutes(1).repeatForever())
						.build();
				//Schedule the job with the trigger
				scheduler.scheduleJob(job, trigger);
			}
			// JobTestImpl fait un sleep de 2s au plus, donc on attend les jobs pour les compter
			try {
				Thread.sleep(3000);
			} catch (final InterruptedException e) {
				throw new IllegalStateException(e);
			}

			// JavaInformations doit être réinstancié pour récupérer les jobs
			setProperty(Parameter.SYSTEM_ACTIONS_ENABLED, Boolean.FALSE.toString());
			final List<JavaInformations> javaInformationsList3 = Collections
					.singletonList(new JavaInformations(null, true));
			final HtmlReport htmlReport3 = new HtmlReport(collector, null, javaInformationsList3,
					Period.TOUT, writer);
			htmlReport3.toHtml(null, null);
			assertNotEmptyAndClear(writer);
		} finally {
			scheduler.shutdown();
			getJobCounter().clear();
			destroyJobGlobalListener();
		}
	}