aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/test/test_llmanifest.py
blob: f503cbedfb7ed1faadb04a524e5aebcf375d1dfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/python
# @file test_llmanifest.py
# @author Ryan Williams
# @brief Test cases for LLManifest library.
#
# Copyright (c) 2006-2007, Linden Research, Inc.
# 
# Second Life Viewer Source Code
# The source code in this file ("Source Code") is provided by Linden Lab
# to you under the terms of the GNU General Public License, version 2.0
# ("GPL"), unless you have obtained a separate licensing agreement
# ("Other License"), formally executed by you and Linden Lab.  Terms of
# the GPL can be found in doc/GPL-license.txt in this distribution, or
# online at http://secondlife.com/developers/opensource/gplv2
# 
# There are special exceptions to the terms and conditions of the GPL as
# it is applied to this Source Code. View the full text of the exception
# in the file doc/FLOSS-exception.txt in this software distribution, or
# online at http://secondlife.com/developers/opensource/flossexception
# 
# By copying, modifying or distributing this software, you acknowledge
# that you have read and understood your obligations described above,
# and agree to abide by those obligations.
# 
# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
# COMPLETENESS OR PERFORMANCE.

from indra import llmanifest
import os.path
import os
import unittest

class DemoManifest(llmanifest.LLManifest):
    def construct(self):
        super(DemoManifest, self).construct()
        if self.prefix("dir_1"):
            self.path("test_a")
            self.path(src="test_b", dst="test_dst_b")
            self.path("*.test")
            self.path("*.tex", "*.jpg")
            if self.prefix("nested", dst=""):
                self.path("deep")
                self.end_prefix()
            self.end_prefix("dir_1")


class Demo_ArchManifest(llmanifest.LLManifest):
        pass

class TestLLManifest(unittest.TestCase):
    mode='static'
    def setUp(self):
        self.m = llmanifest.LLManifest("src", "dst", {'grid':'default', 'platform':'darwin', 'version':(1,2,3,4)})

    def testproperwindowspath(self):
        self.assertEqual(llmanifest.proper_windows_path("C:\Program Files", "cygwin"),"/cygdrive/c/Program Files")
        self.assertEqual(llmanifest.proper_windows_path("C:\Program Files", "windows"), "C:\Program Files")
        self.assertEqual(llmanifest.proper_windows_path("/cygdrive/c/Program Files/NSIS", "windows"), "C:\Program Files\NSIS")
        self.assertEqual(llmanifest.proper_windows_path("/cygdrive/c/Program Files/NSIS", "cygwin"), "/cygdrive/c/Program Files/NSIS")

    def testpathancestors(self):
        self.assertEqual(["dir"], [p for p in llmanifest.path_ancestors("dir")])
        self.assertEqual(["dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub")])
        self.assertEqual(["dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub/")])
        self.assertEqual(["dir/sub/two", "dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub/two")])


    def testforplatform(self):
        self.assertEqual(llmanifest.LLManifest.for_platform('demo'), DemoManifest)
        def tmp_test():
            return llmanifest.LLManifest.for_platform('extant')
        self.assertRaises(KeyError, tmp_test)
        ExtantManifest = llmanifest.LLManifestRegistry('ExtantManifest', (llmanifest.LLManifest,), {})
        self.assertEqual(llmanifest.LLManifest.for_platform('extant'), ExtantManifest)
        self.assertEqual(llmanifest.LLManifest.for_platform('demo', 'Arch'), Demo_ArchManifest)


    def testprefix(self):
        self.assertEqual(self.m.get_src_prefix(), "src")
        self.assertEqual(self.m.get_dst_prefix(), "dst")
        self.m.prefix("level1")
        self.assertEqual(self.m.get_src_prefix(), "src/level1")
        self.assertEqual(self.m.get_dst_prefix(), "dst/level1")
        self.m.end_prefix()
        self.m.prefix(src="src", dst="dst")
        self.assertEqual(self.m.get_src_prefix(), "src/src")
        self.assertEqual(self.m.get_dst_prefix(), "dst/dst")
        self.m.end_prefix()

    def testendprefix(self):
        self.assertEqual(self.m.get_src_prefix(), "src")
        self.assertEqual(self.m.get_dst_prefix(), "dst")
        self.m.prefix("levela")
        self.m.end_prefix()
        self.assertEqual(self.m.get_src_prefix(), "src")
        self.assertEqual(self.m.get_dst_prefix(), "dst")
        self.m.prefix("level1")
        self.m.end_prefix("level1")
        self.assertEqual(self.m.get_src_prefix(), "src")
        self.assertEqual(self.m.get_dst_prefix(), "dst")
        self.m.prefix("level1")
        def tmp_test():
            self.m.end_prefix("mismatch")
        self.assertRaises(ValueError, tmp_test)

    def testruncommand(self):
        self.assertEqual("Hello\n", self.m.run_command("echo Hello"))
        def tmp_test():
            self.m.run_command("test_command_that_should_not_be_found")
        self.assertRaises(RuntimeError, tmp_test)

    def testpathof(self):
        self.assertEqual(self.m.src_path_of("a"), "src/a")
        self.assertEqual(self.m.dst_path_of("a"), "dst/a")
        self.m.prefix("tmp")
        self.assertEqual(self.m.src_path_of("b/c"), "src/tmp/b/c")
        self.assertEqual(self.m.dst_path_of("b/c"), "dst/tmp/b/c")

    def testcmakedirs(self):
        self.m.cmakedirs("test_dir_DELETE/nested/dir")
        self.assert_(os.path.exists("test_dir_DELETE/nested/dir"))
        self.assert_(os.path.isdir("test_dir_DELETE"))
        self.assert_(os.path.isdir("test_dir_DELETE/nested"))
        self.assert_(os.path.isdir("test_dir_DELETE/nested/dir"))
        os.removedirs("test_dir_DELETE/nested/dir")

if __name__ == '__main__':
    unittest.main()