Exemplo n.º 1
0
class TestOptionsReader(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

        self.reader = OptionsReader()

        etree.register_namespace('mc', 'http://pymontecarlo.sf.net')
        source = BytesIO(b'<mc:options xmlns:mc="http://pymontecarlo.sf.net" name="Test" uuid="51d62e0261f2449eb41a74e4cb4501e0" version="6"><programs><program>dummy</program></programs><beam><mc:pencilBeam aperture="0.0" energy="1234.0" particle="electron"><origin x="0.0" y="0.0" z="1.0" /><direction u="0.0" v="0.0" w="-1.0" /></mc:pencilBeam></beam><geometry><mc:substrate rotation="0.0" tilt="0.0"><materials><mc:material _index="1" density="19300.0" name="Gold"><composition><element weightFraction="1.0" z="79" /></composition></mc:material></materials><body material="1" /></mc:substrate></geometry><detectors><mc:backscatteredElectronEnergyDetector _key="bse"><channels>1000</channels><limits lower="0.0" upper="1234.0" /></mc:backscatteredElectronEnergyDetector></detectors><limits><mc:showersLimit showers="5678" /></limits><models><mc:model name="Rutherford" type="elastic cross section" /></models></mc:options>')
        self.element = etree.parse(source).getroot()

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def testcan_parse(self):
        self.assertTrue(self.reader.can_parse(self.element))

    def testparse(self):
        self.reader.parse(self.element)
        obj = self.reader.get()

        self.assertEqual("Test", obj.name)
        self.assertEqual('51d62e0261f2449eb41a74e4cb4501e0', obj.uuid)

        self.assertEqual(1, len(obj.programs))
        self.assertEqual('dummy', list(obj.programs.aliases())[0])

        self.assertAlmostEqual(1234, obj.beam.energy_eV, 4)

        self.assertEqual(1, len(obj.detectors))
        det = obj.detectors['bse']
        self.assertAlmostEqual(0, det.limits_eV[0], 4)
        self.assertAlmostEqual(1234, det.limits_eV[1], 4)
        self.assertEqual(1000, det.channels)

        self.assertEqual(1, len(obj.limits))
        limits = list(obj.limits.iterclass(ShowersLimit))
        self.assertEqual(1, len(limits))
        self.assertEqual(5678, limits[0].showers)

        self.assertEqual(1, len(obj.models))
        models = list(obj.models.iterclass(ELASTIC_CROSS_SECTION))
        self.assertEqual(1, len(models))
        self.assertEqual(ELASTIC_CROSS_SECTION.rutherford, models[0])