@@ -63,4 +63,94 @@ describe('DocumentManager', () => {
6363 expect ( documentManager . getLine ( 'file:///nonexistent.yaml' , 0 ) ) . toBeUndefined ( ) ;
6464 } ) ;
6565 } ) ;
66+
67+ describe ( 'document cache updates' , ( ) => {
68+ it ( 'should cache document on first access' , ( ) => {
69+ const uri = 'file:///test.yaml' ;
70+ const content = 'Resources:\n Bucket:\n Type: AWS::S3::Bucket' ;
71+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , content ) ;
72+
73+ mockDocuments . get . returns ( textDocument ) ;
74+
75+ const doc1 = documentManager . get ( uri ) ;
76+ const doc2 = documentManager . get ( uri ) ;
77+
78+ expect ( doc1 ) . toBe ( doc2 ) ;
79+ } ) ;
80+
81+ it ( 'should return updated content when TextDocument is mutated' , ( ) => {
82+ const uri = 'file:///test.yaml' ;
83+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , 'old content' ) ;
84+
85+ mockDocuments . get . returns ( textDocument ) ;
86+
87+ const doc = documentManager . get ( uri ) ;
88+ expect ( doc ?. contents ( ) ) . toBe ( 'old content' ) ;
89+
90+ TextDocument . update ( textDocument , [ { text : 'new content' } ] , 2 ) ;
91+
92+ expect ( doc ?. contents ( ) ) . toBe ( 'new content' ) ;
93+ } ) ;
94+
95+ it ( 'should return updated version when TextDocument is mutated' , ( ) => {
96+ const uri = 'file:///test.yaml' ;
97+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , 'content' ) ;
98+
99+ mockDocuments . get . returns ( textDocument ) ;
100+
101+ const doc = documentManager . get ( uri ) ;
102+ expect ( doc ?. version ) . toBe ( 1 ) ;
103+
104+ TextDocument . update ( textDocument , [ { text : 'updated' } ] , 2 ) ;
105+
106+ expect ( doc ?. version ) . toBe ( 2 ) ;
107+ } ) ;
108+
109+ it ( 'should return updated lineCount when TextDocument is mutated' , ( ) => {
110+ const uri = 'file:///test.yaml' ;
111+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , 'line1' ) ;
112+
113+ mockDocuments . get . returns ( textDocument ) ;
114+
115+ const doc = documentManager . get ( uri ) ;
116+ expect ( doc ?. lineCount ) . toBe ( 1 ) ;
117+
118+ TextDocument . update ( textDocument , [ { text : 'line1\nline2\nline3' } ] , 2 ) ;
119+
120+ expect ( doc ?. lineCount ) . toBe ( 3 ) ;
121+ } ) ;
122+
123+ it ( 'should remove document from cache' , ( ) => {
124+ const uri = 'file:///test.yaml' ;
125+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , 'content' ) ;
126+
127+ mockDocuments . get . returns ( textDocument ) ;
128+
129+ const doc1 = documentManager . get ( uri ) ;
130+ expect ( doc1 ) . toBeDefined ( ) ;
131+
132+ documentManager . removeDocument ( uri ) ;
133+
134+ const doc2 = documentManager . get ( uri ) ;
135+ expect ( doc2 ) . not . toBe ( doc1 ) ;
136+ } ) ;
137+
138+ it ( 'should recreate document after cache invalidation' , ( ) => {
139+ const uri = 'file:///test.yaml' ;
140+ const textDocument = TextDocument . create ( uri , 'yaml' , 1 , 'Resources: {}' ) ;
141+
142+ mockDocuments . get . returns ( textDocument ) ;
143+
144+ const doc1 = documentManager . get ( uri ) ;
145+ expect ( doc1 ?. cfnFileType ) . toBe ( CloudFormationFileType . Template ) ;
146+
147+ documentManager . removeDocument ( uri ) ;
148+
149+ TextDocument . update ( textDocument , [ { text : 'name: app' } ] , 2 ) ;
150+
151+ const doc2 = documentManager . get ( uri ) ;
152+ expect ( doc2 ) . not . toBe ( doc1 ) ;
153+ expect ( doc2 ?. cfnFileType ) . toBe ( CloudFormationFileType . Other ) ;
154+ } ) ;
155+ } ) ;
66156} ) ;
0 commit comments