From aab9ba0ab8cb1c44a15ca06c5efe1408d8b507d9 Mon Sep 17 00:00:00 2001
From: ribeaudc <ribeaudc>
Date: Mon, 5 Nov 2007 12:43:32 +0000
Subject: [PATCH] change: - finalyzing 'ChannelListTest'

SVN: 2379
---
 .../ch/systemsx/cisd/bds/hcs/ChannelList.java | 21 +++++++---
 .../cisd/bds/hcs/ChannelListTest.java         | 41 ++++++++++++++++++-
 2 files changed, 55 insertions(+), 7 deletions(-)

diff --git a/bds/source/java/ch/systemsx/cisd/bds/hcs/ChannelList.java b/bds/source/java/ch/systemsx/cisd/bds/hcs/ChannelList.java
index e91ce72eeda..b800ae55518 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/hcs/ChannelList.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/hcs/ChannelList.java
@@ -17,8 +17,8 @@
 package ch.systemsx.cisd.bds.hcs;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 
 import ch.systemsx.cisd.bds.DataStructureException;
@@ -31,7 +31,7 @@ import ch.systemsx.cisd.bds.storage.INode;
  * 
  * @author Christian Ribeaud
  */
-public final class ChannelList implements IStorable
+public final class ChannelList implements IStorable, Iterable<Channel>
 {
     static final String NUMBER_OF_CHANNELS = "number_of_channels";
 
@@ -66,10 +66,10 @@ public final class ChannelList implements IStorable
         return new ChannelList(channels);
     }
 
-    /** Returns an unmodifiable list of <code>Channel</code>. */
-    public final List<Channel> getChannels()
+    /** Returns the number of channels. */
+    public final int getChannelCount()
     {
-        return Collections.unmodifiableList(channels);
+        return channels.size();
     }
 
     //
@@ -78,10 +78,19 @@ public final class ChannelList implements IStorable
 
     public final void saveTo(final IDirectory directory)
     {
-        directory.addKeyValuePair(NUMBER_OF_CHANNELS, channels.size() + "");
+        directory.addKeyValuePair(NUMBER_OF_CHANNELS, getChannelCount() + "");
         for (Channel channel : channels)
         {
             channel.saveTo(directory);
         }
     }
+
+    //
+    // Iterable
+    //
+
+    public final Iterator<Channel> iterator()
+    {
+        return channels.iterator();
+    }
 }
diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/hcs/ChannelListTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/hcs/ChannelListTest.java
index 563da064929..5ab934b08cf 100644
--- a/bds/sourceTest/java/ch/systemsx/cisd/bds/hcs/ChannelListTest.java
+++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/hcs/ChannelListTest.java
@@ -16,7 +16,9 @@
 
 package ch.systemsx.cisd.bds.hcs;
 
+import java.io.File;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.testng.annotations.Test;
@@ -43,6 +45,20 @@ public final class ChannelListTest extends AbstractFileSystemTestCase
         return new ChannelList(list);
     }
 
+    private final static void checkFile(final File file)
+    {
+        assertTrue(file.getName().equals(ChannelList.NUMBER_OF_CHANNELS) || file.getName().startsWith(Channel.CHANNEL));
+    }
+
+    private final static void checkChannelFile(final File channelFile)
+    {
+        assertNotNull(channelFile);
+        assertTrue(channelFile.isDirectory());
+        final File[] files = channelFile.listFiles();
+        assertEquals(1, files.length);
+        assertEquals(files[0].getName(), Channel.WAVELENGTH);
+    }
+
     @Test
     public final void testConstructor()
     {
@@ -78,6 +94,29 @@ public final class ChannelListTest extends AbstractFileSystemTestCase
         final ChannelList channelList = createChannelList();
         final IDirectory dir = NodeFactory.createDirectoryNode(workingDirectory);
         channelList.saveTo(dir);
-        
+        final File[] files = workingDirectory.listFiles();
+        assertEquals(3, files.length);
+        for (File file : files)
+        {
+            checkFile(file);
+            if (file.getName().startsWith(Channel.CHANNEL))
+            {
+                checkChannelFile(file);
+            }
+        }
+    }
+
+    @Test(dependsOnMethods = "testSaveTo")
+    public final void testLoadFrom()
+    {
+        testSaveTo();
+        final IDirectory dir = NodeFactory.createDirectoryNode(workingDirectory);
+        final ChannelList channelList = ChannelList.loadFrom(dir);
+        assertEquals(2, channelList.getChannelCount());
+        final Iterator<Channel> iterator = channelList.iterator();
+        Channel channel = iterator.next();
+        assertEquals(123, channel.getWavelength());
+        channel = iterator.next();
+        assertEquals(456, channel.getWavelength());
     }
 }
\ No newline at end of file
-- 
GitLab