Bläddra i källkod

fix key validation logic (#3936)

Evan Almloff 2 månader sedan
förälder
incheckning
16cae8abaf
2 ändrade filer med 29 tillägg och 1 borttagningar
  1. 3 1
      packages/rsx/src/template_body.rs
  2. 26 0
      packages/rsx/tests/parsing.rs

+ 3 - 1
packages/rsx/src/template_body.rs

@@ -236,11 +236,13 @@ impl TemplateBody {
 
         // Assign paths to all nodes in the template
         body.assign_paths_inner(&nodes);
-        body.validate_key();
 
         // And then save the roots
         body.roots = nodes;
 
+        // Finally, validate the key
+        body.validate_key();
+
         body
     }
 

+ 26 - 0
packages/rsx/tests/parsing.rs

@@ -141,3 +141,29 @@ fn complex_kitchen_sink() {
 
     let _cb: CallBody = syn::parse2(item).unwrap();
 }
+
+#[test]
+fn key_must_be_formatted() {
+    let item = quote::quote! {
+        div {
+            key: value
+        }
+    };
+
+    let parsed = syn::parse2::<CallBody>(item).unwrap();
+    println!("{:?}", parsed.body.diagnostics);
+    assert!(!parsed.body.diagnostics.is_empty());
+}
+
+#[test]
+fn key_cannot_be_static() {
+    let item = quote::quote! {
+        div {
+            key: "hello world"
+        }
+    };
+
+    let parsed = syn::parse2::<CallBody>(item).unwrap();
+    println!("{:?}", parsed.body.diagnostics);
+    assert!(!parsed.body.diagnostics.is_empty());
+}