/***********************************************************************
* This file is part of iDempiere ERP Open Source *
* http://www.idempiere.org *
* *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - hengsin *
**********************************************************************/
package org.idempiere.test.base;
import org.compiere.util.Util;
import org.idempiere.test.AbstractTestCase;
import org.junit.jupiter.api.Test;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
public class UtilTest extends AbstractTestCase {
@Test
void replace() {
assertEquals("This is a test.", Util.replace("This is a test.", "old", "new"));
assertEquals("This is a new.", Util.replace("This is a old.", "old", "new"));
assertEquals("This is a .", Util.replace("This is a old.", "old", ""));
assertEquals("This is a .", Util.replace("This is a old.", "old", null));
assertEquals("This is a old.", Util.replace("This is a old.", null, "new"));
assertEquals("This is a old.", Util.replace("This is a old.", "", "new"));
assertEquals("", Util.replace("", "old", "new"));
assertNull(Util.replace(null, "old", "new"));
assertEquals("newnewnew",Util.replace("oldoldold","old","new"));
}
@Test
void removeCRLF() {
assertEquals("Thisisatest.", Util.removeCRLF("This\nis\ra\ntest."));
assertEquals("NoCRLF", Util.removeCRLF("NoCRLF"));
assertEquals("", Util.removeCRLF("\n\r\n\r"));
}
@Test
void cleanWhitespace() {
assertEquals("This is a test.", Util.cleanWhitespace("This is a test."));
assertEquals(" This is a test. ", Util.cleanWhitespace(" This is a test. "));
assertEquals("NoWhitespace", Util.cleanWhitespace("NoWhitespace"));
assertEquals(" ", Util.cleanWhitespace(" "));
assertEquals("",Util.cleanWhitespace(""));
}
@Test
void maskHTML() {
assertEquals("<html>", Util.maskHTML(""));
assertEquals("<html>&"'", Util.maskHTML("&\"'"));
assertEquals("Normal", Util.maskHTML("Normal"));
assertEquals("<br>", Util.maskHTML("
"));
assertEquals("", Util.maskHTML("\uD83D\uDE00"));
assertEquals("Line1
Line2", Util.maskHTML("Line1\nLine2",true));
assertEquals("Line1Line2", Util.maskHTML("Line1\nLine2",false));
assertNull(Util.maskHTML(null,true));
assertNull(Util.maskHTML(null));
}
@Test
void getCount() {
assertEquals(3, Util.getCount("This is a test.", 's'));
assertEquals(0, Util.getCount("This is a test.", 'z'));
assertEquals(0, Util.getCount(null, 's'));
assertEquals(0,Util.getCount("",'a'));
assertEquals(3,Util.getCount("aaa",'a'));
}
@Test
void isEmpty() {
assertTrue(Util.isEmpty(null));
assertTrue(Util.isEmpty(""));
assertFalse(Util.isEmpty(" "));
assertFalse(Util.isEmpty("test"));
assertTrue(Util.isEmpty(null, true));
assertTrue(Util.isEmpty("", true));
assertTrue(Util.isEmpty(" ", true));
assertFalse(Util.isEmpty(" test ", true));
assertFalse(Util.isEmpty("test", true));
}
@Test
void deleteAccents() {
assertEquals("aAaaeeiioouu", Util.deleteAccents("àÁâäèéîïöôüû"));
assertEquals("This is a test.", Util.deleteAccents("This is a test."));
assertEquals("",Util.deleteAccents(""));
}
@Test
void findIndexOf() {
assertEquals(-1, Util.findIndexOf("abc'd'efg", 'd'));
assertEquals(6, Util.findIndexOf("abc'd'efg", 'd','e'));
assertEquals(8, Util.findIndexOf("abc(def)g", 'g'));
assertEquals(11, Util.findIndexOf("abc(def(g))h", 'h'));
assertEquals(11, Util.findIndexOf("abc(def)(g)h", 'h'));
assertEquals(-1, Util.findIndexOf(null, 'a'));
assertEquals(-1,Util.findIndexOf("abc'd'efg", 'z'));
assertEquals(11, Util.findIndexOf("abc(def)(g)h", 'h','g'));
assertEquals(-1, Util.findIndexOf(null, 'a','b'));
assertEquals(-1,Util.findIndexOf("abc'd'efg", 'z','d'));
}
@Test
void findIndexOfString() {
assertEquals(8, Util.findIndexOf("abc(def)ghi", "ghi"));
assertEquals(8, Util.findIndexOf("abc'ghi'jkl", "jkl"));
assertEquals(13, Util.findIndexOf("abc(def)(ghi)jkl", "jkl"));
assertEquals(-1, Util.findIndexOf(null, "ghi"));
assertEquals(-1, Util.findIndexOf("abc(def)ghi", null));
assertEquals(-1, Util.findIndexOf("abc(def)ghi", ""));
assertEquals(-1, Util.findIndexOf("abc'ghi'jkl", "ghi"));
assertEquals(-1, Util.findIndexOf("abc(def)(ghi)jkl", "ghi"));
}
@Test
void toHex() {
assertEquals("00", Util.toHex((byte) 0));
assertEquals("ff", Util.toHex((byte) 255));
assertEquals("7f", Util.toHex((byte) 127));
assertEquals("80", Util.toHex((byte) -128));
assertEquals("0000", Util.toHex((char) 0));
assertEquals("ffff", Util.toHex((char) 65535));
assertEquals("7fff", Util.toHex((char) 32767));
}
@Test
void initCap() {
assertEquals("This Is A Test", Util.initCap("this is a test"));
assertEquals("This", Util.initCap("this"));
assertEquals(" ", Util.initCap(" "));
assertEquals("This Is A Test", Util.initCap("THIS IS A TEST"));
assertEquals("",Util.initCap(""));
assertNull(Util.initCap(null));
}
@Test
void is8Bit() {
assertTrue(Util.is8Bit("abc"));
assertTrue(Util.is8Bit(""));
assertTrue(Util.is8Bit(null));
assertFalse(Util.is8Bit("a\uD83D\uDE00"));
}
@Test
void cleanAmp(){
assertEquals("abc", Util.cleanAmp("&abc"));
assertEquals("abc", Util.cleanAmp("abc"));
assertEquals("abc", Util.cleanAmp("a&bc"));
assertEquals("a&bc", Util.cleanAmp("&a&bc"));
assertEquals("", Util.cleanAmp(""));
assertNull(Util.cleanAmp(null));
}
@Test
void trimLength() {
assertEquals("test", Util.trimLength("test", 4));
assertEquals("tes", Util.trimLength("test", 3));
assertEquals("t", Util.trimLength("test", 1));
assertEquals("test", Util.trimLength("test", 10));
assertThrows(IllegalArgumentException.class, () -> Util.trimLength("test", 0));
assertThrows(IllegalArgumentException.class, () -> Util.trimLength("test", -1));
assertNull(Util.trimLength(null, 10));
}
@Test
void size() {
assertEquals(0, Util.size(null));
assertEquals(4, Util.size("test"));
assertEquals(2, Util.size("\u00A9"));
assertEquals(4, Util.size("\uD83D\uDE00"));
assertEquals(1, Util.size("a"));
}
@Test
void trimSize() {
assertEquals("test", Util.trimSize("test", 4));
assertEquals("tes", Util.trimSize("test", 3));
assertEquals("t", Util.trimSize("test", 1));
assertEquals("test", Util.trimSize("test", 10));
assertThrows(IllegalArgumentException.class, () -> Util.trimSize("test", 0));
assertThrows(IllegalArgumentException.class, () -> Util.trimSize("test", -1));
assertNull(Util.trimSize(null, 10));
assertEquals("\u00A9",Util.trimSize("\u00A9",2));
}
@Test
void removeTime() {
Timestamp ts = Timestamp.valueOf("2023-10-27 10:30:00");
Timestamp expected = Timestamp.valueOf("2023-10-27 00:00:00");
assertEquals(expected, Util.removeTime(ts));
ts = Timestamp.valueOf("2023-10-27 00:00:00");
assertEquals(expected, Util.removeTime(ts));
}
@Test
void setFilenameCorrect() {
assertEquals("test", Util.setFilenameCorrect("test"));
assertEquals("test-test", Util.setFilenameCorrect("test/test"));
assertEquals("test-test", Util.setFilenameCorrect("test:test"));
assertEquals("test-test", Util.setFilenameCorrect("test*test"));
assertEquals("test-test", Util.setFilenameCorrect("testtest"));
assertEquals("test-test", Util.setFilenameCorrect("test%test"));
assertEquals("test", Util.setFilenameCorrect(" test "));
assertEquals("a",Util.setFilenameCorrect("à"));
}
@Test
void isUUID()
{
assertTrue(Util.isUUID("123e4567-e89b-12d3-a456-426614174000"));
assertTrue(Util.isUUID("123E4567-E89B-12D3-A456-426614174000"));
assertFalse(Util.isUUID("123E4567-E89B-12D3-A456-42661417400"));
assertFalse(Util.isUUID("123E4567-E89B-12D3-A456-42661417400g"));
assertFalse(Util.isUUID(null));
}
@Test
void mergePdf_ValidInput_MergesFiles() throws Exception {
// Create dummy PDF files
Path tempDir = Files.createTempDirectory("mergePdfTest");
File pdf1 = createDummyPdf(tempDir, "pdf1.pdf");
File pdf2 = createDummyPdf(tempDir, "pdf2.pdf");
File pdf3 = createDummyPdf(tempDir, "pdf3.pdf");
List pdfList = Arrays.asList(pdf1, pdf2,pdf3);
File mergedPdf = new File(tempDir.toFile(), "merged.pdf");
// Call the method to test
Util.mergePdf(pdfList, mergedPdf);
// Assert that the merged file exists and is not empty
assertTrue(mergedPdf.exists());
assertTrue(mergedPdf.length() > 0);
// Clean up the temporary files and directory
Files.delete(pdf1.toPath());
Files.delete(pdf2.toPath());
Files.delete(pdf3.toPath());
Files.delete(mergedPdf.toPath());
Files.delete(tempDir);
}
@Test
void prettifyJSONString()
{
String json = "{ \"name\":\"John\", \"age\":30, \"car\":null }";
String expected = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"car\": null\n" +
"}";
String res = Util.prettifyJSONString(json);
assertEquals(expected,res);
String json2 = "invalid json";
assertThrows(org.adempiere.exceptions.AdempiereException.class,()->Util.prettifyJSONString(json2));
}
private File createDummyPdf(Path tempDir, String filename) throws IOException {
File file = new File(tempDir.toFile(), filename);
Files.createFile(file.toPath());
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
// Add some content
document.add(new Paragraph("This is a dummy PDF file created with openPDF."));
document.close();
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
return file;
}
}