2021-04-05 10:54:22 +10:00
|
|
|
// Copyright © 2021 The CefSharp Authors. All rights reserved.
|
|
|
|
|
//
|
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
|
|
2022-02-13 19:58:35 -08:00
|
|
|
using CefSharp.Example.ModelBinding;
|
2021-04-05 08:29:42 +08:00
|
|
|
using CefSharp.Internals;
|
2022-02-13 19:58:35 -08:00
|
|
|
using System;
|
2021-04-05 13:38:02 +10:00
|
|
|
using System.Collections.Generic;
|
2021-04-05 08:29:42 +08:00
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
internal class NoNamespaceClass
|
|
|
|
|
{
|
|
|
|
|
public SomeElseClass SomeElseClass { get; set; }
|
|
|
|
|
public int Year { get; set; }
|
|
|
|
|
|
|
|
|
|
public string GetExampleString()
|
|
|
|
|
{
|
|
|
|
|
return "ok";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal class SomeElseClass
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace CefSharp.Test.JavascriptBinding
|
|
|
|
|
{
|
2023-02-15 13:45:07 +10:00
|
|
|
public class JavaScriptObjectRepositoryTests
|
2021-04-05 08:29:42 +08:00
|
|
|
{
|
|
|
|
|
[Fact]
|
2023-02-15 13:45:07 +10:00
|
|
|
public void ShouldRegisterJavascriptObjectBindWhenNamespaceIsNull()
|
2021-04-05 08:29:42 +08:00
|
|
|
{
|
2021-04-05 13:38:02 +10:00
|
|
|
IJavascriptObjectRepositoryInternal javascriptObjectRepository = new JavascriptObjectRepository();
|
2021-04-05 08:29:42 +08:00
|
|
|
var name = nameof(NoNamespaceClass);
|
2021-04-05 10:54:22 +10:00
|
|
|
#if NETCOREAPP
|
|
|
|
|
javascriptObjectRepository.Register(name, new NoNamespaceClass(), new BindingOptions());
|
|
|
|
|
#else
|
|
|
|
|
javascriptObjectRepository.Register(name, new NoNamespaceClass(), false, new BindingOptions());
|
|
|
|
|
#endif
|
2021-04-05 08:29:42 +08:00
|
|
|
Assert.True(javascriptObjectRepository.IsBound(name));
|
|
|
|
|
|
2021-04-05 13:38:02 +10:00
|
|
|
var boundObjects = javascriptObjectRepository.GetObjects(new List<string> { name });
|
2021-07-05 11:16:25 +10:00
|
|
|
Assert.Single(boundObjects);
|
2021-04-05 13:38:02 +10:00
|
|
|
|
|
|
|
|
var result = javascriptObjectRepository.TryCallMethod(boundObjects[0].Id, "getExampleString", new object[0]);
|
2021-04-05 08:29:42 +08:00
|
|
|
Assert.True(result.Success);
|
|
|
|
|
Assert.Equal("ok", result.ReturnValue.ToString());
|
|
|
|
|
}
|
2022-02-13 19:58:35 -08:00
|
|
|
|
2022-08-21 13:44:09 +10:00
|
|
|
[Fact]
|
|
|
|
|
public void ShouldReturnErrorMessageForObjectInvalidId()
|
|
|
|
|
{
|
|
|
|
|
IJavascriptObjectRepositoryInternal javascriptObjectRepository = new JavascriptObjectRepository();
|
|
|
|
|
|
|
|
|
|
var result = javascriptObjectRepository.TryCallMethod(100, "getExampleString", new object[0]);
|
|
|
|
|
Assert.False(result.Success);
|
|
|
|
|
Assert.StartsWith("Object Not Found Matching Id", result.Exception);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-13 19:58:35 -08:00
|
|
|
#if !NETCOREAPP
|
|
|
|
|
[Fact]
|
2023-02-15 13:45:07 +10:00
|
|
|
public void ShouldRegisterJavascriptObjectPropertyBindWhenNamespaceIsNull()
|
2022-02-13 19:58:35 -08:00
|
|
|
{
|
|
|
|
|
IJavascriptObjectRepositoryInternal javascriptObjectRepository = new JavascriptObjectRepository();
|
|
|
|
|
var name = nameof(NoNamespaceClass);
|
|
|
|
|
|
|
|
|
|
BindingOptions bindingOptions = new BindingOptions()
|
|
|
|
|
{
|
|
|
|
|
Binder = BindingOptions.DefaultBinder.Binder,
|
|
|
|
|
PropertyInterceptor = new PropertyInterceptorLogger()
|
|
|
|
|
};
|
|
|
|
|
javascriptObjectRepository.Register(name, new NoNamespaceClass(), false, bindingOptions);
|
|
|
|
|
Assert.True(javascriptObjectRepository.IsBound(name));
|
|
|
|
|
|
|
|
|
|
var boundObjects = javascriptObjectRepository.GetObjects(new List<string> { name });
|
|
|
|
|
Assert.Single(boundObjects);
|
|
|
|
|
|
|
|
|
|
object getResult, setResult = 100;
|
|
|
|
|
string exception;
|
|
|
|
|
NoNamespaceClass noNamespaceClass = new NoNamespaceClass();
|
|
|
|
|
bool retValue = javascriptObjectRepository.TrySetProperty(boundObjects[0].Id, "year", setResult, out exception);
|
|
|
|
|
Assert.True(retValue);
|
|
|
|
|
|
|
|
|
|
retValue = javascriptObjectRepository.TryGetProperty(boundObjects[0].Id, "year", out getResult, out exception);
|
|
|
|
|
Assert.True(retValue);
|
|
|
|
|
Assert.Equal(100, Convert.ToInt32(getResult));
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2021-04-05 08:29:42 +08:00
|
|
|
}
|
2022-02-13 19:58:35 -08:00
|
|
|
|
2021-04-05 08:29:42 +08:00
|
|
|
}
|