public async Task FetchesOidcToken_WithOptions(OidcTokenFormat format, string targetAudience, string expectedQueryString)
        {
            // A little bit after the tokens returned from OidcTokenFakes were issued.
            var clock          = new MockClock(new DateTime(2020, 5, 21, 9, 20, 0, 0, DateTimeKind.Utc));
            var messageHandler = new OidcComputeSuccessMessageHandler();
            var initializer    = new ComputeCredential.Initializer("http://will.be.ignored", "http://will.be.ignored")
            {
                Clock             = clock,
                HttpClientFactory = new MockHttpClientFactory(messageHandler)
            };
            var credential = new ComputeCredential(initializer);

            var oidcToken = await credential.GetOidcTokenAsync(
                OidcTokenOptions.FromTargetAudience("any_audience")
                .WithTargetAudience(targetAudience)
                .WithTokenFormat(format));

            await oidcToken.GetAccessTokenAsync();

            Assert.Equal(expectedQueryString, messageHandler.LatestRequest.RequestUri.Query);
        }
 /// <summary>
 /// Builds a new set of options with the same options as this one, except for the token format.
 /// </summary>
 /// <param name="tokenFormat">The new token format.</param>
 /// <returns>A new set of options with the given token format.</returns>
 public OidcTokenOptions WithTokenFormat(OidcTokenFormat tokenFormat) =>
 new OidcTokenOptions(TargetAudience, tokenFormat);
 private OidcTokenOptions(string targetAudience, OidcTokenFormat tokenFormat)
 {
     TargetAudience = targetAudience.ThrowIfNull(nameof(targetAudience));
     TokenFormat    = Utilities.CheckEnumValue(tokenFormat, nameof(tokenFormat));
 }