示例#1
0
 public void TestEmptyRegistry()
 {
     POIFSReaderRegistry registry = new POIFSReaderRegistry();
     for (int i = 0; i < paths.Length; i++)
     {
         for (int j = 0; j < names.Length; j++)
         {
             IEnumerator listeners = registry.GetListeners(paths[i], names[j]);
             Assert.IsTrue(!listeners.MoveNext());
         }
     }
 }
示例#2
0
        public void TestMixedRegistrationOperations()
        {
            POIFSReaderRegistry registry = new POIFSReaderRegistry();

            for (int i = 0; i < listeners.Length; i++)
            {
                for (int j = 0; j < paths.Length; j++)
                {
                    for (int k = 0; k < names.Length; k++)
                    {
                        if ((i != j) && (j != k))
                        {
                            registry.RegisterListener(listeners[i], paths[j], names[k]);
                        }
                    }
                }
            }
            for (int k = 0; k < paths.Length; k++)
            {
                for (int n = 0; n < names.Length; n++)
                {
                    IEnumerator listeners = registry.GetListeners(paths[k], names[n]);

                    if (k == n)
                        Assert.IsTrue(!listeners.MoveNext());
                    else
                    {
                        ArrayList registeredListeners = new ArrayList();

                        while (listeners.MoveNext())
                        {
                            registeredListeners.Add(listeners.Current);
                        }
                        Assert.AreEqual(this.listeners.Length - 1, registeredListeners.Count);
                        for (int j = 0; j < this.listeners.Length; j++)
                        {
                            if (j == k)
                                Assert.IsTrue(!registeredListeners.Contains(this.listeners[j]));
                            else
                                Assert.IsTrue(registeredListeners.Contains(this.listeners[j]));
                        }

                    }
                }
            }
            for (int j = 0; j < listeners.Length; j++)
                registry.RegisterListener(listeners[j]);

            for (int k = 0; k < paths.Length; k++)
            {
                for (int n = 0; n < names.Length; n++)
                {
                    IEnumerator listeners = registry.GetListeners(paths[k], names[n]);

                    ArrayList registeredListeners = new ArrayList();

                    while (listeners.MoveNext())
                    {
                        registeredListeners.Add(listeners.Current);
                    }

                    Assert.AreEqual(this.listeners.Length, registeredListeners.Count);

                    for (int j = 0; j < this.listeners.Length; j++)
                    {
                        Assert.IsTrue(registeredListeners.Contains(this.listeners[j]));
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Processes the properties.
        /// </summary>
        /// <param name="small_blocks">The small_blocks.</param>
        /// <param name="big_blocks">The big_blocks.</param>
        /// <param name="properties">The properties.</param>
        /// <param name="path">The path.</param>
        /// <returns></returns>
        private List <DocumentDescriptor> ProcessProperties(BlockList small_blocks,
                                                            BlockList big_blocks,
                                                            IEnumerator properties,
                                                            POIFSDocumentPath path)
        {
            List <DocumentDescriptor> documents =
                new List <DocumentDescriptor>();

            while (properties.MoveNext())
            {
                Property property = (Property)properties.Current;
                String   name     = property.Name;

                if (property.IsDirectory)
                {
                    POIFSDocumentPath new_path = new POIFSDocumentPath(path,
                                                                       new String[]
                    {
                        name
                    });

                    ProcessProperties(
                        small_blocks, big_blocks,
                        ((DirectoryProperty)property).Children, new_path);
                }
                else
                {
                    int            startBlock = property.StartBlock;
                    IEnumerator    listeners  = registry.GetListeners(path, name);
                    OPOIFSDocument document   = null;
                    if (listeners.MoveNext())
                    {
                        listeners.Reset();
                        int size = property.Size;


                        if (property.ShouldUseSmallBlocks)
                        {
                            document =
                                new OPOIFSDocument(name, small_blocks
                                                   .FetchBlocks(startBlock, -1), size);
                        }
                        else
                        {
                            document =
                                new OPOIFSDocument(name, big_blocks
                                                   .FetchBlocks(startBlock, -1), size);
                        }
                        //POIFSReaderListener listener =
                        //        (POIFSReaderListener)listeners.Current;
                        //listener.ProcessPOIFSReaderEvent(
                        //        new POIFSReaderEvent(
                        //            new DocumentInputStream(document), path,
                        //            name));
                        while (listeners.MoveNext())
                        {
                            POIFSReaderListener listener =
                                (POIFSReaderListener)listeners.Current;
                            listener.ProcessPOIFSReaderEvent(
                                new POIFSReaderEvent(
                                    new DocumentInputStream(document), path,
                                    name));
                        }
                    }
                    else
                    {
                        // consume the document's data and discard it
                        if (property.ShouldUseSmallBlocks)
                        {
                            small_blocks.FetchBlocks(startBlock, -1);
                        }
                        else
                        {
                            big_blocks.FetchBlocks(startBlock, -1);
                        }
                        //documents.Add(
                        //        new DocumentDescriptor(path, name));
                        //fire event
                        //OnStreamReaded(new POIFSReaderEventArgs(name, path, document));
                    }
                }
            }
            return(documents);
        }