configurationengine/source/cone/storage/tests/unittest_metadata.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/cone/storage/tests/unittest_metadata.py	Thu Mar 11 17:04:37 2010 +0200
@@ -0,0 +1,153 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+"""
+Test the CPF metadata file parsing routines
+"""
+import os, sys, unittest
+try:
+    from cElementTree import ElementTree
+except ImportError:
+    try:    
+        from elementtree import ElementTree
+    except ImportError:
+        try:
+            from xml.etree import cElementTree as ElementTree
+        except ImportError:
+            from xml.etree import ElementTree
+
+import __init__
+
+from cone.public import utils, exceptions, api
+from cone.storage import metadata, stringstorage
+ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
+emptytestdata  = '<?xml version="1.0" encoding="ASCII"?>'\
+'<metadata xmlns="http://www.nokia.com/xml/ns/confml-core/metadata-2.0"/>'
+
+
+testdata  = \
+'<metadata xmlns="http://www.nokia.com/xml/ns/confml-core/metadata-2.0">'\
+'  <property name="cpf.name" value="test"/>'\
+'  <property name="cpf.description" value="just testing"/>'\
+'  <property name="cpf.viewId" value="Sample View"/>'\
+'  <property name="cpf.rootFile" value="root.confml"/>'\
+'  <property name="cpf.dataFile"/>'\
+'  <property name="cpf.author"/>'\
+'  <property name="cpf.version"/>'\
+'  <property name="cpf.product"/>'\
+'  <property name="cpf.customer"/>'\
+'  <property name="cpf.platform"/>'\
+'  <property name="cpf.release"/>'\
+'  <property name="cpf.date"/>'\
+'  <property name="cpf.owner"/>'\
+'</metadata>'\
+
+class TestMetadataReader(unittest.TestCase):
+    def setUp(self):
+        pass
+    
+    def test_create_meta_fromstring(self):
+        m = metadata.MetadataReader().fromstring(testdata)
+        self.assertTrue(m)
+        
+    def test_create_meta_fromstring(self):
+        m = metadata.MetadataReader().fromstring(testdata)
+        self.assertTrue(m.data.has_key('cpf.name'))
+        self.assertTrue(m.data.has_key('cpf.description'))
+        self.assertTrue(m.data.has_key('cpf.viewId'))
+        self.assertTrue(m.data.has_key('cpf.rootFile'))
+        self.assertEquals(m.data['cpf.name'], 'test')
+        self.assertEquals(m.data['cpf.description'], 'just testing')
+        self.assertEquals(m.data['cpf.viewId'], 'Sample View')
+        self.assertEquals(m.data['cpf.rootFile'], 'root.confml')
+
+    def test_str_to_meta_and_back(self):
+        meta = metadata.MetadataReader().fromstring(testdata)
+        str = metadata.MetadataWriter().tostring(meta,False)
+        self.assertTrue(str.find('cpf.name'))
+        
+    def test_get_property(self):
+        etree = ElementTree.fromstring('<property name="test" value="test"/>')
+        (key,value) = metadata.MetadataReader().get_property(etree)
+        self.assertEquals(key,'test')
+        self.assertEquals(value,'test')
+        
+    def test_get_property_with_only_key(self):
+        etree = ElementTree.fromstring('<property name="test"/>')
+        (key,value) = metadata.MetadataReader().get_property(etree)
+        self.assertEquals(key,'test')
+        self.assertEquals(value,'')
+
+class TestMetadataWriter(unittest.TestCase):
+    def setUp(self):
+        pass
+
+    def test_metadata_tostring(self):
+        meta = metadata.Metadata()
+        str = metadata.MetadataWriter().tostring(meta)
+        self.assertTrue(str,emptytestdata)
+
+    def test_metadata_with_values_tostring(self):
+        meta = metadata.Metadata()
+        meta.data['cpf.name'] = 'testing ss'
+        meta.data['cpf.description'] = 'foo faa'
+        str = metadata.MetadataWriter().tostring(meta)
+        self.assertTrue(str,'<metadata xmlns="http://www.nokia.com/xml/ns/confml-core/metadata-2.0"><property name="cpf.name" value="testing ss" /><property name="cpf.description" value="foo faa" /></metadata>')
+
+    def test_metadata_with_values_to_resource(self):
+        meta = metadata.Metadata()
+        meta.data['cpf.name'] = 'testing ss'
+        meta.data['cpf.description'] = 'foo faa'
+        storage = stringstorage.StringStorage("")
+        res = storage.open_resource(".metadata","w")
+        metadata.MetadataWriter().toresource(meta,res)
+        self.assertTrue(res.getvalue(),'<metadata xmlns="http://www.nokia.com/xml/ns/confml-core/metadata-2.0"><property name="cpf.name" value="testing ss" /><property name="cpf.description" value="foo faa" /></metadata>')
+
+    def test_metadata_from_meta_to_str_and_back(self):
+        meta = metadata.Metadata()
+        meta.data['cpf.name'] = 'testing ss'
+        meta.data['cpf.description'] = 'foo faa'
+        str = metadata.MetadataWriter().tostring(meta)
+        meta2 = metadata.MetadataReader().fromstring(str)
+        self.assertEqual(meta.data,meta2.data)
+
+    def test_incorrect_class_fails(self):
+        try:
+            class dummy:
+                pass 
+            str = metadata.MetadataWriter().tostring(dummy())
+            self.fail("Writing dummy class succeeds!")
+        except exceptions.IncorrectClassError,e:
+            pass
+        
+        
+    def test_set_property(self):
+        elem = ElementTree.Element('property')
+        prop = metadata.MetadataWriter().set_property(elem,'test','foof')
+        self.assertTrue(prop.get('name'),'test')
+        self.assertTrue(prop.get('value'),'foof')
+
+    def test_set_property_with_only_key(self):
+        elem = ElementTree.Element('property')
+        prop = metadata.MetadataWriter().set_property(elem,'test','')
+        self.assertEquals(prop.get('name'),'test')
+        self.assertEquals(prop.get('value'),None)
+
+
+if __name__ == '__main__':
+    unittest.main()
+