@@ -103,6 +103,56 @@ public void asyncProgram_basicUnknownResolution() throws Exception {
103103 assertThat (result ).isEqualTo (true );
104104 }
105105
106+ @ Test
107+ public void asyncProgram_sequentialUnknownResolution () throws Exception {
108+ // Arrange
109+ CelUnknownAttributeValueResolver resolveName =
110+ CelUnknownAttributeValueResolver .fromResolver (
111+ (attr ) -> {
112+ Thread .sleep (500 );
113+ return attr .toString ();
114+ });
115+ Cel cel =
116+ CelFactory .standardCelBuilder ()
117+ .setOptions (CelOptions .current ().enableUnknownTracking (true ).build ())
118+ .addMessageTypes (TestAllTypes .getDescriptor ())
119+ .addVar ("com.google.var1" , SimpleType .BOOL )
120+ .addVar ("com.google.var2" , SimpleType .STRING )
121+ .addVar ("com.google.var3" , SimpleType .STRING )
122+ .setResultType (SimpleType .STRING )
123+ .setContainer (CelContainer .ofName ("com.google" ))
124+ .build ();
125+
126+ CelAsyncRuntime asyncRuntime =
127+ CelAsyncRuntimeFactory .defaultAsyncRuntime ()
128+ .setRuntime (cel )
129+ .setExecutorService (newDirectExecutorService ())
130+ .build ();
131+
132+ CelAbstractSyntaxTree ast =
133+ cel .compile (
134+ "var1 ? var2 : var3" )
135+ .getAst ();
136+
137+ AsyncProgram program = asyncRuntime .createProgram (ast );
138+
139+ // Act
140+ ListenableFuture <Object > future =
141+ program .evaluateToCompletion (
142+ CelResolvableAttributePattern .of (
143+ CelAttributePattern .fromQualifiedIdentifier ("com.google.var1" ),
144+ CelUnknownAttributeValueResolver .fromResolver (unused -> true )),
145+ CelResolvableAttributePattern .of (
146+ CelAttributePattern .fromQualifiedIdentifier ("com.google.var2" ), resolveName ),
147+ CelResolvableAttributePattern .of (
148+ CelAttributePattern .fromQualifiedIdentifier ("com.google.var3" ), resolveName ));
149+ Object result = future .get (2 , SECONDS );
150+
151+ // Assert
152+ assertThat (result ).isInstanceOf (String .class );
153+ assertThat (result ).isEqualTo ("com.google.var2" );
154+ }
155+
106156 @ Test
107157 public void asyncProgram_basicAsyncResolver () throws Exception {
108158 // Arrange
0 commit comments