# -*- coding: utf-8 -*-
import unittest

import media.metadata.process as md

class TestMetadataDef(unittest.TestCase):
    def test_simple(self):

        with md.metadata('MDATA_TESTING') as t:
            t.optional(True)
            t.depends('ONE','TWO')
            t.default('unknown')
            t.translate(lambda kw: kw['ONE'] + kw['TWO'])

        h = { 'ONE' : "testing", 'TWO' : "123" }
        result = md.global_reader.read('test_path',h)
        self.assertTrue( 'MDATA_TESTING' in result )
        self.assertEqual( result['MDATA_TESTING'], 'testing123' )
        h1 = { 'ONE' : 'big testing', 'two' : 'nothing' }
        result1 = md.global_reader.read('bs path', h1)
        self.assertEqual( result1['MDATA_TESTING'], 'unknown' )

    def test_topo(self):
        with md.metadata('MDATA_TESTING') as t:
            t.depends('shen','sheni')
            t.default('megitzda')
            t.translate(lambda kw: kw['shen'] + kw['sheni'])

        with md.metadata('shen') as t:
            t.default('vaxo')

        with md.metadata('sheni') as t:
            t.default('gio')

        with md.metadata('vaxo') as t:
            t.depends('shevetsi')

        v = md.global_reader.read('bs mang', {})
        self.assertEqual(v['MDATA_TESTING'], 'vaxogio')
        self.assertTrue( 'vaxo' not in v )

        md.global_reader.clear()

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