/**
* Axelor Business Solutions
*
* Copyright (C) 2016 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.tool.templating;
import java.math.BigDecimal;
import java.util.Locale;
import java.util.Map;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.junit.Assert;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import com.axelor.apps.tool.db.Contact;
import com.axelor.apps.tool.db.Title;
import com.axelor.tool.template.TemplateMaker;
import com.google.common.collect.Maps;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class STTest {
public Contact contact;
public String contentFinal;
public Map<String, Object> map = Maps.newHashMap();
public String content = ""
+"<h1>About Me ($contact.lastName;format=\"upper\"$)</h1>"
+"<hr />"
+"<p><strong>PayeurQuality:</strong> $contact.payeurQuality;format=\"%,2.3f\"$</p>"
+"<p><strong>Title: $contact.title$</p>"
+"<p><strong>First Name:</strong> $contact.firstName$</p>"
+"<p><strong>Last Name:</strong> $contact.lastName;format=\"upper\"$</p>"
+"<p><strong>DateOfBirth:</strong> $contact.dateOfBirth;format=\"dd/MM/YYYY\"$</p>"
+"<p> </p>"
+"<p><em>Contact me:</em> <a href='mailto:$contact.email$' target='_blank'>$contact.fullName$</a></p>"
+"<hr />$__time__;format=\"HH:mm\"$"
+"<ul>$__date__$"
+"<li>Java</li>"
+"<li>JavaScript</li>"
+"<li>Groovy</li>"
+"<li>HTML5</li>"
+"</ul>"
+"<pre>public class Hello {<br /><br />"
+"private String testKey1 = $testKey1$<br />"
+"private String testKey2 = $testKey2$<br />"
+"private String testKey3 = $testKey3$<br />"
+"}</pre>";
@Before
public void prepareTest() {
contact = new Contact("Belloy","Pierre");
contact.setEmail("p.belloy@axelor.com");
contact.setFullName(contact.getFullName());
contact.setDateOfBirth(new LocalDate());
contact.setPayeurQuality(new BigDecimal("2.2569"));
contact.setLanguage("fr");
Title title = new Title("TitleName", "TitleCode");
contact.setTitle(title);
map.put("testKey1", "This is the key 1");
map.put("testKey2", "This is the key 2");
map.put("testKey3", "This is the key 3");
contentFinal = ""
+"<h1>About Me (PIERRE)</h1>"
+"<hr />"
+"<p><strong>PayeurQuality:</strong> 2,257</p>"
+"<p><strong>Title: "+title.toString()+"</p>"
+"<p><strong>First Name:</strong> "+contact.getFirstName()+"</p>"
+"<p><strong>Last Name:</strong> "+contact.getLastName().toUpperCase()+"</p>"
+"<p><strong>DateOfBirth:</strong> "+contact.getDateOfBirth().toString("dd/MM/YYYY")+"</p>"
+"<p> </p>"
+"<p><em>Contact me:</em> <a href='mailto:"+contact.getEmail()+"' target='_blank'>"+contact.getFullName()+"</a></p>"
+"<hr />"+(new LocalTime()).toString("HH:mm")
+"<ul>"+new LocalDate()
+"<li>Java</li>"
+"<li>JavaScript</li>"
+"<li>Groovy</li>"
+"<li>HTML5</li>"
+"</ul>"
+"<pre>public class Hello {<br /><br />"
+ "private String testKey1 = "+map.get("testKey1")+"<br />"
+ "private String testKey2 = "+map.get("testKey2")+"<br />"
+ "private String testKey3 = "+map.get("testKey3")+"<br />"
+ "}</pre>";
}
@Test
public void test1() {
TemplateMaker maker = new TemplateMaker(new Locale("fr"), '$', '$');
maker.setTemplate(content);
maker.setContext(contact,map,"contact");
String result = maker.make();
Assert.assertNotNull(result);
Assert.assertEquals(contentFinal, result);
}
@Test
public void test2() {
long start = System.currentTimeMillis();
TemplateMaker maker = new TemplateMaker(new Locale("fr"), '$', '$');
for (int i = 0; i < 10000; i++) {
maker.setTemplate(content);
maker.setContext(contact,map,"contact");
String result = maker.make();
Assert.assertNotNull(result);
Assert.assertEquals(contentFinal, result);
}
//Assert test total time < 10s
Assert.assertTrue(((System.currentTimeMillis() - start)/1000) < 10);
}
@Test
public void test3() {
for (int i = 0; i < 10; i++) {
ThreadTest thread = new ThreadTest();
thread.run();
}
}
class ThreadTest extends Thread {
@Override
public void run() {
long start = System.currentTimeMillis();
TemplateMaker maker = new TemplateMaker(new Locale("fr"), '$', '$');
for (int i = 0; i < 10000; i++) {
maker.setTemplate(content);
maker.setContext(contact,map,"contact");
String result = maker.make();
Assert.assertNotNull(result);
Assert.assertEquals(contentFinal, result);
}
//Assert test total time < 10s
Assert.assertTrue(((System.currentTimeMillis() - start)/1000) < 10);
}
}
}