session_rust/
point_test.rs

1#[cfg(test)]
2mod tests {
3    use crate::{Color, Point};
4
5    #[test]
6    fn test_point_constructor() {
7        let point = Point::new(1.0, 2.0, 3.0);
8        assert_eq!(point.name, "my_point");
9        assert!(!point.guid.to_string().is_empty());
10        assert_eq!(point.x, 1.0);
11        assert_eq!(point.y, 2.0);
12        assert_eq!(point.z, 3.0);
13        assert_eq!(point.width, 1.0);
14        assert_eq!(point.pointcolor.r, Color::white().r);
15        assert_eq!(point.pointcolor.g, Color::white().g);
16        assert_eq!(point.pointcolor.b, Color::white().b);
17        assert_eq!(point.pointcolor.a, Color::white().a);
18    }
19
20    #[test]
21    fn test_point_equality() {
22        let p1 = Point::new(1.0, 2.0, 3.0);
23        let p2 = Point::new(1.0, 2.0, 3.0);
24        // Points have different GUIDs, so they won't be equal by default
25        // We'll compare the coordinate values instead
26        assert_eq!(p1.x, p2.x);
27        assert_eq!(p1.y, p2.y);
28        assert_eq!(p1.z, p2.z);
29
30        let p3 = Point::new(1.0, 2.0, 3.0);
31        let p4 = Point::new(1.1, 2.0, 3.0);
32        assert_ne!(p3.x, p4.x);
33    }
34
35    #[test]
36    fn test_point_to_json_data() {
37        let mut point = Point::new(15.5, 25.7, 35.9);
38        point.name = "survey_point_A".to_string();
39        point.width = 2.5;
40        point.pointcolor = Color::new(255, 128, 64, 255);
41
42        let json_string = point.to_json_data().unwrap();
43        let data: serde_json::Value = serde_json::from_str(&json_string).unwrap();
44
45        assert_eq!(data["type"], "Point");
46        assert_eq!(data["name"], "survey_point_A");
47        assert_eq!(data["x"], 15.5);
48        assert_eq!(data["y"], 25.7);
49        assert_eq!(data["z"], 35.9);
50        assert_eq!(data["width"], 2.5);
51        assert_eq!(data["pointcolor"]["r"], 255);
52        assert_eq!(data["pointcolor"]["g"], 128);
53        assert_eq!(data["pointcolor"]["b"], 64);
54        assert_eq!(data["pointcolor"]["a"], 255);
55        assert!(data["guid"].is_string());
56    }
57
58    #[test]
59    fn test_point_from_json_data() {
60        let mut original_point = Point::new(42.1, 84.2, 126.3);
61        original_point.name = "control_point_B".to_string();
62        original_point.width = 3.0;
63        original_point.pointcolor = Color::new(200, 100, 50, 255);
64
65        let json_string = original_point.to_json_data().unwrap();
66        let restored_point = Point::from_json_data(&json_string).unwrap();
67
68        assert_eq!(restored_point.x, 42.1);
69        assert_eq!(restored_point.y, 84.2);
70        assert_eq!(restored_point.z, 126.3);
71        assert_eq!(restored_point.name, "control_point_B");
72        assert_eq!(restored_point.width, 3.0);
73        assert_eq!(restored_point.pointcolor.r, 200);
74        assert_eq!(restored_point.pointcolor.g, 100);
75        assert_eq!(restored_point.pointcolor.b, 50);
76        assert_eq!(restored_point.pointcolor.a, 255);
77        assert_eq!(restored_point.guid, original_point.guid);
78    }
79
80    #[test]
81    fn test_point_to_json_from_json() {
82        let mut original = Point::new(123.45, 678.90, 999.11);
83        original.name = "file_test_point".to_string();
84        original.width = 4.5;
85        original.pointcolor = Color::new(0, 255, 128, 255);
86        let filename = "test_point.json";
87
88        original.to_json(filename).unwrap();
89        let loaded = Point::from_json(filename).unwrap();
90
91        assert_eq!(loaded.x, original.x);
92        assert_eq!(loaded.y, original.y);
93        assert_eq!(loaded.z, original.z);
94        assert_eq!(loaded.name, original.name);
95        assert_eq!(loaded.width, original.width);
96        assert_eq!(loaded.pointcolor.r, original.pointcolor.r);
97        assert_eq!(loaded.pointcolor.g, original.pointcolor.g);
98        assert_eq!(loaded.pointcolor.b, original.pointcolor.b);
99        assert_eq!(loaded.pointcolor.a, original.pointcolor.a);
100        assert_eq!(loaded.guid, original.guid);
101    }
102}