Skip to content

Commit a00f09f

Browse files
committed
move test_select_buffers_json
Signed-off-by: Teo Koon Peng <[email protected]>
1 parent 37ee9b9 commit a00f09f

File tree

2 files changed

+42
-128
lines changed

2 files changed

+42
-128
lines changed

src/buffer/buffer_map.rs

-62
Original file line numberDiff line numberDiff line change
@@ -423,68 +423,6 @@ mod tests {
423423
assert!(context.no_unhandled_errors());
424424
}
425425

426-
#[test]
427-
fn test_select_buffers_json() {
428-
let mut context = TestingContext::minimal_plugins();
429-
430-
let workflow = context.spawn_io_workflow(|scope, builder| {
431-
let buffer_i64 =
432-
JsonBuffer::from(builder.create_buffer::<i64>(BufferSettings::default()));
433-
let buffer_f64 =
434-
JsonBuffer::from(builder.create_buffer::<f64>(BufferSettings::default()));
435-
let buffer_string =
436-
JsonBuffer::from(builder.create_buffer::<String>(BufferSettings::default()));
437-
let buffer_generic =
438-
JsonBuffer::from(builder.create_buffer::<String>(BufferSettings::default()));
439-
let buffer_any =
440-
JsonBuffer::from(builder.create_buffer::<i64>(BufferSettings::default()));
441-
442-
let buffers = TestJoinedValue::select_buffers(
443-
buffer_i64.downcast_for_message().unwrap(),
444-
buffer_f64.downcast_for_message().unwrap(),
445-
buffer_string.downcast_for_message().unwrap(),
446-
buffer_generic.downcast_for_message().unwrap(),
447-
buffer_any.downcast_buffer().unwrap(),
448-
);
449-
450-
scope.input.chain(builder).fork_unzip((
451-
|chain: Chain<_>| chain.connect(buffers.integer.input_slot()),
452-
|chain: Chain<_>| chain.connect(buffers.float.input_slot()),
453-
|chain: Chain<_>| chain.connect(buffers.string.input_slot()),
454-
|chain: Chain<_>| chain.connect(buffers.generic.input_slot()),
455-
|chain: Chain<_>| {
456-
chain.connect(buffers.any.downcast_for_message().unwrap().input_slot())
457-
},
458-
));
459-
460-
builder.join(buffers).connect(scope.terminate);
461-
});
462-
463-
let mut promise = context.command(|commands| {
464-
commands
465-
.request(
466-
(
467-
5_i64,
468-
3.14_f64,
469-
"hello".to_string(),
470-
"world".to_string(),
471-
42_i64,
472-
),
473-
workflow,
474-
)
475-
.take_response()
476-
});
477-
478-
context.run_with_conditions(&mut promise, Duration::from_secs(2));
479-
let value: TestJoinedValue<String> = promise.take().available().unwrap();
480-
assert_eq!(value.integer, 5);
481-
assert_eq!(value.float, 3.14);
482-
assert_eq!(value.string, "hello");
483-
assert_eq!(value.generic, "world");
484-
assert_eq!(*value.any.downcast::<i64>().unwrap(), 42);
485-
assert!(context.no_unhandled_errors());
486-
}
487-
488426
#[derive(Clone, JoinedValue)]
489427
#[buffers(buffer_struct_name = FooBuffers)]
490428
struct TestDeriveWithConfig {}

src/buffer/json_buffer.rs

+42-66
Original file line numberDiff line numberDiff line change
@@ -1353,78 +1353,15 @@ mod tests {
13531353
assert!(context.no_unhandled_errors());
13541354
}
13551355

1356-
#[derive(Clone)]
1356+
#[derive(Clone, JoinedValue)]
1357+
#[buffers(buffer_struct_name = TestJoinedValueJsonBuffers)]
13571358
struct TestJoinedValueJson {
13581359
integer: i64,
13591360
float: f64,
1361+
#[buffers(buffer_type = JsonBuffer)]
13601362
json: JsonMessage,
13611363
}
13621364

