/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.chat.portlet.beans.admin.editroom; import static junit.framework.Assert.assertFalse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.junit.Test; import br.gov.camara.edemocracia.portlets.chat.portlet.beans.components.SafeRichTextConverter; import com.liferay.portal.kernel.util.StringUtil; public class SafeRichTextConverterTest { private SafeRichTextConverter converter = new SafeRichTextConverter(); @Test public void nullOuBrancoNaoDevemSerModificados() { assertEquals("", limpar("")); assertEquals(" ", limpar(" ")); assertNull(limpar(null)); } @Test public void linkComUrlHttpDevePassar() { assertTextoLimpoNaoFoiModificado("<a href=\"http://www.google.com\">link normal</a>"); } @Test public void linkComUrlHttpsDevePassar() { assertTextoLimpoNaoFoiModificado("<a href=\"https://www.google.com\">link https</a>"); } @Test public void textoSemTagsNaoDeveSerModificado() { assertTextoLimpoNaoFoiModificado("abc blah blah blah"); } @Test public void tagBrDeveSerPermitida() { assertTextoLimpoNaoFoiModificado("<br />teste"); } @Test public void tagImgDeveSerRemovida() { String limpo = limpar("<img src=\"http://www.google.com/teste.gif\">"); assertTrue(StringUtils.isBlank(limpo)); } @Test public void tagScriptDeveSerRemovida() { String textoLimpo = limpar("<script type=\"text/javascript\">document.cookie</script>"); assertTrue(StringUtils.isBlank(textoLimpo)); } @Test public void tagInputDeveSerRemovida() { assertTrue(StringUtils.isBlank(limpar("<input type=\"text\">"))); } @Test public void tagSpanDeveSerPermitida() { assertTextoLimpoNaoFoiModificado("<span style=\"font-size:11pt\">alo</span>"); } @Test public void tagDivComAtributoStyleDeveSerPermitida() { assertTextoLimpoNaoFoiModificado("<div style=\"font-size:11.5pt\">alo</div>"); } @Test public void tagFontDeveSerPermitida() { assertTextoLimpoNaoFoiModificado("<font face=\"Tahoma\" size=\"20\" id=\"teste\">teste</font>"); assertTrue(limpar("<div><font face=\"Tahoma\" size=\"2\">teste</font></div>").contains("<div><font")); } @Test public void tagEmDeveSerPermitida() { assertTextoLimpoNaoFoiModificado("<em>teste</em>"); } @Test public void tagsBoldItalicStrongDevemSerPermitidas() { assertTextoLimpoNaoFoiModificado("<span style=\"font-weigth:bold;\"><i><b>teste</b></i></span>"); assertTextoLimpoNaoFoiModificado("<strong>teste</strong>"); } @Test public void divComHandlerJavascriptDeveFicarSemHandler() { assertFalse(limpar("<div onmouseover=\"alert('a')\">teste</div>").contains("onmouseover")); assertFalse(limpar("<div onclick=\"alert('a')\">teste</div>").contains("onclick")); } @Test public void getAsStringNaoDeveModificarParametro() { String antes = "<a href=\"#\">link</>"; String depois = converter.getAsString(null, null, antes); assertEquals(antes, depois); } @Test public void javascriptDentroDoHrefDeveSerRemovido() { assertFalse(limpar("<a href=\"alert('a')\">link</a>").contains("alert('a')")); assertFalse(limpar("clique aqui <a href=\"javascript:alert('a')\">link</a>").contains("alert('a')")); } @Test public void onClickDentroDeLinkDeveSerRemovido() { assertFalse(limpar("<a href=\"#\" onclick=\"javascript:alert('a')\">teste</a>").contains("onclick")); } @Test public void testeTudoJunto() throws IOException { String texto = StringUtil.read(Thread.currentThread().getContextClassLoader(), "br/gov/camara/edemocracia/portlets/chat/portlet/beans/admin/editroom/devepassar.txt"); assertTextoLimpoNaoFoiModificado(texto); } private void assertTextoLimpoNaoFoiModificado(String texto) { assertEquals(texto, limpar(texto)); } private String limpar(String texto) { String textoLimpo = (String) converter.getAsObject(null, null, texto); return textoLimpo; } }