@@ -102,5 +102,49 @@ public void ReadUriWithLocation()
102102 }
103103 }
104104
105+ [ TestMethod ]
106+ public void DrawingHyperlinkUpdate_ShouldNotThrowException ( )
107+ {
108+ using ( var package = new ExcelPackage ( ) )
109+ {
110+ var ws = package . Workbook . Worksheets . Add ( "Sheet1" ) ;
111+
112+ // Add a drawing (shape)
113+ var shape = ws . Drawings . AddShape ( "MyShape" , eShapeStyle . Rect ) ;
114+
115+ // 1. Assign initial external URL hyperlink
116+ var initialUrl = new ExcelHyperLink ( "https://epplussoftware.com" ) { ToolTip = "Initial ToolTip" } ;
117+ shape . Hyperlink = initialUrl ;
118+
119+ Assert . IsNotNull ( shape . Hyperlink ) ;
120+
121+ // 2. Re-assign to a new external URL hyperlink (this would crash without the fix)
122+ var updatedUrl = new ExcelHyperLink ( "https://github.com/EPPlusSoftware/EPPlus" ) { ToolTip = "Updated ToolTip" } ;
123+ shape . Hyperlink = updatedUrl ;
124+
125+ Assert . AreEqual ( "https://github.com/EPPlusSoftware/EPPlus" , shape . Hyperlink . OriginalString ) ;
126+
127+ // 3. Re-assign to an internal sheet reference (this would also crash without the fix)
128+ var internalLink = new ExcelHyperLink ( "Sheet1!A10" , "Go to A10" ) { ToolTip = "Internal ToolTip" } ;
129+ shape . Hyperlink = internalLink ;
130+
131+ Assert . AreEqual ( "Sheet1!A10" , ( ( ExcelHyperLink ) shape . Hyperlink ) . ReferenceAddress ) ;
132+
133+ // 4. Save and read back to verify XML and tooltip are correct
134+ package . Save ( ) ;
135+
136+ using ( var readPackage = new ExcelPackage ( package . Stream ) )
137+ {
138+ var readWs = readPackage . Workbook . Worksheets [ "Sheet1" ] ;
139+ var readShape = readWs . Drawings [ "MyShape" ] ;
140+
141+ var readLink = ( ExcelHyperLink ) readShape . Hyperlink ;
142+ Assert . IsNotNull ( readLink ) ;
143+ Assert . AreEqual ( "Sheet1!A10" , readLink . ReferenceAddress ) ;
144+ Assert . AreEqual ( "Internal ToolTip" , readLink . ToolTip ) ;
145+ }
146+ }
147+ }
148+
105149 }
106150}
0 commit comments