@@ -1067,3 +1067,46 @@ def test_recv_nowait_default(self):
1067
1067
self .assertEqual (obj4 , b'spam' )
1068
1068
self .assertEqual (obj5 , b'eggs' )
1069
1069
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