    1   /*
    2    * Copyright (c) 2003
    3    * Information Desire GmbH
    4    * All rights reserved.
    5    */
    6   package com.infodesire.infobit;
    7
    8   import com.infodesire.infobit.data.Acl;
    9   import com.infodesire.infobit.data.Infobit;
    10
    11  import com.infodesire.infobit.external.InfobitExporter;
    12  import com.infodesire.infobit.external.InfobitImporter;
    13
    14  import com.infodesire.infobit.external.impl.ImporterImpl;
    15  // import com.infodesire.infobit.external.impl.VelocityExporter;
    16  import com.infodesire.infobit.external.impl.SimpleExporter;
    17
    18  import junit.framework.TestCase;
    19  import junit.framework.TestSuite;
    20
    21  import org.apache.commons.logging.Log;
    22  import org.apache.commons.logging.LogFactory;
    23
    24  import java.io.BufferedReader;
    25  import java.io.IOException;
    26  import java.io.InputStream;
    27  import java.io.InputStreamReader;
    28  import java.io.Reader;
    29  import java.io.StringReader;
    30  import java.io.StringWriter;
    31
    32  import java.util.ArrayList;
    33  import java.util.Collection;
    34  import java.util.HashMap;
    35  import java.util.HashSet;
    36  import java.util.List;
    37  import java.util.Map;
    38  import java.util.Set;
    39  import java.util.TreeMap;
    40
    41  /***
    42   * Test cases asserting the XML representation of infobits
    43   *
    44   * @author    peter
    45   * @created   August 27, 2003
    46   * @version   $Revision: 1.2 $
    47   */
    48  public class XMLExportTest extends XMLTestBase {
    49
    50      /***
    51       * Initializes the test cases.
    52       *
    53       * @param name  Test name
    54       */
    55      public XMLExportTest(String name) {
    56          super(name);
    57      }
    58
    59
    60      /***
    61       * Common test case fixture.
    62       *
    63       * @exception Exception  Description of Exception
    64       */
    65      public void setUp() throws Exception {
    66          super.setUp();
    67      }
    68
    69
    70      /***
    71       * Common teardown of test case fixtures.
    72       *
    73       * @exception Exception  Description of Exception
    74       */
    75      public void tearDown() throws Exception {
    76      }
    77
    78
    79      /***
    80       * Checks the externalization of an infobit with no version attached.
    81       *
    82       * @exception Exception  Generic error
    83       */
    84      public void testEmptyInfobitOutput() throws Exception {
    85          Infobit ib = prepareEmptyInfobit("EM001");
    86          List infobits = new ArrayList();
    87          infobits.add(ib);
    88
    89          String expPath = "/com/infodesire/infobit/external/emptyInfobit.xml";
    90          InputStream exp = getClass().getResourceAsStream(expPath);
    91          performExportTest("testEmptyInfobitOutput", infobits, exp);
    92      }
    93
    94
    95      /***
    96       * Checks the externalization of an infobit with multiple (text content)
    97       * versions attached.
    98       *
    99       * @exception Exception  Description of Exception
    100      */
    101     public void testMultiVersionInfobitOutput() throws Exception {
    102         Infobit ib = prepareMultiVersionTextInfobit("IB011");
    103         List export = new ArrayList();
    104         export.add(ib);
    105
    106         String expPath =
    107             "/com/infodesire/infobit/external/multiVersionInfobit.xml";
    108         InputStream exp = getClass().getResourceAsStream(expPath);
    109         performExportTest("testMultiVersionInfobitOutput", export, exp);
    110     }
    111
    112
    113     /***
    114      * Checks the externalization of an infobit with a binary content version
    115      * attached.
    116      *
    117      * @exception Exception  Description of Exception
    118      */
    119     public void xxtestBinaryContentInfobitOutput() throws Exception {
    120         Infobit ib = prepareBinaryInfobit("IB023");
    121         List export = new ArrayList();
    122         export.add(ib);
    123
    124         String expPath =
    125             "/com/infodesire/infobit/external/binaryContentInfobit.xml";
    126         InputStream expected = getClass().getResourceAsStream(expPath);
    127         performExportTest("testBinaryContentInfobitOutput", export, expected);
    128     }
    129
    130
    131     /***
    132      * Checks the XML representation of multiple unrelated infobits.
    133      *
    134      * @exception Exception  Description of Exception
    135      */
    136     public void xxtestMultipleInfobitsOutput() throws Exception {
    137         Infobit eib = prepareEmptyInfobit("EM001");
    138         Infobit tib = prepareMultiVersionTextInfobit("TX001");
    139         Infobit bib = prepareBinaryInfobit("BI001");
    140
    141         List export = new ArrayList();
    142         export.add(eib);
    143         export.add(tib);
    144         export.add(bib);
    145
    146         String expPath =
    147             "/com/infodesire/infobit/external/multipleInfobits.xml";
    148         InputStream expected = getClass().getResourceAsStream(expPath);
    149         performExportTest("testMulitpleInfobitOutput", export, expected);
    150     }
    151
    152
    153     /***
    154      * Checks the XML representation of a template content infobit.
    155      *
    156      * @exception Exception  Description of Exception
    157      */
    158     public void testTemplateInfobitOutput() throws Exception {
    159         Infobit ib = prepareTemplateInfobit("TM001");
    160         List export = new ArrayList();
    161         export.add(ib);
    162
    163         String expPath =
    164             "/com/infodesire/infobit/external/templateInfobit.xml";
    165         InputStream expected = getClass().getResourceAsStream(expPath);
    166         performExportTest("testTemplateInfobitOutput", export, expected);
    167     }
    168
    169
    170     /***
    171      * Checks the XML representation of a set of script with its referred
    172      * template infobit.
    173      *
    174      * @exception Exception  Description of Exception
    175      */
    176     public void testScriptSetOutput() throws Exception {
    177         Map links = new TreeMap();
    178         //  keep order stable to enable text-based testing
    179
    180         Infobit ref01 = prepareMultiVersionTextInfobit("TX011");
    181         Infobit ref02 = prepareEmptyInfobit("EM011");
    182         links.put("ref01", ref01);
    183         links.put("ref02", ref02);
    184
    185         Infobit tib = prepareTemplateInfobit("TM002");
    186         Infobit sib = prepareScriptInfobit("SC001", tib, links);
    187
    188         List export = new ArrayList();
    189         export.add(sib);
    190         export.add(tib);
    191         export.add(ref01);
    192         export.add(ref02);
    193
    194         String expPath = "/com/infodesire/infobit/external/scriptSet.xml";
    195         InputStream expected = getClass().getResourceAsStream(expPath);
    196         performExportTest("testScriptOutput", export, expected);
    197     }
    198
    199
    200     /***
    201      * Creates an infobit with no versions defined.
    202      *
    203      * @param name           The name of the infobit to create
    204      * @return               Description of the Returned Value
    205      * @exception Exception  Description of Exception
    206      */
    207     private Infobit prepareEmptyInfobit(String name) throws Exception {
    208         Infobit ib = _manager.createInfobit(name, _defaultAcl);
    209         return ib;
    210     }
    211
    212
    213     /***
    214      * Creates an infobit with multiple text versions set.
    215      *
    216      * @param name           Description of Parameter
    217      * @return               Description of the Returned Value
    218      * @exception Exception  Description of Exception
    219      */
    220     private Infobit prepareMultiVersionTextInfobit(String name)
    221          throws Exception {
    222
    223         Infobit ib = _manager.createInfobit(name, _defaultAcl);
    224         Set keywords = new HashSet();
    225
    226         String text = "This is the first version of the content" +
    227             System.getProperty("line.separator");
    228         _manager.createText(ib, "1", text, keywords);
    229
    230         text = "This is the second version of the content" +
    231             System.getProperty("line.separator");
    232         _manager.createText(ib, "2", text, keywords);
    233
    234         return ib;
    235     }
    236
    237
    238     /***
    239      * Creates an infobit of binary content.
    240      *
    241      * @param name           Description of Parameter
    242      * @return               Description of the Returned Value
    243      * @exception Exception  Description of Exception
    244      */
    245     private Infobit prepareBinaryInfobit(String name) throws Exception {
    246         Infobit ib = _manager.createInfobit(name, _defaultAcl);
    247         String dataPath = "/com/infodesire/infobit/external/undo.pbm";
    248         InputStream data = getClass().getResourceAsStream(dataPath);
    249         Set keywords = new HashSet();
    250         _manager.createBinary(ib, "V1.0", data, "image/pnm", keywords);
    251
    252         return ib;
    253     }
    254
    255
    256     /***
    257      * Creates an infobit of tmeplate content.
    258      *
    259      * @param name           Description of Parameter
    260      * @return               Description of the Returned Value
    261      * @exception Exception  Description of Exception
    262      */
    263     private Infobit prepareTemplateInfobit(String name) throws Exception {
    264         Infobit ib = _manager.createInfobit(name, _defaultAcl);
    265
    266         String templPath = "/com/infodesire/infobit/external/template.xml";
    267         InputStream is = getClass().getResourceAsStream(templPath);
    268         InputStreamReader r = new InputStreamReader(is);
    269         StringBuffer tmpl = new StringBuffer();
    270         char[] buf = new char[512];
    271         int n;
    272         while ((n = r.read(buf)) > -1) {
    273             tmpl.append(buf, 0, n);
    274         }
    275         r.close();
    276
    277         _manager.createTemplate(ib, "1.0", tmpl.toString());
    278
    279         return ib;
    280     }
    281
    282
    283     /***
    284      * Creates an infobit with a template bound as most recent version.
    285      *
    286      * @param name           Name of the infobit to create
    287      * @param tmpl           The bound template
    288      * @param links          The links to pass...
    289      * @return               Description of the Returned Value
    290      * @exception Exception  Description of Exception
    291      */
    292     private Infobit prepareScriptInfobit(String name, Infobit tmpl,
    293         Map links) throws Exception {
    294
    295         Infobit sib = _manager.createInfobit(name, _defaultAcl);
    296
    297         Set keywords = new HashSet();
    298         _manager.createScript(sib, "Version 1.1", tmpl, links, keywords);
    299
    300         return sib;
    301     }
    302
    303
    304     /***
    305      * Drives a test consisting in the export of the specified set of infobits.
    306      * The test is validated by comparing the resulting XML document to a
    307      * particular pattern (thereby ignoring leading and trailing whitespace and
    308      * empty lines).
    309      *
    310      * @param tag            Some tag added to diagnositc messages
    311      * @param infobits       The infobits to export. Collection of {@link
    312      *      Infobit infobits}.
    313      * @param expected       The XML docuement expected as as external
    314      *      representation of <code>infobits</code>.
    315      * @exception Exception  Description of Exception
    316      */
    317     private void performExportTest(String tag,
    318         List infobits, InputStream expected)
    319          throws Exception {
    320
    321         StringWriter sw = new StringWriter();
    322         _exporter.export(infobits, sw);
    323         sw.close();
    324         String doc = sw.toString();
    325
    326         //  DEBUG
    327         System.out.println(tag);
    328         System.out.println(doc);
    329
    330         Reader srd = new StringReader(doc);
    331         BufferedReader brd = new BufferedReader(srd);
    332
    333         Reader sre = new InputStreamReader(expected);
    334         BufferedReader bre = new BufferedReader(sre);
    335         checkDocument(brd, bre);
    336     }
    337 }

This page was automatically generated by Maven