Skip to content
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 72 additions & 28 deletions dotnet/src/webdriver/BiDi/Script/LocalValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,17 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Json.Converters;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using OpenQA.Selenium.BiDi.Json.Converters;

namespace OpenQA.Selenium.BiDi.Script;

[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")]
[JsonDerivedType(typeof(NumberLocalValue), "number")]
[JsonDerivedType(typeof(StringLocalValue), "string")]
[JsonDerivedType(typeof(NullLocalValue), "null")]
[JsonDerivedType(typeof(UndefinedLocalValue), "undefined")]
[JsonDerivedType(typeof(BooleanLocalValue), "boolean")]
[JsonDerivedType(typeof(BigIntLocalValue), "bigint")]
[JsonDerivedType(typeof(ChannelLocalValue), "channel")]
[JsonDerivedType(typeof(ArrayLocalValue), "array")]
[JsonDerivedType(typeof(DateLocalValue), "date")]
[JsonDerivedType(typeof(MapLocalValue), "map")]
[JsonDerivedType(typeof(ObjectLocalValue), "object")]
[JsonDerivedType(typeof(RegExpLocalValue), "regexp")]
[JsonDerivedType(typeof(SetLocalValue), "set")]
public abstract record LocalValue
Comment thread
RenderMichael marked this conversation as resolved.
{
public static implicit operator LocalValue(bool? value) { return ConvertFrom(value); }
Expand Down Expand Up @@ -281,38 +267,96 @@ private static LocalValue ReflectionBasedConvertFrom(object? value)
}
}

public abstract record RemoteReferenceLocalValue : LocalValue, IRemoteReference;

public sealed record SharedReferenceLocalValue(string SharedId) : RemoteReferenceLocalValue, ISharedReference
Comment thread
RenderMichael marked this conversation as resolved.
{
public Handle? Handle { get; set; }
}

public sealed record RemoteObjectReferenceLocalValue(Handle Handle) : RemoteReferenceLocalValue, IRemoteObjectReference
{
public string? SharedId { get; set; }
}

public abstract record PrimitiveProtocolLocalValue : LocalValue;

public sealed record NumberLocalValue([property: JsonConverter(typeof(SpecialNumberConverter))] double Value) : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "number";

public static explicit operator NumberLocalValue(double n) => new NumberLocalValue(n);
}

public sealed record StringLocalValue(string Value) : PrimitiveProtocolLocalValue;
public sealed record StringLocalValue(string Value) : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "string";
}

public sealed record NullLocalValue : PrimitiveProtocolLocalValue;
public sealed record NullLocalValue : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "null";
}

public sealed record UndefinedLocalValue : PrimitiveProtocolLocalValue;
public sealed record UndefinedLocalValue : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "undefined";
}

public sealed record BooleanLocalValue(bool Value) : PrimitiveProtocolLocalValue;
public sealed record BooleanLocalValue(bool Value) : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "boolean";
}

public sealed record BigIntLocalValue(string Value) : PrimitiveProtocolLocalValue;
public sealed record BigIntLocalValue(string Value) : PrimitiveProtocolLocalValue
{
[JsonInclude]
internal string Type { get; } = "bigint";
}

public sealed record ChannelLocalValue(ChannelProperties Value) : LocalValue
{
// AddPreloadScript takes arguments typed as ChannelLocalValue but still requires "type":"channel"
[JsonInclude]
internal string Type => "channel";
internal string Type { get; } = "channel";
}

public sealed record ArrayLocalValue(IEnumerable<LocalValue> Value) : LocalValue;
public sealed record ArrayLocalValue(IEnumerable<LocalValue> Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "array";
}

public sealed record DateLocalValue(string Value) : LocalValue;
public sealed record DateLocalValue(string Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "date";
}

public sealed record MapLocalValue(IEnumerable<IEnumerable<LocalValue>> Value) : LocalValue;
public sealed record MapLocalValue(IEnumerable<IEnumerable<LocalValue>> Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "map";
}

public sealed record ObjectLocalValue(IEnumerable<IEnumerable<LocalValue>> Value) : LocalValue;
public sealed record ObjectLocalValue(IEnumerable<IEnumerable<LocalValue>> Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "object";
}

public sealed record RegExpLocalValue(RegExpValue Value) : LocalValue;
public sealed record RegExpLocalValue(RegExpValue Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "regexp";
}

public sealed record SetLocalValue(IEnumerable<LocalValue> Value) : LocalValue;
public sealed record SetLocalValue(IEnumerable<LocalValue> Value) : LocalValue
{
[JsonInclude]
internal string Type { get; } = "set";
}
Loading