@@ -1067,3 +1067,46 @@ def test_recv_nowait_default(self):
10671067 self .assertEqual (obj4 , b'spam' )
10681068 self .assertEqual (obj5 , b'eggs' )
10691069 self .assertIs (obj6 , default )
1070+
1071+ def test_send_buffer (self ):
1072+ buf = bytearray (b'spamspamspam' )
1073+ obj = None
1074+ rch , sch = interpreters .create_channel ()
1075+
1076+ def f ():
1077+ nonlocal obj
1078+ while True :
1079+ try :
1080+ obj = rch .recv ()
1081+ break
1082+ except interpreters .ChannelEmptyError :
1083+ time .sleep (0.1 )
1084+ t = threading .Thread (target = f )
1085+ t .start ()
1086+
1087+ sch .send_buffer (buf )
1088+ t .join ()
1089+
1090+ self .assertIsNot (obj , buf )
1091+ self .assertIsInstance (obj , memoryview )
1092+ self .assertEqual (obj , buf )
1093+
1094+ buf [4 :8 ] = b'eggs'
1095+ self .assertEqual (obj , buf )
1096+ obj [4 :8 ] = b'ham.'
1097+ self .assertEqual (obj , buf )
1098+
1099+ def test_send_buffer_nowait (self ):
1100+ buf = bytearray (b'spamspamspam' )
1101+ rch , sch = interpreters .create_channel ()
1102+ sch .send_buffer_nowait (buf )
1103+ obj = rch .recv ()
1104+
1105+ self .assertIsNot (obj , buf )
1106+ self .assertIsInstance (obj , memoryview )
1107+ self .assertEqual (obj , buf )
1108+
1109+ buf [4 :8 ] = b'eggs'
1110+ self .assertEqual (obj , buf )
1111+ obj [4 :8 ] = b'ham.'
1112+ self .assertEqual (obj , buf )
0 commit comments