import unittest
import weakref
import gc
from StringIO import StringIO

import pydertron

class PydertronTests(unittest.TestCase):
    def testNullFilesystem(self):
        stderr = StringIO()
        sandbox = pydertron.JsSandbox(pydertron.NullFileSystem())
        sandbox.set_globals()
        sandbox.run_script("require('hi');", stderr=stderr)
        self.assertEqual(stderr.getvalue(),
                         'Traceback (most recent call last):\n'
                         '  File "<string>", line 1, in <module>\n'
                         'Module not found: hi\n')
        sandbox.finish()

    def testGC(self):
        sandbox = pydertron.JsSandbox(pydertron.NullFileSystem())
        wrt = weakref.ref(sandbox.rt)
        del sandbox
        gc.collect()
        self.assertEqual(wrt(), None)

    def testGC2(self):
        sandbox = pydertron.JsSandbox(pydertron.NullFileSystem())
        sandbox.set_globals()
        sandbox.run_script("var a = 1;")
        wrt = weakref.ref(sandbox.rt)
        sandbox.finish()
        del sandbox
        gc.collect()
        self.assertEqual(wrt(), None)

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