3232from __future__ import print_function
3333
3434# Standard library
35+ from javaobj .utils import bytes_char
36+ import javaobj .v2 as javaobj
3537import logging
3638import os
3739import subprocess
3840import sys
3941import unittest
4042import struct
4143
42- from collections import OrderedDict
4344from io import BytesIO
4445
4546# Prepare Python path to import javaobj
4647sys .path .insert (0 , os .path .abspath (os .path .dirname (os .getcwd ())))
4748
4849# Local
49- import javaobj .v2 as javaobj
50- from javaobj .utils import bytes_char
5150
5251# ------------------------------------------------------------------------------
5352
6160# ------------------------------------------------------------------------------
6261
6362# Custom writeObject parsing classes
63+
64+
6465class CustomWriterInstance (javaobj .beans .JavaInstance ):
6566 def __init__ (self ):
6667 javaobj .beans .JavaInstance .__init__ (self )
@@ -74,14 +75,16 @@ def load_from_instance(self):
7475 if self .classdesc and self .classdesc in self .annotations :
7576 fields = ['int_not_in_fields' ] + self .classdesc .fields_names
7677 raw_data = self .annotations [self .classdesc ]
77- int_not_in_fields = struct .unpack ('>i' , BytesIO (raw_data [0 ].data ).read (4 ))[0 ]
78+ int_not_in_fields = struct .unpack (
79+ '>i' , BytesIO (raw_data [0 ].data ).read (4 ))[0 ]
7880 custom_obj = raw_data [1 ]
7981 values = [int_not_in_fields , custom_obj ]
80- self .field_data = OrderedDict (zip (fields , values ))
82+ self .field_data = dict (zip (fields , values ))
8183 return True
82-
84+
8385 return False
8486
87+
8588class RandomChildInstance (javaobj .beans .JavaInstance ):
8689 def load_from_instance (self ):
8790 """
@@ -92,20 +95,22 @@ def load_from_instance(self):
9295 if self .classdesc and self .classdesc in self .field_data :
9396 fields = self .classdesc .fields_names
9497 values = self .field_data [self .classdesc ].values ()
95- self .field_data = OrderedDict (zip (fields , values ))
98+ self .field_data = dict (zip (fields , values ))
9699 if self .classdesc .super_class and self .classdesc .super_class in self .annotations :
97100 super_class = self .annotations [self .classdesc .super_class ][0 ]
98- self .annotations = OrderedDict (
101+ self .annotations = dict (
99102 zip (super_class .fields_names , super_class .field_data ))
100103 return True
101104
102105 return False
103106
107+
104108class BaseTransformer (javaobj .transformers .ObjectTransformer ):
105109 """
106110 Creates a JavaInstance object with custom loading methods for the
107111 classes it can handle
108112 """
113+
109114 def __init__ (self , handled_classes = {}):
110115 self .instance = None
111116 self .HANDLED_CLASSES = handled_classes
@@ -123,14 +128,17 @@ def create_instance(self, classdesc):
123128
124129 return None
125130
131+
126132class RandomChildTransformer (BaseTransformer ):
127133 def __init__ (self ):
128134 super ().__init__ ({'RandomChild' : RandomChildInstance })
129135
136+
130137class CustomWriterTransformer (BaseTransformer ):
131138 def __init__ (self ):
132139 super ().__init__ ({'CustomWriter' : CustomWriterInstance })
133140
141+
134142class JavaRandomTransformer (BaseTransformer ):
135143 def __init__ (self ):
136144 super ().__init__ ()
@@ -537,33 +545,44 @@ def test_writeObject(self):
537545 """
538546
539547 ser = self .read_file ("testCustomWriteObject.ser" )
540- transformers = [CustomWriterTransformer (), RandomChildTransformer (), JavaRandomTransformer ()]
548+ transformers = [CustomWriterTransformer (
549+ ), RandomChildTransformer (), JavaRandomTransformer ()]
541550 pobj = javaobj .loads (ser , * transformers )
542551
543552 self .assertEqual (isinstance (pobj , CustomWriterInstance ), True )
544- self .assertEqual (isinstance (pobj .field_data ['custom_obj' ], RandomChildInstance ), True )
545-
553+ self .assertEqual (isinstance (
554+ pobj .field_data ['custom_obj' ], RandomChildInstance ), True )
555+
546556 parent_data = pobj .field_data
547557 child_data = parent_data ['custom_obj' ].field_data
548558 super_data = parent_data ['custom_obj' ].annotations
549- expected = OrderedDict ( {
559+ expected = {
550560 'int_not_in_fields' : 0 ,
551561 'custom_obj' : {
552562 'field_data' : {
553563 'doub' : 4.5 ,
554564 'num' : 1
555- } ,
565+ },
556566 'annotations' : {
557567 'haveNextNextGaussian' : False ,
558568 'nextNextGaussian' : 0.0 ,
559569 'seed' : 25214903879
560570 }
561571 }
562- })
572+ }
563573
564- self .assertEqual (expected ['int_not_in_fields' ], parent_data ['int_not_in_fields' ])
565- self .assertEqual (expected ['custom_obj' ]['field_data' ], child_data )
566- self .assertEqual (expected ['custom_obj' ]['annotations' ], super_data )
574+ self .assertEqual (expected ['int_not_in_fields' ],
575+ parent_data ['int_not_in_fields' ])
576+ self .assertEqual (expected ['custom_obj' ]
577+ ['field_data' ]['doub' ], child_data ['doub' ])
578+ self .assertEqual (expected ['custom_obj' ]
579+ ['field_data' ]['num' ], child_data ['num' ])
580+ self .assertEqual (expected ['custom_obj' ]['annotations' ]
581+ ['haveNextNextGaussian' ], super_data ['haveNextNextGaussian' ])
582+ self .assertEqual (expected ['custom_obj' ]['annotations' ]
583+ ['nextNextGaussian' ], super_data ['nextNextGaussian' ])
584+ self .assertEqual (expected ['custom_obj' ]
585+ ['annotations' ]['seed' ], super_data ['seed' ])
567586
568587# ------------------------------------------------------------------------------
569588
0 commit comments