@@ -21,31 +21,35 @@ class ExternalRenderNodeTests: XCTestCase {
2121                referencePath:  " /path/to/external/swiftArticle " , 
2222                title:  " SwiftArticle " , 
2323                kind:  . article, 
24-                 language:  . swift
24+                 language:  . swift, 
25+                 platforms:  [ . init( name:  " iOS " ,  introduced:  nil ,  isBeta:  false ) ] 
2526            ) 
2627        ) 
2728        externalResolver. entitiesToReturn [ " /path/to/external/objCArticle " ]  =  . success( 
2829            . init( 
2930                referencePath:  " /path/to/external/objCArticle " , 
3031                title:  " ObjCArticle " , 
3132                kind:  . article, 
32-                 language:  . objectiveC
33+                 language:  . objectiveC, 
34+                 platforms:  [ . init( name:  " macOS " ,  introduced:  nil ,  isBeta:  true ) ] 
3335            ) 
3436        ) 
3537        externalResolver. entitiesToReturn [ " /path/to/external/swiftSymbol " ]  =  . success( 
3638            . init( 
3739                referencePath:  " /path/to/external/swiftSymbol " , 
3840                title:  " SwiftSymbol " , 
3941                kind:  . class, 
40-                 language:  . swift
42+                 language:  . swift, 
43+                 platforms:  [ . init( name:  " iOS " ,  introduced:  nil ,  isBeta:  true ) ] 
4144            ) 
4245        ) 
4346        externalResolver. entitiesToReturn [ " /path/to/external/objCSymbol " ]  =  . success( 
4447            . init( 
4548                referencePath:  " /path/to/external/objCSymbol " , 
4649                title:  " ObjCSymbol " , 
4750                kind:  . function, 
48-                 language:  . objectiveC
51+                 language:  . objectiveC, 
52+                 platforms:  [ . init( name:  " macOS " ,  introduced:  nil ,  isBeta:  false ) ] 
4953            ) 
5054        ) 
5155        return  externalResolver
@@ -89,24 +93,28 @@ class ExternalRenderNodeTests: XCTestCase {
8993        XCTAssertEqual ( externalRenderNodes [ 0 ] . symbolKind,  nil ) 
9094        XCTAssertEqual ( externalRenderNodes [ 0 ] . role,  " article " ) 
9195        XCTAssertEqual ( externalRenderNodes [ 0 ] . externalIdentifier. identifier,  " doc://com.test.external/path/to/external/objCArticle " ) 
92-         
96+         XCTAssertTrue ( externalRenderNodes [ 0 ] . isBeta) 
97+ 
9398        XCTAssertEqual ( externalRenderNodes [ 1 ] . identifier. absoluteString,  " doc://org.swift.MixedLanguageFramework/example/path/to/external/objCSymbol " ) 
9499        XCTAssertEqual ( externalRenderNodes [ 1 ] . kind,  . symbol) 
95100        XCTAssertEqual ( externalRenderNodes [ 1 ] . symbolKind,  nil ) 
96101        XCTAssertEqual ( externalRenderNodes [ 1 ] . role,  " symbol " ) 
97102        XCTAssertEqual ( externalRenderNodes [ 1 ] . externalIdentifier. identifier,  " doc://com.test.external/path/to/external/objCSymbol " ) 
103+         XCTAssertFalse ( externalRenderNodes [ 1 ] . isBeta) 
98104
99105        XCTAssertEqual ( externalRenderNodes [ 2 ] . identifier. absoluteString,  " doc://org.swift.MixedLanguageFramework/example/path/to/external/swiftArticle " ) 
100106        XCTAssertEqual ( externalRenderNodes [ 2 ] . kind,  . article) 
101107        XCTAssertEqual ( externalRenderNodes [ 2 ] . symbolKind,  nil ) 
102108        XCTAssertEqual ( externalRenderNodes [ 2 ] . role,  " article " ) 
103109        XCTAssertEqual ( externalRenderNodes [ 2 ] . externalIdentifier. identifier,  " doc://com.test.external/path/to/external/swiftArticle " ) 
110+         XCTAssertFalse ( externalRenderNodes [ 2 ] . isBeta) 
104111
105112        XCTAssertEqual ( externalRenderNodes [ 3 ] . identifier. absoluteString,  " doc://org.swift.MixedLanguageFramework/example/path/to/external/swiftSymbol " ) 
106113        XCTAssertEqual ( externalRenderNodes [ 3 ] . kind,  . symbol) 
107114        XCTAssertEqual ( externalRenderNodes [ 3 ] . symbolKind,  nil ) 
108115        XCTAssertEqual ( externalRenderNodes [ 3 ] . role,  " symbol " ) 
109116        XCTAssertEqual ( externalRenderNodes [ 3 ] . externalIdentifier. identifier,  " doc://com.test.external/path/to/external/swiftSymbol " ) 
117+         XCTAssertTrue ( externalRenderNodes [ 3 ] . isBeta) 
110118    } 
111119
112120    func  testExternalRenderNodeVariantRepresentation( )  throws  { 
@@ -146,14 +154,16 @@ class ExternalRenderNodeTests: XCTestCase {
146154        ) 
147155        XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. title,  swiftTitle) 
148156        XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. navigatorTitle,  navigatorTitle) 
149-         
157+         XCTAssertFalse ( swiftNavigatorExternalRenderNode. metadata. isBeta) 
158+ 
150159        let  objcNavigatorExternalRenderNode  =  try XCTUnwrap ( 
151160            NavigatorExternalRenderNode ( renderNode:  externalRenderNode,  trait:  . interfaceLanguage( " objc " ) ) 
152161        ) 
153162        XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. title,  occTitle) 
154163        XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. navigatorTitle,  occNavigatorTitle) 
164+         XCTAssertFalse ( objcNavigatorExternalRenderNode. metadata. isBeta) 
155165    } 
156-      
166+ 
157167    func  testNavigatorWithExternalNodes( )  async  throws  { 
158168        let  externalResolver  =  generateExternalResolver ( ) 
159169        let  ( _,  bundle,  context)  =  try await  testBundleAndContext ( 
@@ -208,6 +218,10 @@ class ExternalRenderNodeTests: XCTestCase {
208218        XCTAssertEqual ( occExternalNodes. map ( \. title) ,  [ " ObjCArticle " ,  " ObjCSymbol " ] ) 
209219        XCTAssert ( swiftExternalNodes. allSatisfy ( \. isExternal) ) 
210220        XCTAssert ( occExternalNodes. allSatisfy ( \. isExternal) ) 
221+         XCTAssert ( swiftExternalNodes. first  {  $0. title ==  " SwiftArticle "  } ? . isBeta ==  false ) 
222+         XCTAssert ( swiftExternalNodes. first  {  $0. title ==  " SwiftSymbol "  } ? . isBeta ==  true ) 
223+         XCTAssert ( occExternalNodes. first  {  $0. title ==  " ObjCArticle "  } ? . isBeta ==  true ) 
224+         XCTAssert ( occExternalNodes. first  {  $0. title ==  " ObjCSymbol "  } ? . isBeta ==  false ) 
211225    } 
212226
213227    func  testNavigatorWithExternalNodesOnlyAddsCuratedNodesToNavigator( )  async  throws  { 
@@ -269,4 +283,52 @@ class ExternalRenderNodeTests: XCTestCase {
269283        XCTAssert ( swiftExternalNodes. allSatisfy ( \. isExternal) ) 
270284        XCTAssert ( occExternalNodes. allSatisfy ( \. isExternal) ) 
271285    } 
286+ 
287+     func  testExternalRenderNodeVariantRepresentationWhenIsBeta( )  throws  { 
288+         let  renderReferenceIdentifier  =  RenderReferenceIdentifier ( forExternalLink:  " doc://com.test.external/path/to/external/symbol " ) 
289+         
290+         // Variants for the title
291+         let  swiftTitle  =  " Swift Symbol " 
292+         let  occTitle  =  " Occ Symbol " 
293+         
294+         // Variants for the navigator title
295+         let  navigatorTitle :  [ DeclarationRenderSection . Token ]  =  [ . init( text:  " symbol " ,  kind:  . identifier) ] 
296+         let  occNavigatorTitle :  [ DeclarationRenderSection . Token ]  =  [ . init( text:  " occ_symbol " ,  kind:  . identifier) ] 
297+         
298+         // Variants for the fragments
299+         let  fragments :  [ DeclarationRenderSection . Token ]  =  [ . init( text:  " func " ,  kind:  . keyword) ,  . init( text:  " symbol " ,  kind:  . identifier) ] 
300+         let  occFragments :  [ DeclarationRenderSection . Token ]  =  [ . init( text:  " func " ,  kind:  . keyword) ,  . init( text:  " occ_symbol " ,  kind:  . identifier) ] 
301+         
302+         let  externalEntity  =  LinkResolver . ExternalEntity ( 
303+             topicRenderReference:  . init( 
304+                 identifier:  renderReferenceIdentifier, 
305+                 titleVariants:  . init( defaultValue:  swiftTitle,  objectiveCValue:  occTitle) , 
306+                 abstractVariants:  . init( defaultValue:  [ ] ) , 
307+                 url:  " /example/path/to/external/symbol " , 
308+                 kind:  . symbol, 
309+                 fragmentsVariants:  . init( defaultValue:  fragments,  objectiveCValue:  occFragments) , 
310+                 navigatorTitleVariants:  . init( defaultValue:  navigatorTitle,  objectiveCValue:  occNavigatorTitle) , 
311+                 isBeta:  true 
312+             ) , 
313+             renderReferenceDependencies:  . init( ) , 
314+             sourceLanguages:  [ SourceLanguage ( name:  " swift " ) ,  SourceLanguage ( name:  " objc " ) ] ) 
315+         let  externalRenderNode  =  ExternalRenderNode ( 
316+             externalEntity:  externalEntity, 
317+             bundleIdentifier:  " com.test.external " 
318+         ) 
319+         
320+         let  swiftNavigatorExternalRenderNode  =  try XCTUnwrap ( 
321+             NavigatorExternalRenderNode ( renderNode:  externalRenderNode) 
322+         ) 
323+         XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. title,  swiftTitle) 
324+         XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. navigatorTitle,  navigatorTitle) 
325+         XCTAssertTrue ( swiftNavigatorExternalRenderNode. metadata. isBeta) 
326+ 
327+         let  objcNavigatorExternalRenderNode  =  try XCTUnwrap ( 
328+             NavigatorExternalRenderNode ( renderNode:  externalRenderNode,  trait:  . interfaceLanguage( " objc " ) ) 
329+         ) 
330+         XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. title,  occTitle) 
331+         XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. navigatorTitle,  occNavigatorTitle) 
332+         XCTAssertTrue ( objcNavigatorExternalRenderNode. metadata. isBeta) 
333+     } 
272334} 
0 commit comments