@@ -99,6 +99,55 @@ public void Kv1SerializerSpansLineUpWithEmittedText()
9999 Assert . That ( spans . Any ( s => s . TokenType == KVTokenType . ObjectEnd && text [ s . Start ] == '}' ) , Is . True ) ;
100100 }
101101
102+ [ Test ]
103+ public void Kv1TypedSerializerSpansLineUpWithEmittedText ( )
104+ {
105+ var person = new Person { FirstName = "Alice" , Age = 30 } ;
106+
107+ var ( text , spans ) = KVSerializer . Create ( KVSerializationFormat . KeyValues1Text )
108+ . SerializeWithSourceMap ( person , name : "person" ) ;
109+
110+ AssertSpansAreWellFormed ( text , spans ) ;
111+
112+ AssertSpanExists ( text , spans , KVTokenType . Key , "\" person\" " ) ;
113+ AssertSpanExists ( text , spans , KVTokenType . Key , "\" FirstName\" " ) ;
114+ AssertSpanExists ( text , spans , KVTokenType . Key , "\" Age\" " ) ;
115+ AssertSpanExists ( text , spans , KVTokenType . String , "\" Alice\" " ) ;
116+ AssertSpanExists ( text , spans , KVTokenType . String , "\" 30\" " ) ;
117+
118+ Assert . That ( spans . Any ( s => s . TokenType == KVTokenType . ObjectStart && text [ s . Start ] == '{' ) , Is . True ) ;
119+ Assert . That ( spans . Any ( s => s . TokenType == KVTokenType . ObjectEnd && text [ s . Start ] == '}' ) , Is . True ) ;
120+ }
121+
122+ [ Test ]
123+ public void Kv3TypedSerializerSpansLineUpWithEmittedText ( )
124+ {
125+ var person = new Person { FirstName = "Alice" , Age = 30 } ;
126+
127+ var ( text , spans ) = KVSerializer . Create ( KVSerializationFormat . KeyValues3Text )
128+ . SerializeWithSourceMap ( person , name : "person" ) ;
129+
130+ AssertSpansAreWellFormed ( text , spans ) ;
131+
132+ // Header is emitted by the KV3 serializer regardless of input shape.
133+ Assert . That ( spans [ 0 ] . TokenType , Is . EqualTo ( KVTokenType . Header ) ) ;
134+ Assert . That ( text . AsSpan ( spans [ 0 ] . Start , spans [ 0 ] . End - spans [ 0 ] . Start ) . StartsWith ( "<!--" ) , Is . True ) ;
135+
136+ AssertSpanExists ( text , spans , KVTokenType . Key , "FirstName" ) ;
137+ AssertSpanExists ( text , spans , KVTokenType . Key , "Age" ) ;
138+ AssertSpanExists ( text , spans , KVTokenType . String , "\" Alice\" " ) ;
139+ AssertSpanExists ( text , spans , KVTokenType . Identifier , "30" ) ;
140+
141+ Assert . That ( spans . Any ( s => s . TokenType == KVTokenType . ObjectStart && text [ s . Start ] == '{' ) , Is . True ) ;
142+ Assert . That ( spans . Any ( s => s . TokenType == KVTokenType . ObjectEnd && text [ s . Start ] == '}' ) , Is . True ) ;
143+ }
144+
145+ class Person
146+ {
147+ public required string FirstName { get ; set ; }
148+ public int Age { get ; set ; }
149+ }
150+
102151 [ Test ]
103152 public void Kv1ParserSpansLineUpWithInputText ( )
104153 {
0 commit comments