11use prevue:: render;
22use serde_json:: { Value , json} ;
33
4+ fn data ( ) -> Value {
5+ json ! ( {
6+ "message" : "Hello, world!" ,
7+ "count" : 42 ,
8+ "isVisible" : true ,
9+ "elementId" : "item-1"
10+ } )
11+ }
12+
13+ // === Basic Behavior ===
14+
415#[ test]
5- fn test_pre ( ) {
16+ fn test_pre_basic ( ) {
617 let input = r#"
718 <div>
819 <div v-pre>PRE</div>
920 </div>
1021 "# ;
11- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
22+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
1223
1324 let expected = r#"<html><head></head><body><div>
1425 <div>PRE</div>
@@ -24,7 +35,7 @@ fn test_pre_empty() {
2435 <div v-pre></div>
2536 </div>
2637 "# ;
27- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
38+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
2839
2940 let expected = r#"<html><head></head><body><div>
3041 <div></div>
@@ -33,55 +44,59 @@ fn test_pre_empty() {
3344 assert_eq ! ( output, expected) ;
3445}
3546
47+ // === Interpolation ===
48+
3649#[ test]
3750fn test_pre_with_mustache ( ) {
3851 let input = r#"
3952 <div>
40- <div v-pre>{{ text }} {{ number }}</div>
53+ <div v-pre>{{ message }} {{ count }}</div>
4154 </div>
4255 "# ;
43- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
56+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
4457
4558 let expected = r#"<html><head></head><body><div>
46- <div>{{ text }} {{ number }}</div>
59+ <div>{{ message }} {{ count }}</div>
4760 </div>
4861 </body></html>"# ;
4962 assert_eq ! ( output, expected) ;
5063}
5164
5265#[ test]
53- fn test_pre_with_if ( ) {
66+ fn test_pre_multiline ( ) {
5467 let input = r#"
5568 <div>
56- <div v-pre v-if="show">{{ text }}</div>
69+ <div v-pre>
70+ Line 1: {{ message }}
71+ Line 2: {{ count }}
72+ </div>
5773 </div>
5874 "# ;
59- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
75+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
6076
6177 let expected = r#"<html><head></head><body><div>
62- <div v-if="show">{{ text }}</div>
78+ <div>
79+ Line 1: {{ message }}
80+ Line 2: {{ count }}
81+ </div>
6382 </div>
6483 </body></html>"# ;
6584 assert_eq ! ( output, expected) ;
6685}
6786
87+ // === Directives & Attributes ===
88+
6889#[ test]
69- fn test_pre_with_nested_directives ( ) {
90+ fn test_pre_with_if ( ) {
7091 let input = r#"
7192 <div>
72- <div v-pre>
73- <p v-if="show">{{ text }}</p>
74- <span v-for="item in [1, 2, 3]">{{ item }}</span>
75- </div>
93+ <div v-pre v-if="isVisible">{{ message }}</div>
7694 </div>
7795 "# ;
78- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
96+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
7997
8098 let expected = r#"<html><head></head><body><div>
81- <div>
82- <p v-if="show">{{ text }}</p>
83- <span v-for="item in [1, 2, 3]">{{ item }}</span>
84- </div>
99+ <div v-if="isVisible">{{ message }}</div>
85100 </div>
86101 </body></html>"# ;
87102 assert_eq ! ( output, expected) ;
@@ -91,34 +106,38 @@ fn test_pre_with_nested_directives() {
91106fn test_pre_with_bind ( ) {
92107 let input = r#"
93108 <div>
94- <div v-pre :id="id ">{{ text }}</div>
109+ <div v-pre :id="elementId ">{{ message }}</div>
95110 </div>
96111 "# ;
97- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
112+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
98113
99114 let expected = r#"<html><head></head><body><div>
100- <div :id="id ">{{ text }}</div>
115+ <div :id="elementId ">{{ message }}</div>
101116 </div>
102117 </body></html>"# ;
103118 assert_eq ! ( output, expected) ;
104119}
105120
121+ // === Nested Elements ===
122+
106123#[ test]
107- fn test_pre_multiline ( ) {
124+ fn test_pre_with_nested_directives ( ) {
108125 let input = r#"
109126 <div>
110127 <div v-pre>
111- Line 1: {{ text }}
112- Line 2: {{ number }}
128+ <p v-if="isVisible">{{ message }}</p>
129+ <span v-for="item in [1, 2, 3]">{{ item }}</span>
130+ <div :id="elementId"></div>
113131 </div>
114132 </div>
115133 "# ;
116- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
134+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
117135
118136 let expected = r#"<html><head></head><body><div>
119137 <div>
120- Line 1: {{ text }}
121- Line 2: {{ number }}
138+ <p v-if="isVisible">{{ message }}</p>
139+ <span v-for="item in [1, 2, 3]">{{ item }}</span>
140+ <div :id="elementId"></div>
122141 </div>
123142 </div>
124143 </body></html>"# ;
@@ -130,38 +149,40 @@ fn test_pre_nested_pre() {
130149 let input = r#"
131150 <div>
132151 <div v-pre>
133- Outer {{ text }}
134- <div v-pre>Inner {{ text }}</div>
152+ Outer {{ message }}
153+ <div v-pre>Inner {{ message }}</div>
135154 </div>
136155 </div>
137156 "# ;
138- let output = render ( input. to_string ( ) , Value :: Null ) . unwrap ( ) ;
157+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
139158
140159 let expected = r#"<html><head></head><body><div>
141160 <div>
142- Outer {{ text }}
143- <div v-pre="">Inner {{ text }}</div>
161+ Outer {{ message }}
162+ <div v-pre="">Inner {{ message }}</div>
144163 </div>
145164 </div>
146165 </body></html>"# ;
147166 assert_eq ! ( output, expected) ;
148167}
149168
169+ // === Isolation ===
170+
150171#[ test]
151172fn test_pre_sibling_elements ( ) {
152173 let input = r#"
153174 <div>
154- <p>{{ text }}</p>
155- <p v-pre>{{ text }}</p>
156- <p>{{ text }}</p>
175+ <p>{{ message }}</p>
176+ <p v-pre>{{ message }}</p>
177+ <p>{{ message }}</p>
157178 </div>
158179 "# ;
159- let output = render ( input. to_string ( ) , json ! ( { "text" : "Hello" } ) ) . unwrap ( ) ;
180+ let output = render ( input. to_string ( ) , data ( ) ) . unwrap ( ) ;
160181
161182 let expected = r#"<html><head></head><body><div>
162- <p>Hello</p>
163- <p>{{ text }}</p>
164- <p>Hello</p>
183+ <p>Hello, world! </p>
184+ <p>{{ message }}</p>
185+ <p>Hello, world! </p>
165186 </div>
166187 </body></html>"# ;
167188 assert_eq ! ( output, expected) ;
0 commit comments