Skip to content

Commit

Permalink
Merge latest changes from napa/vanilla
Browse files Browse the repository at this point in the history
  • Loading branch information
Asi Bross committed Jun 28, 2017
1 parent f24ff3b commit 0862f5f
Show file tree
Hide file tree
Showing 125 changed files with 1,912 additions and 5,617 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ zone.execute(
return text;
},
['hello world'])
.then((result: napa.zone.ExecuteResponse) => {
.then((result: napa.zone.Result) => {
console.log(result.value);
});
```
Expand Down
146 changes: 73 additions & 73 deletions cpp-test/api/zone-tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,102 +20,102 @@ TEST_CASE("zone apis", "[api]") {
SECTION("broadcast valid javascript") {
napa::Zone zone("zone1");

auto response = zone.BroadcastSync("var i = 3 + 5;");
auto result = zone.BroadcastSync("var i = 3 + 5;");

REQUIRE(response == NAPA_RESPONSE_SUCCESS);
REQUIRE(result == NAPA_RESULT_SUCCESS);
}

SECTION("broadcast illegal javascript") {
napa::Zone zone("zone1");

auto response = zone.BroadcastSync("var i = 3 +");
auto result = zone.BroadcastSync("var i = 3 +");

REQUIRE(response == NAPA_RESPONSE_BROADCAST_SCRIPT_ERROR);
REQUIRE(result == NAPA_RESULT_BROADCAST_SCRIPT_ERROR);
}

SECTION("broadcast and execute javascript") {
napa::Zone zone("zone1");

auto responseCode = zone.BroadcastSync("function func(a, b) { return Number(a) + Number(b); }");
REQUIRE(responseCode == NAPA_RESPONSE_SUCCESS);
auto resultCode = zone.BroadcastSync("function func(a, b) { return Number(a) + Number(b); }");
REQUIRE(resultCode == NAPA_RESULT_SUCCESS);

napa::ExecuteRequest request;
request.function = NAPA_STRING_REF("func");
request.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };
napa::FunctionSpec spec;
spec.function = NAPA_STRING_REF("func");
spec.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };

auto response = zone.ExecuteSync(request);
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "5");
auto result = zone.ExecuteSync(spec);
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "5");
}

SECTION("broadcast and execute javascript async") {
napa::Zone zone("zone1");

std::promise<napa::ExecuteResponse> promise;
std::promise<napa::Result> promise;
auto future = promise.get_future();

zone.Broadcast("function func(a, b) { return Number(a) + Number(b); }", [&promise, &zone](napa::ResponseCode) {
napa::ExecuteRequest request;
request.function = NAPA_STRING_REF("func");
request.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };
zone.Broadcast("function func(a, b) { return Number(a) + Number(b); }", [&promise, &zone](napa::ResultCode) {
napa::FunctionSpec spec;
spec.function = NAPA_STRING_REF("func");
spec.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };

zone.Execute(request, [&promise](napa::ExecuteResponse response) {
promise.set_value(std::move(response));
zone.Execute(spec, [&promise](napa::Result result) {
promise.set_value(std::move(result));
});
});

auto response = future.get();
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "5");
auto result = future.get();
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "5");
}

SECTION("broadcast and execute javascript without timing out") {
napa::Zone zone("zone1");

std::promise<napa::ExecuteResponse> promise;
std::promise<napa::Result> promise;
auto future = promise.get_future();

// Warmup to avoid loading napajs on first call
zone.BroadcastSync("require('napajs');");

zone.Broadcast("function func(a, b) { return Number(a) + Number(b); }", [&promise, &zone](napa::ResponseCode) {
napa::ExecuteRequest request;
request.function = NAPA_STRING_REF("func");
request.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };
request.options.timeout = 100;
zone.Broadcast("function func(a, b) { return Number(a) + Number(b); }", [&promise, &zone](napa::ResultCode) {
napa::FunctionSpec spec;
spec.function = NAPA_STRING_REF("func");
spec.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };
spec.options.timeout = 100;

zone.Execute(request, [&promise](napa::ExecuteResponse response) {
promise.set_value(std::move(response));
zone.Execute(spec, [&promise](napa::Result result) {
promise.set_value(std::move(result));
});
});

auto response = future.get();
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "5");
auto result = future.get();
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "5");
}

SECTION("broadcast and execute javascript with exceeded timeout") {
napa::Zone zone("zone1");

std::promise<napa::ExecuteResponse> promise;
std::promise<napa::Result> promise;
auto future = promise.get_future();

// Warmup to avoid loading napajs on first call
zone.BroadcastSync("require('napajs');");

zone.Broadcast("function func() { while(true) {} }", [&promise, &zone](napa::ResponseCode) {
napa::ExecuteRequest request;
request.function = NAPA_STRING_REF("func");
request.options.timeout = 200;
zone.Broadcast("function func() { while(true) {} }", [&promise, &zone](napa::ResultCode) {
napa::FunctionSpec spec;
spec.function = NAPA_STRING_REF("func");
spec.options.timeout = 200;

zone.Execute(request, [&promise](napa::ExecuteResponse response) {
promise.set_value(std::move(response));
zone.Execute(spec, [&promise](napa::Result result) {
promise.set_value(std::move(result));
});
});

auto response = future.get();
REQUIRE(response.code == NAPA_RESPONSE_TIMEOUT);
REQUIRE(response.errorMessage == "Execute exceeded timeout");
auto result = future.get();
REQUIRE(result.code == NAPA_RESULT_TIMEOUT);
REQUIRE(result.errorMessage == "Terminated due to timeout");
}

SECTION("execute 2 javascript functions, one succeeds and one times out") {
Expand All @@ -125,66 +125,66 @@ TEST_CASE("zone apis", "[api]") {
zone.BroadcastSync("require('napajs');");

auto res = zone.BroadcastSync("function f1(a, b) { return Number(a) + Number(b); }");
REQUIRE(res == NAPA_RESPONSE_SUCCESS);
REQUIRE(res == NAPA_RESULT_SUCCESS);
res = zone.BroadcastSync("function f2() { while(true) {} }");
REQUIRE(res == NAPA_RESPONSE_SUCCESS);
REQUIRE(res == NAPA_RESULT_SUCCESS);

std::promise<napa::ExecuteResponse> promise1;
std::promise<napa::Result> promise1;
auto future1 = promise1.get_future();

std::promise<napa::ExecuteResponse> promise2;
std::promise<napa::Result> promise2;
auto future2 = promise2.get_future();

napa::ExecuteRequest request1;
napa::FunctionSpec request1;
request1.function = NAPA_STRING_REF("f1");
request1.arguments = { NAPA_STRING_REF("2"), NAPA_STRING_REF("3") };
request1.options.timeout = 100;

napa::ExecuteRequest request2;
napa::FunctionSpec request2;
request2.function = NAPA_STRING_REF("f2");
request2.options.timeout = 100;

zone.Execute(request1, [&promise1](napa::ExecuteResponse response) {
promise1.set_value(std::move(response));
zone.Execute(request1, [&promise1](napa::Result result) {
promise1.set_value(std::move(result));
});

zone.Execute(request2, [&promise2](napa::ExecuteResponse response) {
promise2.set_value(std::move(response));
zone.Execute(request2, [&promise2](napa::Result result) {
promise2.set_value(std::move(result));
});

auto response = future1.get();
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "5");
auto result = future1.get();
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "5");

response = future2.get();
REQUIRE(response.code == NAPA_RESPONSE_TIMEOUT);
REQUIRE(response.errorMessage == "Execute exceeded timeout");
result = future2.get();
REQUIRE(result.code == NAPA_RESULT_TIMEOUT);
REQUIRE(result.errorMessage == "Terminated due to timeout");
}

SECTION("broadcast javascript requiring a module") {
napa::Zone zone("zone1");

auto responseCode = zone.BroadcastSync("var path = require('path'); function func() { return path.extname('test.txt'); }");
REQUIRE(responseCode == NAPA_RESPONSE_SUCCESS);
auto resultCode = zone.BroadcastSync("var path = require('path'); function func() { return path.extname('test.txt'); }");
REQUIRE(resultCode == NAPA_RESULT_SUCCESS);

napa::ExecuteRequest request;
request.function = NAPA_STRING_REF("func");
napa::FunctionSpec spec;
spec.function = NAPA_STRING_REF("func");

auto response = zone.ExecuteSync(request);
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "\".txt\"");
auto result = zone.ExecuteSync(spec);
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "\".txt\"");
}

SECTION("execute function in a module") {
napa::Zone zone("zone1");

napa::ExecuteRequest request;
request.module = NAPA_STRING_REF("path");
request.function = NAPA_STRING_REF("extname");
request.arguments = { NAPA_STRING_REF("\"test.txt\"") };
napa::FunctionSpec spec;
spec.module = NAPA_STRING_REF("path");
spec.function = NAPA_STRING_REF("extname");
spec.arguments = { NAPA_STRING_REF("\"test.txt\"") };

auto response = zone.ExecuteSync(request);
REQUIRE(response.code == NAPA_RESPONSE_SUCCESS);
REQUIRE(response.returnValue == "\".txt\"");
auto result = zone.ExecuteSync(spec);
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "\".txt\"");
}
}
43 changes: 23 additions & 20 deletions cpp-test/component/napa-component-tests.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<ItemDefinitionGroup>
<ClCompile>
<DisableSpecificWarnings>4100;4251;4459;4996</DisableSpecificWarnings>
<PreprocessorDefinitions>BUILDING_NAPA_EXTENSION;NAPA_EXPORTS;BUILDING_V8_SHARED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NAPA_EXPORTS;NAPA_BINDING_EXPORTS;BUILDING_NAPA_EXTENSION;BUILDING_V8_SHARED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(NapaVanillaRoot)\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(NapaVanillaRoot)\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(NapaVanillaRoot)\test\component;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
Expand All @@ -49,30 +49,32 @@
<ItemGroup>
<ClCompile Include="$(NapaVanillaRoot)\src\api\api.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\memory\built-in-allocators.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\async-runner.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\binary-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\core-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\javascript-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\json-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\module-cache.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\module-loader-helpers.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\module-resolver.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\worker-context.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\binary-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\core-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\javascript-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\json-module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\module-cache.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\module-loader.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\module-loader-helpers.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\loader\module-resolver.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\module\module.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\platform\win\platform.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\platform\win\thread-local-storage.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\providers\providers.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\async-complete-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\worker.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\broadcast-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\execute-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\simple-thread-pool.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\terminable-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\scheduler\timeout-service.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\settings\settings-parser.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\store\store.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\zone-impl.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\v8\v8-common.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\async-complete-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\call-context.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\call-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\eval-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\napa-zone.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\node-zone.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\simple-thread-pool.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\terminable-task.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\timeout-service.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\worker.cpp" />
<ClCompile Include="$(NapaVanillaRoot)\src\zone\worker-context.cpp" />
</ItemGroup>

<!-- Core modules -->
Expand All @@ -82,8 +84,9 @@
<!-- Test code -->
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)\worker-tests.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)\node-zone-tests.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)\tasks-tests.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)\worker-tests.cpp" />
</ItemGroup>

<!-- Test artifacts binplace -->
Expand Down
2 changes: 1 addition & 1 deletion cpp-test/component/napa-initialization-guard.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class NapaInitializationGuard {
class NapaInitialization {
public:
NapaInitialization() {
napa::PlatformSettings settings;
napa::settings::PlatformSettings settings;
settings.loggingProvider = "console";
napa::providers::Initialize(settings);

Expand Down
53 changes: 53 additions & 0 deletions cpp-test/component/node-zone-tests.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "catch.hpp"

#include "zone/node-zone.h"

#include <future>

using namespace napa;
using namespace napa::zone;

TEST_CASE("node zone not available before init", "[node-zone]") {
auto zone = NodeZone::Get();
REQUIRE(zone == nullptr);
}

TEST_CASE("node zone delegate should work after init", "[node-zone]") {
auto broadcast = [](const std::string& source, BroadcastCallback callback){
callback(NAPA_RESULT_SUCCESS);
};

auto execute = [](const FunctionSpec& spec, ExecuteCallback callback) {
callback({ NAPA_RESULT_SUCCESS, "", std::string("hello world"), nullptr });
};

NodeZone::Init(broadcast, execute);

auto zone = NodeZone::Get();
REQUIRE(zone != nullptr);

{
std::promise<ResultCode> promise;
auto future = promise.get_future();

zone->Broadcast("", [&promise](ResultCode resultCode) {
promise.set_value(NAPA_RESULT_SUCCESS);
});

REQUIRE(future.get() == NAPA_RESULT_SUCCESS);
}

{
std::promise<Result> promise;
auto future = promise.get_future();

FunctionSpec spec;
zone->Execute(spec, [&promise](Result result) {
promise.set_value(std::move(result));
});

auto result = future.get();
REQUIRE(result.code == NAPA_RESULT_SUCCESS);
REQUIRE(result.returnValue == "hello world");
}
}
Loading

0 comments on commit 0862f5f

Please sign in to comment.