diff --git a/change/react-native-windows-2019-12-13-19-51-32-AddTestProjects.json b/change/react-native-windows-2019-12-13-19-51-32-AddTestProjects.json
new file mode 100644
index 00000000000..f4ee63d3779
--- /dev/null
+++ b/change/react-native-windows-2019-12-13-19-51-32-AddTestProjects.json
@@ -0,0 +1,8 @@
+{
+ "type": "none",
+ "comment": "Added new unit test projects to ReactWindows-Universal solution.",
+ "packageName": "react-native-windows",
+ "email": "vmorozov@microsoft.com",
+ "commit": "dac50d48f1dc58362e90084646d20bbffa003429",
+ "date": "2019-12-14T03:51:32.037Z"
+}
\ No newline at end of file
diff --git a/vnext/Microsoft.ReactNative.Cxx.UnitTests/Microsoft.ReactNative.Cxx.UnitTests.vcxproj b/vnext/Microsoft.ReactNative.Cxx.UnitTests/Microsoft.ReactNative.Cxx.UnitTests.vcxproj
index 090ceaf2d69..2dac3bb6695 100644
--- a/vnext/Microsoft.ReactNative.Cxx.UnitTests/Microsoft.ReactNative.Cxx.UnitTests.vcxproj
+++ b/vnext/Microsoft.ReactNative.Cxx.UnitTests/Microsoft.ReactNative.Cxx.UnitTests.vcxproj
@@ -8,11 +8,13 @@
15.0
{6c60e295-c8ca-4dc5-b8be-09888f58b249}
Win32Proj
- Microsoft_ReactNative_Cxx_UnitTests
+ Microsoft.ReactNative
10.0.18362.0
- 10.0.17134.0
+ 10.0.15063.0
+ 2
+
Debug
@@ -67,22 +69,21 @@
$(IntDir)pch.pch
_CONSOLE;%(PreprocessorDefinitions)
Level4
- %(AdditionalOptions) /permissive- /bigobj
+ /await %(AdditionalOptions) /permissive- /bigobj
+
+ $(ReactNativeWindowsDir)Microsoft.ReactNative;%(AdditionalIncludeDirectories)
+
Disabled
_DEBUG;%(PreprocessorDefinitions)
- %(AdditionalIncludeDirectories)
Console
false
-
- C:\git\vmoroz\react-native-windows\vnext\Microsoft.ReactNative;%(AdditionalIncludeDirectories)
-
@@ -131,13 +132,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/vnext/Microsoft.ReactNative.Cxx.UnitTests/main.cpp b/vnext/Microsoft.ReactNative.Cxx.UnitTests/main.cpp
index be8bd27ca5a..9e094c94862 100644
--- a/vnext/Microsoft.ReactNative.Cxx.UnitTests/main.cpp
+++ b/vnext/Microsoft.ReactNative.Cxx.UnitTests/main.cpp
@@ -6,7 +6,7 @@
#define CATCH_CONFIG_RUNNER
#include "catch.hpp"
-int main(int argc, char *argv[]) {
+int __cdecl main(int argc, char *argv[]) {
winrt::init_apartment();
return Catch::Session().run(argc, argv);
}
diff --git a/vnext/Microsoft.ReactNative.Cxx/JSValue.cpp b/vnext/Microsoft.ReactNative.Cxx/JSValue.cpp
index fbe43775462..00cb2097a94 100644
--- a/vnext/Microsoft.ReactNative.Cxx/JSValue.cpp
+++ b/vnext/Microsoft.ReactNative.Cxx/JSValue.cpp
@@ -15,6 +15,8 @@ namespace winrt::Microsoft::ReactNative::Bridge {
/*static*/ const JSValueArray JSValue::EmptyArray;
/*static*/ const std::string JSValue::EmptyString;
+#pragma warning(push)
+#pragma warning(disable : 26495) // False positive for union member not initialized
JSValue::JSValue(JSValue &&other) noexcept : m_type{other.m_type} {
switch (m_type) {
case JSValueType::Object:
@@ -40,6 +42,7 @@ JSValue::JSValue(JSValue &&other) noexcept : m_type{other.m_type} {
other.m_type = JSValueType::Null;
other.m_int64 = 0;
}
+#pragma warning(pop)
JSValue &JSValue::operator=(JSValue &&other) noexcept {
if (this != &other) {
diff --git a/vnext/Microsoft.ReactNative.Cxx/JSValue.h b/vnext/Microsoft.ReactNative.Cxx/JSValue.h
index bf369ce59ba..ca17710404d 100644
--- a/vnext/Microsoft.ReactNative.Cxx/JSValue.h
+++ b/vnext/Microsoft.ReactNative.Cxx/JSValue.h
@@ -167,6 +167,8 @@ inline auto JSValueArrayView::end() const noexcept {
// JSValue inline implementation
//===========================================================================
+#pragma warning(push)
+#pragma warning(disable : 26495) // False positive for union member not initialized
inline JSValue::JSValue() noexcept : m_type{JSValueType::Null}, m_int64{0} {}
inline JSValue::JSValue(std::nullptr_t) noexcept : m_type{JSValueType::Null}, m_int64{0} {}
inline JSValue::JSValue(JSValueObject &&value) noexcept : m_type{JSValueType::Object}, m_object{std::move(value)} {}
@@ -179,6 +181,7 @@ inline JSValue::JSValue(TBool value) noexcept : m_type{JSValueType::Boolean}, m_
template && !std::is_same_v, int>>
inline JSValue::JSValue(TInt value) noexcept : m_type{JSValueType::Int64}, m_int64{static_cast(value)} {}
inline JSValue::JSValue(double value) noexcept : m_type{JSValueType::Double}, m_double{value} {}
+#pragma warning(pop)
inline JSValueType JSValue::Type() const noexcept {
return m_type;
diff --git a/vnext/Microsoft.ReactNative.Cxx/JSValueReader.h b/vnext/Microsoft.ReactNative.Cxx/JSValueReader.h
index be614ce41ce..259a7b46235 100644
--- a/vnext/Microsoft.ReactNative.Cxx/JSValueReader.h
+++ b/vnext/Microsoft.ReactNative.Cxx/JSValueReader.h
@@ -37,6 +37,11 @@ T ReadValue(IJSValueReader const &reader) noexcept;
template
T ReadValue(const JSValue &jsValue) noexcept;
+template
+void SkipValue(IJSValueReader const &reader) noexcept;
+template
+void SkipValue(const JSValue &jsValue) noexcept;
+
template , int> = 1>
void ReadValue(TJSValueReader const &reader, /*out*/ T &value) noexcept;
@@ -60,11 +65,11 @@ template , int> = 1>
void ReadValue(IJSValueReader const &reader, /*out*/ T &value) noexcept;
template
void ReadValue(IJSValueReader const &reader, /*out*/ std::optional &value) noexcept;
-template , class TAlloc = std::allocator>>
+template , class TAlloc = std::allocator>>
void ReadValue(IJSValueReader const &reader, /*out*/ std::map &value) noexcept;
-template , class TAlloc = std::allocator>>
+template , class TAlloc = std::allocator>>
void ReadValue(IJSValueReader const &reader, /*out*/ std::map &value) noexcept;
-template >
+template >
void ReadValue(IJSValueReader const &reader, /*out*/ std::vector &value) noexcept;
template
void ReadValue(IJSValueReader const &reader, /*out*/ std::tuple &value) noexcept;
@@ -100,6 +105,20 @@ inline T ReadValue(const JSValue &jsValue) noexcept {
return result;
}
+// Call ReadValue for IJSValueReader and ignore result.
+template
+inline void SkipValue(IJSValueReader const &reader) noexcept {
+ T result;
+ ReadValue(reader, /*out*/ result);
+}
+
+// Call ReadValue for JSValue and ignore result.
+template
+inline void SkipValue(const JSValue &jsValue) noexcept {
+ T result;
+ ReadValue(jsValue, /*out*/ result);
+}
+
// Try to call ReadValue for JSValue unless it is already called us with TypeWrapper parameter.
template , int>>
inline void ReadValue(TJSValueReader const &reader, /*out*/ T &value) noexcept {
@@ -385,7 +404,7 @@ inline void ReadValue(IJSValueReader const &reader, /*out*/ T &value) noexcept {
if (it != fieldMap.end()) {
it->second.ReadField(reader, &value);
} else {
- ReadValue(reader); // Skip this property
+ SkipValue(reader); // Skip this property
}
}
}
@@ -394,7 +413,7 @@ inline void ReadValue(IJSValueReader const &reader, /*out*/ T &value) noexcept {
// It helps to read arguments from an array if there are more items than expected.
inline bool SkipArrayToEnd(IJSValueReader const &reader) noexcept {
while (reader.GetNextArrayItem()) {
- ReadValue(reader); // Read and ignore the value
+ SkipValue(reader); // Read and ignore the value
}
return true;
diff --git a/vnext/Microsoft.ReactNative.Cxx/JSValueWriter.h b/vnext/Microsoft.ReactNative.Cxx/JSValueWriter.h
index 959e53aef24..dccf5eebe62 100644
--- a/vnext/Microsoft.ReactNative.Cxx/JSValueWriter.h
+++ b/vnext/Microsoft.ReactNative.Cxx/JSValueWriter.h
@@ -35,11 +35,11 @@ template , int> = 1>
void WriteValue(IJSValueWriter const &writer, T const &value) noexcept;
template
void WriteValue(IJSValueWriter const &writer, std::optional const &value) noexcept;
-template , class TAlloc = std::allocator>>
+template , class TAlloc = std::allocator>>
void WriteValue(IJSValueWriter const &writer, std::map const &value) noexcept;
-template , class TAlloc = std::allocator>>
+template , class TAlloc = std::allocator>>
void WriteValue(IJSValueWriter const &writer, std::map const &value) noexcept;
-template >
+template >
void WriteValue(IJSValueWriter const &writer, std::vector const &value) noexcept;
template
void WriteValue(IJSValueWriter const &writer, std::tuple const &value) noexcept;
diff --git a/vnext/Microsoft.ReactNative.Cxx/NativeModules.h b/vnext/Microsoft.ReactNative.Cxx/NativeModules.h
index 110473d3fab..8ce5939498a 100644
--- a/vnext/Microsoft.ReactNative.Cxx/NativeModules.h
+++ b/vnext/Microsoft.ReactNative.Cxx/NativeModules.h
@@ -719,14 +719,17 @@ struct BoxedValue : implements, IBoxedValue> {
return reinterpret_cast(&m_value);
}
- static T &GetImpl(IBoxedValue &module) noexcept {
- return *reinterpret_cast(module.GetPtr());
- }
+ static T &GetImpl(IBoxedValue &module) noexcept;
private:
T m_value{};
};
+template
+inline T &BoxedValue::GetImpl(IBoxedValue &module) noexcept {
+ return *reinterpret_cast(module.GetPtr());
+}
+
template
inline ReactModuleProvider MakeModuleProvider() noexcept {
return [](IReactModuleBuilder const &moduleBuilder) noexcept {
diff --git a/vnext/Microsoft.ReactNative.Managed.UnitTests/JSValueReaderTest.cs b/vnext/Microsoft.ReactNative.Managed.UnitTests/JSValueReaderTest.cs
index a65c80b4d21..e0ac00251c9 100644
--- a/vnext/Microsoft.ReactNative.Managed.UnitTests/JSValueReaderTest.cs
+++ b/vnext/Microsoft.ReactNative.Managed.UnitTests/JSValueReaderTest.cs
@@ -136,7 +136,7 @@ public static void WriteValue(this IJSValueWriter writer, RobotModel value)
// Reading discriminating union requires using JSValue.
public static void ReadValue(this JSValue jsValue, out OneOf2 value)
{
- value = default;
+ value = default(OneOf2);
if (jsValue.TryGetObjectProperty("Kind", out JSValue kind))
{
RobotModel modelType = kind.ReadValue();
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValue.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValue.cs
index 1e0214cd24a..1306d5e96ba 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValue.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValue.cs
@@ -97,12 +97,12 @@ public bool TryGetObjectProperty(string propertyName, out JSValue value)
return false;
}
- public static bool operator ==(in JSValue lhs, in JSValue rhs)
+ public static bool operator ==(JSValue lhs, JSValue rhs)
{
return lhs.ValueEquals(rhs);
}
- public static bool operator !=(in JSValue lhs, in JSValue rhs)
+ public static bool operator !=(JSValue lhs, JSValue rhs)
{
return !lhs.ValueEquals(rhs);
}
@@ -112,7 +112,7 @@ public bool Equals(JSValue other)
return ValueEquals(other);
}
- private bool ValueEquals(in JSValue other)
+ private bool ValueEquals(JSValue other)
{
if (Type == other.Type)
{
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValueGenerator.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValueGenerator.cs
index 505338dc767..8d15d404a46 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValueGenerator.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValueGenerator.cs
@@ -413,10 +413,10 @@ public static Expression SetProperty(this Expression instance, PropertyInfo prop
return Assign(Property(propertyInfo.GetSetMethod().IsStatic ? null : instance, propertyInfo), value);
}
- public static TDelegate CompileLambda(params object[] expressions) where TDelegate : Delegate
+ public static TDelegate CompileLambda(params object[] expressions) /*TODO: add in C# v7.3: where TDelegate : Delegate*/
{
var typeWrapper = new TypeWrapper(typeof(TDelegate));
- return (TDelegate)typeWrapper.CompileLambda(expressions);
+ return (TDelegate)(object)typeWrapper.CompileLambda(expressions);
}
public static VariableWrapper[] MethodArgs(
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValueReader.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValueReader.cs
index 02c339441ac..32f72e02e75 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValueReader.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValueReader.cs
@@ -323,96 +323,47 @@ public static bool SkipArrayToEnd(this IJSValueReader reader)
public static void ReadValue(this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1)
- : default;
+ reader.ReadArgs(out T1 v1);
+ value = Tuple.Create(v1);
}
public static void ReadValue(this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2)
- : default;
+ reader.ReadArgs(out T1 v1, out T2 v2);
+ value = Tuple.Create(v1, v2);
}
public static void ReadValue(this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.TryReadArrayItem(out T3 t3)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2, t3)
- : default;
+ reader.ReadArgs(out T1 v1, out T2 v2, out T3 v3);
+ value = Tuple.Create(v1, v2, v3);
}
public static void ReadValue(this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.TryReadArrayItem(out T3 t3)
- && reader.TryReadArrayItem(out T4 t4)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2, t3, t4)
- : default;
+ reader.ReadArgs(out T1 v1, out T2 v2, out T3 v3, out T4 v4);
+ value = Tuple.Create(v1, v2, v3, v4);
}
public static void ReadValue(
this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.TryReadArrayItem(out T3 t3)
- && reader.TryReadArrayItem(out T4 t4)
- && reader.TryReadArrayItem(out T5 t5)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2, t3, t4, t5)
- : default;
+ reader.ReadArgs(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5);
+ value = Tuple.Create(v1, v2, v3, v4, v5);
}
public static void ReadValue(
this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.TryReadArrayItem(out T3 t3)
- && reader.TryReadArrayItem(out T4 t4)
- && reader.TryReadArrayItem(out T5 t5)
- && reader.TryReadArrayItem(out T6 t6)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2, t3, t4, t5, t6)
- : default;
+ reader.ReadArgs(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5, out T6 v6);
+ value = Tuple.Create(v1, v2, v3, v4, v5, v6);
}
public static void ReadValue(
this IJSValueReader reader, out Tuple value)
{
- value = (reader.ValueType == JSValueType.Array
- && reader.TryReadArrayItem(out T1 t1)
- && reader.TryReadArrayItem(out T2 t2)
- && reader.TryReadArrayItem(out T3 t3)
- && reader.TryReadArrayItem(out T4 t4)
- && reader.TryReadArrayItem(out T5 t5)
- && reader.TryReadArrayItem(out T6 t6)
- && reader.TryReadArrayItem(out T7 t7)
- && reader.SkipArrayToEnd())
- ? new Tuple(t1, t2, t3, t4, t5, t6, t7)
- : default;
- }
-
- public static bool TryReadArrayItem(this IJSValueReader reader, out T value)
- {
- bool result = reader.GetNextArrayItem();
- value = result ? reader.ReadValue() : default;
- return result;
+ reader.ReadArgs(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5, out T6 v6, out T7 v7);
+ value = Tuple.Create(v1, v2, v3, v4, v5, v6, v7);
}
public static bool GetNextArrayItem(this IJSValueReader reader, ref bool success)
@@ -429,24 +380,24 @@ public static void ReadArgs(this IJSValueReader reader)
public static void ReadArgs(this IJSValueReader reader, out T1 arg1)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
_ = success && reader.SkipArrayToEnd();
}
public static void ReadArgs(this IJSValueReader reader, out T1 arg1, out T2 arg2)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
_ = success && reader.SkipArrayToEnd();
}
public static void ReadArgs(this IJSValueReader reader, out T1 arg1, out T2 arg2, out T3 arg3)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
+ arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T3);
_ = success && reader.SkipArrayToEnd();
}
@@ -454,10 +405,10 @@ public static void ReadArgs(this IJSValueReader reader,
out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
+ arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T3);
+ arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T4);
_ = success && reader.SkipArrayToEnd();
}
@@ -465,11 +416,11 @@ public static void ReadArgs(this IJSValueReader reader,
out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4, out T5 arg5)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
+ arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T3);
+ arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T4);
+ arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T5);
_ = success && reader.SkipArrayToEnd();
}
@@ -477,12 +428,12 @@ public static void ReadArgs(this IJSValueReader reader,
out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4, out T5 arg5, out T6 arg6)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg6 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
+ arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T3);
+ arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T4);
+ arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T5);
+ arg6 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T6);
_ = success && reader.SkipArrayToEnd();
}
@@ -490,13 +441,13 @@ public static void ReadArgs(this IJSValueReader read
out T1 arg1, out T2 arg2, out T3 arg3, out T4 arg4, out T5 arg5, out T6 arg6, out T7 arg7)
{
bool success = reader.ValueType == JSValueType.Array;
- arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg6 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
- arg7 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default;
+ arg1 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T1);
+ arg2 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T2);
+ arg3 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T3);
+ arg4 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T4);
+ arg5 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T5);
+ arg6 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T6);
+ arg7 = reader.GetNextArrayItem(ref success) ? reader.ReadValue() : default(T7);
_ = success && reader.SkipArrayToEnd();
}
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValueReaderGenerator.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValueReaderGenerator.cs
index e2aa11c82fd..d1597f97ff8 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValueReaderGenerator.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValueReaderGenerator.cs
@@ -199,7 +199,7 @@ private static Delegate GenerateReadValueFromJSValueExtension(Type valueType, Me
// It cannot be an extension method because it would conflict with the generic
// extension method that uses T value type.
- public static void ReadEnum(IJSValueReader reader, out TEnum value) where TEnum : Enum
+ public static void ReadEnum(IJSValueReader reader, out TEnum value) /*TODO: Add in C# v7.3: where TEnum : Enum*/
{
value = (TEnum)(object)reader.ReadValue();
}
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriter.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriter.cs
index 3c9da47156c..e1805ce9a4c 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriter.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriter.cs
@@ -492,7 +492,9 @@ public static IJSValueWriter WriteArgs(this IJSValue
public static IJSValueWriter WriteError(this IJSValueWriter writer, T error)
{
- return (error is string errorMessage)
+ //TODO: Combine with error writing used for IReactPromise
+ var errorMessage = error as string;
+ return (errorMessage != null)
? writer.WriteArgs(new Dictionary { ["message"] = errorMessage })
: writer.WriteArgs(error);
}
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriterGenerator.cs b/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriterGenerator.cs
index bcc70b12680..789eec48181 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriterGenerator.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/JSValueWriterGenerator.cs
@@ -194,7 +194,7 @@ private static Delegate GenerateWriteValueFromGenericExtension(Type valueType)
// It cannot be an extension method because it would conflict with the generic
// extension method that uses T value type.
- public static void WriteEnum(IJSValueWriter writer, TEnum value) where TEnum : Enum
+ public static void WriteEnum(IJSValueWriter writer, TEnum value) /*TODO: Add in C# 7.3: where TEnum : Enum*/
{
writer.WriteValue((int)(object)value);
}
diff --git a/vnext/Microsoft.ReactNative.SharedManaged/OneOf.cs b/vnext/Microsoft.ReactNative.SharedManaged/OneOf.cs
index fc8602b8c56..b1e793f3c58 100644
--- a/vnext/Microsoft.ReactNative.SharedManaged/OneOf.cs
+++ b/vnext/Microsoft.ReactNative.SharedManaged/OneOf.cs
@@ -21,7 +21,7 @@ public OneOf1(T1 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -46,7 +46,7 @@ public OneOf2(T2 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -77,7 +77,7 @@ public OneOf3(T3 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -114,7 +114,7 @@ public OneOf4(T4 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -157,7 +157,7 @@ public OneOf5(T5 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -206,7 +206,7 @@ public OneOf6(T6 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
@@ -261,7 +261,7 @@ public OneOf7(T7 value)
public bool TryGet(out T value)
{
bool result = (Value != null && typeof(T) == Value.GetType());
- value = result ? (T)Value : default;
+ value = result ? (T)Value : default(T);
return result;
}
}
diff --git a/vnext/Microsoft.ReactNative/pch.h b/vnext/Microsoft.ReactNative/pch.h
index 1ffb80c77ae..1ca56659815 100644
--- a/vnext/Microsoft.ReactNative/pch.h
+++ b/vnext/Microsoft.ReactNative/pch.h
@@ -1,9 +1,11 @@
-#pragma once
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+#pragma once
+
#include
#include
#include
#include
#include "HResult.h"
+#include "folly/dynamic.h"
diff --git a/vnext/ReactWindows-Universal.sln b/vnext/ReactWindows-Universal.sln
index 7a982c30a4a..c154e02a60d 100644
--- a/vnext/ReactWindows-Universal.sln
+++ b/vnext/ReactWindows-Universal.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29215.179
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.960
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}"
EndProject
@@ -89,23 +89,26 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx",
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.ReactNative.SharedManaged", "Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.shproj", "{67A1076F-7790-4203-86EA-4402CCB5E782}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx.UnitTests", "Microsoft.ReactNative.Cxx.UnitTests\Microsoft.ReactNative.Cxx.UnitTests.vcxproj", "{6C60E295-C8CA-4DC5-B8BE-09888F58B249}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
Chakra\Chakra.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
Shared\Shared.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
+ Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{6c60e295-c8ca-4dc5-b8be-09888f58b249}*SharedItemsImports = 4
JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4
Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9
Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
- Debug|ARM = Debug|ARM
+ Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
- Release|ARM = Release|ARM
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
@@ -236,6 +239,16 @@ Global
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Debug|ARM.ActiveCfg = Debug|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Debug|x64.ActiveCfg = Debug|x64
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Debug|x64.Build.0 = Debug|x64
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Debug|x86.ActiveCfg = Debug|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Debug|x86.Build.0 = Debug|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Release|ARM.ActiveCfg = Release|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Release|x64.ActiveCfg = Release|x64
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Release|x64.Build.0 = Release|x64
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Release|x86.ActiveCfg = Release|Win32
+ {6C60E295-C8CA-4DC5-B8BE-09888F58B249}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/yarn.lock b/yarn.lock
index 222def14e8d..a3549b7051f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10054,9 +10054,10 @@ react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
-"react-native@https://github.com/microsoft/react-native/archive/v0.60.0-microsoft.28.tar.gz":
- version "0.60.0-microsoft.28"
- resolved "https://github.com/microsoft/react-native/archive/v0.60.0-microsoft.28.tar.gz#fad0f343cf2ee7c277f89b86f770efa71872839e"
+"react-native@https://github.com/microsoft/react-native/archive/v0.60.0-microsoft.31.tar.gz":
+ version "0.60.0-microsoft.31"
+ uid "26b4041e78b54517e3494beb6478bc7ee0a3a726"
+ resolved "https://github.com/microsoft/react-native/archive/v0.60.0-microsoft.31.tar.gz#26b4041e78b54517e3494beb6478bc7ee0a3a726"
dependencies:
"@babel/core" "^7.4.0"
"@babel/generator" "^7.4.0"