115 lines
4.5 KiB
Python
115 lines
4.5 KiB
Python
#-******************************************************************************
|
|
#
|
|
# Copyright (c) 2012,
|
|
# Sony Pictures Imageworks Inc. and
|
|
# Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
|
|
#
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above
|
|
# copyright notice, this list of conditions and the following disclaimer
|
|
# in the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# * Neither the name of Sony Pictures Imageworks, nor
|
|
# Industrial Light & Magic, nor the names of their contributors may be used
|
|
# to endorse or promote products derived from this software without specific
|
|
# prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
#-******************************************************************************
|
|
|
|
import unittest
|
|
from imath import *
|
|
from alembic.Abc import *
|
|
from alembic.AbcCoreAbstract import *
|
|
from alembic.AbcCollection import *
|
|
|
|
class CollectionTest(unittest.TestCase):
|
|
def testCollectionExport(self):
|
|
"""test OCollecions Python bindings"""
|
|
|
|
archive = OArchive("Collection.abc")
|
|
test = OObject(archive.getTop(), "test")
|
|
|
|
ts = TimeSampling(1/24.0, 2.0)
|
|
md = MetaData()
|
|
md.set("coupe", "de ville")
|
|
|
|
group = OCollections(test, "Group1")
|
|
group2 = OCollections(test, "Group2")
|
|
|
|
strVec = StringArray(3)
|
|
strVec[0] = "/a/b/c/1"
|
|
strVec[1] = "/a/b/c/2"
|
|
strVec[2] = "/a/b/c/3"
|
|
|
|
prop = OStringArrayProperty()
|
|
|
|
# this should throw an execption b/c collection name is bad
|
|
self.assertRaises(RuntimeError, group2.getSchema().createCollection, "/slashy")
|
|
|
|
prop = group.getSchema().createCollection("prop")
|
|
prop.setValue(strVec)
|
|
|
|
self.assertEquals(group.getSchema().getNumCollections(), 1)
|
|
|
|
# TODO passing in time sampling here causes a segfault, most likely because
|
|
# of how createCollection currently takes an Argument &, see #274
|
|
cool = group.getSchema().createCollection("cool", md)
|
|
cool.setTimeSampling(ts)
|
|
|
|
self.assertEquals(
|
|
group.getSchema().getCollection(1).getMetaData().get("coupe"),
|
|
"de ville" )
|
|
|
|
strVec = StringArray(2)
|
|
strVec[0] = "/foo"
|
|
strVec[1] = "/bar"
|
|
group.getSchema().getCollection(1).setValue(strVec)
|
|
|
|
strVec = StringArray(1)
|
|
strVec[0] = "potato"
|
|
group.getSchema().getCollection("cool").setValue(strVec)
|
|
|
|
def testCollectionImport(self):
|
|
"""test ICollections Python bindings"""
|
|
|
|
archive = IArchive("Collection.abc")
|
|
|
|
test = IObject(archive.getTop(), "test")
|
|
group = ICollections(test, "Group1")
|
|
group2 = ICollections(test, "Group2")
|
|
|
|
self.assertEqual(group.getSchema().getNumCollections(), 2)
|
|
self.assertEqual(group2.getSchema().getNumCollections(), 0)
|
|
|
|
self.assertFalse(group2.getSchema().getCollection(45).valid())
|
|
self.assertFalse(group2.getSchema().getCollection("potato").valid())
|
|
|
|
prop = group.getSchema().getCollection("prop")
|
|
prop2 = group.getSchema().getCollection("cool")
|
|
self.assertEqual(prop2.getMetaData().get("coupe"), "de ville")
|
|
self.assertEqual(archive.getTimeSampling(1), prop2.getTimeSampling())
|
|
self.assertEqual(prop2.getNumSamples(), 2)
|
|
samp = prop.getValue(0)
|
|
self.assertEqual(len(samp), 3)
|
|
self.assertEqual(samp[0], "/a/b/c/1")
|
|
self.assertEqual(samp[1], "/a/b/c/2")
|
|
self.assertEqual(samp[2], "/a/b/c/3")
|