1363-
#[derive(Clone)]
1364-
struct TestJoinedValueJsonBuffers {
1365-
integer: Buffer<i64>,
1366-
float: Buffer<f64>,
1367-
json: JsonBuffer,
1368-
}
1369-
1370-
impl JoinedValue for TestJoinedValueJson {
1371-
type Buffers = TestJoinedValueJsonBuffers;
1372-
}
1373-
1374-
impl BufferMapLayout for TestJoinedValueJsonBuffers {
1375-
fn buffer_list(&self) -> smallvec::SmallVec<[AnyBuffer; 8]> {
1376-
use smallvec::smallvec;
1377-
smallvec![
1378-
self.integer.as_any_buffer(),
1379-
self.float.as_any_buffer(),
1380-
self.json.as_any_buffer(),
1381-
]
1382-
}
1383-
1384-
fn try_from_buffer_map(buffers: &BufferMap) -> Result<Self, IncompatibleLayout> {
1385-
let mut compatibility = IncompatibleLayout::default();
1386-
let integer = compatibility.require_message_type::<i64>("integer", buffers);
1387-
let float = compatibility.require_message_type::<f64>("float", buffers);
1388-
let json = compatibility.require_buffer_type::<JsonBuffer>("json", buffers);
1389-
1390-
let Ok(integer) = integer else {
1391-
return Err(compatibility);
1392-
};
1393-
let Ok(float) = float else {
1394-
return Err(compatibility);
1395-
};
1396-
let Ok(json) = json else {
1397-
return Err(compatibility);
1398-
};
1399-
1400-
Ok(Self {
1401-
integer,
1402-
float,
1403-
json,
1404-
})
1405-
}
1406-
}
1407-
1408-
impl crate::Joined for TestJoinedValueJsonBuffers {
1409-
type Item = TestJoinedValueJson;
1410-
1411-
fn pull(
1412-
&self,
1413-
session: Entity,
1414-
world: &mut World,
1415-
) -> Result<Self::Item, crate::OperationError> {
1416-
let integer = self.integer.pull(session, world)?;
1417-
let float = self.float.pull(session, world)?;
1418-
let json = self.json.pull(session, world)?;
1419-
1420-
Ok(TestJoinedValueJson {
1421-
integer,
1422-
float,
1423-
json,
1424-
})
1425-
}
1426-
}
1427-
14281365
#[test]
14291366
fn test_try_join_json() {
14301367
let mut context = TestingContext::minimal_plugins();
@@ -1502,4 +1439,43 @@ mod tests {
15021439
let expected_json = TestMessage::new();
15031440
assert_eq!(deserialized_json, expected_json);
15041441
}
1442+
1443+
#[test]
1444+
fn test_select_buffers_json() {
1445+
let mut context = TestingContext::minimal_plugins();
1446+
1447+
let workflow = context.spawn_io_workflow(|scope, builder| {
1448+
let buffer_integer = builder.create_buffer::<i64>(BufferSettings::default());
1449+
let buffer_float = builder.create_buffer::<f64>(BufferSettings::default());
1450+
let buffer_json =
1451+
JsonBuffer::from(builder.create_buffer::<TestMessage>(BufferSettings::default()));
1452+
1453+
let buffers =
1454+
TestJoinedValueJson::select_buffers(buffer_integer, buffer_float, buffer_json);
1455+
1456+
scope.input.chain(builder).fork_unzip((
1457+
|chain: Chain<_>| chain.connect(buffers.integer.input_slot()),
1458+
|chain: Chain<_>| chain.connect(buffers.float.input_slot()),
1459+
|chain: Chain<_>| {
1460+
chain.connect(buffers.json.downcast_for_message().unwrap().input_slot())
1461+
},
1462+
));
1463+
1464+
builder.join(buffers).connect(scope.terminate);
1465+
});
1466+
1467+
let mut promise = context.command(|commands| {
1468+
commands
1469+
.request((5_i64, 3.14_f64, TestMessage::new()), workflow)
1470+
.take_response()
1471+
});
1472+
1473+
context.run_with_conditions(&mut promise, Duration::from_secs(2));
1474+
let value: TestJoinedValueJson = promise.take().available().unwrap();
1475+
assert_eq!(value.integer, 5);
1476+
assert_eq!(value.float, 3.14);
1477+
let deserialized_json: TestMessage = serde_json::from_value(value.json).unwrap();
1478+
let expected_json = TestMessage::new();
1479+
assert_eq!(deserialized_json, expected_json);
1480+
}
15051481
}

0 commit comments

Comments
 (0)