| 2675 | |
| 2676 | #[test] |
| 2677 | fn test_decoder_error() { |
| 2678 | let schema = Arc::new(Schema::new(vec![Field::new_struct( |
| 2679 | "a", |
| 2680 | vec![Field::new("child", DataType::Int32, false)], |
| 2681 | true, |
| 2682 | )])); |
| 2683 | |
| 2684 | let mut decoder = ReaderBuilder::new(schema.clone()).build_decoder().unwrap(); |
| 2685 | let _ = decoder.decode(r#"{"a": { "child":"#.as_bytes()).unwrap(); |
| 2686 | assert!(decoder.tape_decoder.has_partial_row()); |
| 2687 | assert_eq!(decoder.tape_decoder.num_buffered_rows(), 1); |
| 2688 | let _ = decoder.flush().unwrap_err(); |
| 2689 | assert!(decoder.tape_decoder.has_partial_row()); |
| 2690 | assert_eq!(decoder.tape_decoder.num_buffered_rows(), 1); |
| 2691 | |
| 2692 | let parse_err = |s: &str| { |
| 2693 | ReaderBuilder::new(schema.clone()) |
| 2694 | .build(Cursor::new(s.as_bytes())) |
| 2695 | .unwrap() |
| 2696 | .next() |
| 2697 | .unwrap() |
| 2698 | .unwrap_err() |
| 2699 | .to_string() |
| 2700 | }; |
| 2701 | |
| 2702 | let err = parse_err(r#"{"a": 123}"#); |
| 2703 | assert_eq!( |
| 2704 | err, |
| 2705 | "Json error: whilst decoding field 'a': expected { got 123" |
| 2706 | ); |
| 2707 | |
| 2708 | let err = parse_err(r#"{"a": ["bar"]}"#); |
| 2709 | assert_eq!( |
| 2710 | err, |
| 2711 | r#"Json error: whilst decoding field 'a': expected { got ["bar"]"# |
| 2712 | ); |
| 2713 | |
| 2714 | let err = parse_err(r#"{"a": []}"#); |
| 2715 | assert_eq!( |
| 2716 | err, |
| 2717 | "Json error: whilst decoding field 'a': expected { got []" |
| 2718 | ); |
| 2719 | |
| 2720 | let err = parse_err(r#"{"a": [{"child": 234}]}"#); |
| 2721 | assert_eq!( |
| 2722 | err, |
| 2723 | r#"Json error: whilst decoding field 'a': expected { got [{"child": 234}]"# |
| 2724 | ); |
| 2725 | |
| 2726 | let err = parse_err(r#"{"a": [{"child": {"foo": [{"foo": ["bar"]}]}}]}"#); |
| 2727 | assert_eq!( |
| 2728 | err, |
| 2729 | r#"Json error: whilst decoding field 'a': expected { got [{"child": {"foo": [{"foo": ["bar"]}]}}]"# |
| 2730 | ); |
| 2731 | |
| 2732 | let err = parse_err(r#"{"a": true}"#); |
| 2733 | assert_eq!( |
| 2734 | err, |