/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library 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 Lesser General Public License for more
* details.
*/
package com.liferay.portlet;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.security.xml.SecureXMLFactoryProviderUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.security.xml.SecureXMLFactoryProviderImpl;
import com.liferay.portal.service.util.test.PortletPreferencesImplTestUtil;
import com.liferay.portal.service.util.test.PortletPreferencesTestUtil;
import com.liferay.portal.tools.ToolDependencies;
import com.liferay.portal.util.HtmlImpl;
import java.util.Arrays;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Shuyang Zhou
* @author Brian Wing Shun Chan
*/
public class PortletPreferencesFactoryImplUnitTest {
@BeforeClass
public static void setUpClass() throws Exception {
ToolDependencies.wireCaches();
}
@Before
public void setUp() {
HtmlUtil htmlUtil = new HtmlUtil();
htmlUtil.setHtml(new HtmlImpl());
SecureXMLFactoryProviderUtil secureXMLFactoryProviderUtil =
new SecureXMLFactoryProviderUtil();
secureXMLFactoryProviderUtil.setSecureXMLFactoryProvider(
new SecureXMLFactoryProviderImpl());
PortletPreferencesFactoryUtil portletPreferencesFactoryUtil =
new PortletPreferencesFactoryUtil();
portletPreferencesFactoryUtil.setPortletPreferencesFactory(
new PortletPreferencesFactoryImpl());
}
@Test
public void testBlankPreference() throws Exception {
String expectedXML =
PortletPreferencesTestUtil.getPortletPreferencesXML(
"name", new String[] {StringPool.BLANK});
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
portletPreferencesImpl.setValue("name", "");
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
Assert.assertEquals(expectedXML, actualXML);
portletPreferencesImpl =
PortletPreferencesImplTestUtil.toPortletPreferencesImpl(
expectedXML);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 1, preferencesMap.size());
Preference preference = preferencesMap.values().iterator().next();
Assert.assertEquals("name", preference.getName());
String[] values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 1, values.length);
Assert.assertEquals("", values[0]);
}
@Test
public void testComplexPortletPreferences() throws Exception {
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
// Blank
portletPreferencesImpl.setValue("", "");
// Empty
portletPreferencesImpl.setValues("name1", new String[0]);
// Multiple
portletPreferencesImpl.setValues("name2", new String[] {"", "value1"});
// Read only
Preference preference = new Preference(
"name3", new String[] {"value2", "value3"}, true);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
preferencesMap.put("name3", preference);
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
portletPreferencesImpl =
PortletPreferencesImplTestUtil.toPortletPreferencesImpl(actualXML);
preferencesMap = portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 4, preferencesMap.size());
// Blank
preference = preferencesMap.get("");
Assert.assertNotNull(preference);
Assert.assertEquals("", preference.getName());
String[] values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 1, values.length);
Assert.assertEquals("", values[0]);
Assert.assertFalse(preference.isReadOnly());
// Empty
preference = preferencesMap.get("name1");
Assert.assertNotNull(preference);
Assert.assertEquals("name1", preference.getName());
values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 0, values.length);
Assert.assertFalse(preference.isReadOnly());
// Multiple
preference = preferencesMap.get("name2");
Assert.assertNotNull(preference);
Assert.assertEquals("name2", preference.getName());
values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 2, values.length);
Assert.assertEquals("", values[0]);
Assert.assertEquals("value1", values[1]);
Assert.assertFalse(preference.isReadOnly());
// Read only
preference = preferencesMap.get("name3");
Assert.assertNotNull(preference);
Assert.assertEquals("name3", preference.getName());
values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 2, values.length);
Assert.assertEquals("value2", values[0]);
Assert.assertEquals("value3", values[1]);
Assert.assertTrue(preference.isReadOnly());
}
@Test
public void testEmptyPortletPreferences() {
String expectedXML =
PortletPreferencesTestUtil.getPortletPreferencesXML();
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
Assert.assertEquals(expectedXML, actualXML);
portletPreferencesImpl =
(PortletPreferencesImpl)
PortletPreferencesFactoryUtil.fromDefaultXML(expectedXML);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 0, preferencesMap.size());
}
@Test
public void testEmptyPreference() throws Exception {
String expectedXML =
PortletPreferencesTestUtil.getPortletPreferencesXML(
"name", new String[0]);
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
portletPreferencesImpl.setValues("name", new String[0]);
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
Assert.assertEquals(expectedXML, actualXML);
portletPreferencesImpl =
PortletPreferencesImplTestUtil.toPortletPreferencesImpl(
expectedXML);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 1, preferencesMap.size());
Preference preference = preferencesMap.values().iterator().next();
Assert.assertEquals("name", preference.getName());
Assert.assertEquals(0, preference.getValues().length);
Assert.assertFalse(preference.isReadOnly());
}
@Test
public void testMultiplePreferences() throws Exception {
String[] values = {"value1", "value2"};
String expectedXML =
PortletPreferencesTestUtil.getPortletPreferencesXML("name", values);
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
portletPreferencesImpl.setValues("name", values);
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
Assert.assertEquals(expectedXML, actualXML);
portletPreferencesImpl =
PortletPreferencesImplTestUtil.toPortletPreferencesImpl(
expectedXML);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 1, preferencesMap.size());
Preference preference = preferencesMap.values().iterator().next();
Assert.assertEquals("name", preference.getName());
values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 2, values.length);
Assert.assertEquals("value1", values[0]);
Assert.assertEquals("value2", values[1]);
}
@Test
public void testSinglePreference() throws Exception {
String expectedXML =
PortletPreferencesTestUtil.getPortletPreferencesXML(
"name", new String[] {"value"});
PortletPreferencesImpl portletPreferencesImpl =
new PortletPreferencesImpl();
portletPreferencesImpl.setValue("name", "value");
String actualXML = PortletPreferencesFactoryUtil.toXML(
portletPreferencesImpl);
Assert.assertEquals(expectedXML, actualXML);
portletPreferencesImpl =
PortletPreferencesImplTestUtil.toPortletPreferencesImpl(
expectedXML);
Map<String, Preference> preferencesMap =
portletPreferencesImpl.getPreferences();
Assert.assertEquals(
preferencesMap.toString(), 1, preferencesMap.size());
Preference preference = preferencesMap.values().iterator().next();
Assert.assertEquals("name", preference.getName());
String[] values = preference.getValues();
Assert.assertEquals(Arrays.toString(values), 1, values.length);
Assert.assertEquals("value", values[0]);
}
}