Still adding more tests, fixed exception-handling bug.
This commit is contained in:
parent
79e4dccccd
commit
58ec66f454
5 changed files with 451 additions and 241 deletions
|
@ -2,18 +2,11 @@
|
|||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7b89ff1e-1260-4dcf-9c3d-345de0471ea1" name="Default" comment="">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/dbnavigator.xml" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/anonymous_service_test.dart" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/exception_test.dart" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/typed_service_test.dart" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/view_generator_test.dart" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/server_test.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/angel_base.dart" afterPath="$PROJECT_DIR$/lib/src/http/angel_base.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" afterPath="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/anonymous_service.dart" afterPath="$PROJECT_DIR$/lib/src/http/anonymous_service.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/typed_service.dart" afterPath="$PROJECT_DIR$/lib/src/http/typed_service.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/hooked_service.dart" afterPath="$PROJECT_DIR$/lib/src/http/hooked_service.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/server.dart" afterPath="$PROJECT_DIR$/lib/src/http/server.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/all.dart" afterPath="$PROJECT_DIR$/test/all.dart" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/controller_test.dart" afterPath="$PROJECT_DIR$/test/controller_test.dart" />
|
||||
</list>
|
||||
<ignored path="$PROJECT_DIR$/.tmp/" />
|
||||
<ignored path="$PROJECT_DIR$/temp/" />
|
||||
|
@ -26,7 +19,7 @@
|
|||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="CoverageDataManager">
|
||||
<SUITE FILE_PATH="coverage/framework$All_Tests__for_coverage_.coverage" NAME="All Tests (for coverage) Coverage Results" MODIFIED="1498774624592" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="DartCoverageRunner" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" CONTEXT_FILE_PATH="$PROJECT_DIR$/test/all.dart" />
|
||||
<SUITE FILE_PATH="coverage/framework$All_Tests__for_coverage_.coverage" NAME="All Tests (for coverage) Coverage Results" MODIFIED="1498830529713" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="DartCoverageRunner" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" CONTEXT_FILE_PATH="$PROJECT_DIR$/test/all.dart" />
|
||||
</component>
|
||||
<component name="CreatePatchCommitExecutor">
|
||||
<option name="PATCH_PATH" value="" />
|
||||
|
@ -36,15 +29,17 @@
|
|||
<favorites_list name="framework" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<splitter split-orientation="horizontal" split-proportion="0.37098846">
|
||||
<splitter split-orientation="horizontal" split-proportion="0.41406664">
|
||||
<split-first>
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file leaf-file-name="controller.dart" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
|
||||
<file leaf-file-name="server.dart" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1491">
|
||||
<caret line="78" column="3" lean-forward="true" selection-start-line="78" selection-start-column="3" selection-end-line="78" selection-end-column="3" />
|
||||
<folding />
|
||||
<state relative-caret-position="-3416">
|
||||
<caret line="486" column="37" lean-forward="true" selection-start-line="486" selection-start-column="37" selection-end-line="486" selection-end-column="37" />
|
||||
<folding>
|
||||
<element signature="e#38#58#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -53,11 +48,11 @@
|
|||
</split-first>
|
||||
<split-second>
|
||||
<leaf>
|
||||
<file leaf-file-name="controller_test.dart" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
||||
<file leaf-file-name="server_test.dart" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/test/server_test.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="333">
|
||||
<caret line="92" column="33" lean-forward="false" selection-start-line="92" selection-start-column="33" selection-end-line="92" selection-end-column="33" />
|
||||
<state relative-caret-position="246">
|
||||
<caret line="187" column="53" lean-forward="true" selection-start-line="187" selection-start-column="53" selection-end-line="187" selection-end-column="53" />
|
||||
<folding>
|
||||
<element signature="e#0#20#0" expanded="true" />
|
||||
</folding>
|
||||
|
@ -65,16 +60,6 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="routable.dart" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-2212">
|
||||
<caret line="26" column="38" lean-forward="false" selection-start-line="26" selection-start-column="38" selection-end-line="26" selection-end-column="38" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</split-second>
|
||||
</splitter>
|
||||
|
@ -88,16 +73,6 @@
|
|||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>BEFORE</find>
|
||||
<find>_onError</find>
|
||||
<find>_fatalErrorStream.add</find>
|
||||
<find>throw</find>
|
||||
<find>upa</find>
|
||||
<find>transform</find>
|
||||
<find>isAfter</find>
|
||||
<find>isBefore</find>
|
||||
<find>close</find>
|
||||
<find>!_isOpen</find>
|
||||
<find>end</find>
|
||||
<find>reopen</find>
|
||||
<find>REDIRECT</find>
|
||||
|
@ -118,6 +93,16 @@
|
|||
<find>index</find>
|
||||
<find>typed</find>
|
||||
<find>x</find>
|
||||
<find>_afterP</find>
|
||||
<find>_beforeP</find>
|
||||
<find>optim</find>
|
||||
<find>??=</find>
|
||||
<find>dump</find>
|
||||
<find>void li</find>
|
||||
<find>_onError</find>
|
||||
<find>Unhandled exc</find>
|
||||
<find>handleAn</find>
|
||||
<find>Tom Fo</find>
|
||||
</findStrings>
|
||||
<replaceStrings>
|
||||
<replace>_isClosed</replace>
|
||||
|
@ -143,7 +128,6 @@
|
|||
<option value="$PROJECT_DIR$/test/hooked_test.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/fatal_error.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/memory_service.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/hooked_service.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/map_service.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/hooks.dart" />
|
||||
<option value="$PROJECT_DIR$/test/util_test.dart" />
|
||||
|
@ -156,7 +140,6 @@
|
|||
<option value="$PROJECT_DIR$/lib/src/http/routable.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/response_context.dart" />
|
||||
<option value="$PROJECT_DIR$/README.md" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/server.dart" />
|
||||
<option value="$PROJECT_DIR$/pubspec.yaml" />
|
||||
<option value="$PROJECT_DIR$/test/view_generator_test.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/angel_base.dart" />
|
||||
|
@ -165,9 +148,12 @@
|
|||
<option value="$PROJECT_DIR$/lib/src/http/anonymous_service.dart" />
|
||||
<option value="$PROJECT_DIR$/test/anonymous_service_test.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/typed_service.dart" />
|
||||
<option value="$PROJECT_DIR$/test/all.dart" />
|
||||
<option value="$PROJECT_DIR$/test/typed_service_test.dart" />
|
||||
<option value="$PROJECT_DIR$/test/controller_test.dart" />
|
||||
<option value="$PROJECT_DIR$/test/all.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/hooked_service.dart" />
|
||||
<option value="$PROJECT_DIR$/lib/src/http/server.dart" />
|
||||
<option value="$PROJECT_DIR$/test/server_test.dart" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
|
@ -393,6 +379,11 @@
|
|||
<recursive>false</recursive>
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="false" name="tests in server_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
||||
<option name="filePath" value="$PROJECT_DIR$/test/server_test.dart" />
|
||||
<option name="testName" value="server_test.dart" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="false" name="tests in anonymous_service_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
||||
<option name="filePath" value="$PROJECT_DIR$/test/anonymous_service_test.dart" />
|
||||
<option name="testName" value="anonymous_service_test.dart" />
|
||||
|
@ -419,18 +410,19 @@
|
|||
<option name="testName" value="precontained_test.dart" />
|
||||
<method />
|
||||
</configuration>
|
||||
<list size="11">
|
||||
<item index="0" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" />
|
||||
<item index="3" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" />
|
||||
<item index="4" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" />
|
||||
<item index="5" class="java.lang.String" itemvalue="Dart Test.Controller Tests" />
|
||||
<item index="6" class="java.lang.String" itemvalue="Dart Test.DI Tests" />
|
||||
<item index="7" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" />
|
||||
<item index="8" class="java.lang.String" itemvalue="Dart Test.Routing Tests" />
|
||||
<item index="9" class="java.lang.String" itemvalue="Dart Test.All Tests" />
|
||||
<item index="10" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" />
|
||||
<list size="12">
|
||||
<item index="0" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" />
|
||||
<item index="3" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" />
|
||||
<item index="4" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" />
|
||||
<item index="5" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" />
|
||||
<item index="6" class="java.lang.String" itemvalue="Dart Test.Controller Tests" />
|
||||
<item index="7" class="java.lang.String" itemvalue="Dart Test.DI Tests" />
|
||||
<item index="8" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" />
|
||||
<item index="9" class="java.lang.String" itemvalue="Dart Test.Routing Tests" />
|
||||
<item index="10" class="java.lang.String" itemvalue="Dart Test.All Tests" />
|
||||
<item index="11" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="ShelveChangesManager" show_recycled="false">
|
||||
|
@ -464,7 +456,8 @@
|
|||
<workItem from="1497200155899" duration="120000" />
|
||||
<workItem from="1497825298573" duration="2603000" />
|
||||
<workItem from="1497985699191" duration="902000" />
|
||||
<workItem from="1498770817945" duration="3831000" />
|
||||
<workItem from="1498770817945" duration="3845000" />
|
||||
<workItem from="1498826328044" duration="4240000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Re-designed exception">
|
||||
<created>1481237183504</created>
|
||||
|
@ -585,43 +578,50 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1497985995955</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="18" />
|
||||
<task id="LOCAL-00018" summary="Added more tests.">
|
||||
<created>1498774662381</created>
|
||||
<option name="number" value="00018" />
|
||||
<option name="presentableId" value="LOCAL-00018" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1498774662382</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="19" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TestHistory">
|
||||
<history-entry file="Controller_Tests - 2017.06.29 at 18h 07m 41s.xml">
|
||||
<configuration name="Controller Tests" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 41m 06s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="Controller_Tests - 2017.06.29 at 18h 08m 58s.xml">
|
||||
<configuration name="Controller Tests" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 41m 28s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="Controller_Tests - 2017.06.29 at 18h 10m 24s.xml">
|
||||
<configuration name="Controller Tests" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 44m 00s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="Controller_Tests - 2017.06.29 at 18h 11m 22s.xml">
|
||||
<configuration name="Controller Tests" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 45m 33s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="Controller_Tests - 2017.06.29 at 18h 15m 29s.xml">
|
||||
<configuration name="Controller Tests" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 46m 44s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="tests_in_typed_service_test_dart - 2017.06.29 at 18h 01m 34s.xml">
|
||||
<configuration name="tests in typed_service_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 46m 53s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="tests_in_typed_service_test_dart - 2017.06.29 at 18h 01m 46s.xml">
|
||||
<configuration name="tests in typed_service_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 47m 15s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="tests_in_typed_service_test_dart - 2017.06.29 at 18h 02m 10s.xml">
|
||||
<configuration name="tests in typed_service_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 47m 30s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="tests_in_typed_service_test_dart - 2017.06.29 at 18h 04m 19s.xml">
|
||||
<configuration name="tests in typed_service_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 47m 46s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
<history-entry file="tests_in_typed_service_test_dart - 2017.06.29 at 18h 05m 00s.xml">
|
||||
<configuration name="tests in typed_service_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
<history-entry file="tests_in_server_test_dart - 2017.06.30 at 09h 48m 07s.xml">
|
||||
<configuration name="tests in server_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||
</history-entry>
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="17287000" />
|
||||
<option name="totallyTimeSpent" value="21541000" />
|
||||
</component>
|
||||
<component name="TodoView">
|
||||
<todo-panel id="selected-file">
|
||||
|
@ -638,25 +638,25 @@
|
|||
<layout>
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3292683" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32998413" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32616082" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="DB Execution Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="DB Execution Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Dart Analysis" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32802936" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.28425822" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.34314835" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3250283" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1760973" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3295583" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.1760973" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Tool Output" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32616082" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3295583" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="ANTLR Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
|
@ -683,27 +683,14 @@
|
|||
<MESSAGE value="+1" />
|
||||
<MESSAGE value="1.0.4" />
|
||||
<MESSAGE value="Patch" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Patch" />
|
||||
<MESSAGE value="Added more tests." />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Added more tests." />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/test/hooked_test.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1275">
|
||||
<caret line="90" column="29" lean-forward="true" selection-start-line="90" selection-start-column="29" selection-end-line="90" selection-end-column="29" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/common.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="195">
|
||||
<caret line="13" column="1" lean-forward="true" selection-start-line="13" selection-start-column="1" selection-end-line="13" selection-end-column="1" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
|
@ -736,7 +723,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="34" lean-forward="true" selection-start-line="3" selection-start-column="34" selection-end-line="3" selection-end-column="34" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -857,14 +843,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="378">
|
||||
<caret line="23" column="9" lean-forward="false" selection-start-line="23" selection-start-column="9" selection-end-line="23" selection-end-column="9" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/hooked_service.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1722">
|
||||
<caret line="2" column="7" lean-forward="true" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -872,9 +850,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="21">
|
||||
<caret line="1" column="7" lean-forward="false" selection-start-line="1" selection-start-column="7" selection-end-line="1" selection-end-column="7" />
|
||||
<folding>
|
||||
<element signature="e#30#54#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -896,9 +871,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="63">
|
||||
<caret line="3" column="7" lean-forward="false" selection-start-line="3" selection-start-column="7" selection-end-line="3" selection-end-column="7" />
|
||||
<folding>
|
||||
<element signature="e#81#109#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -909,33 +881,11 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="7077">
|
||||
<caret line="345" column="2" lean-forward="false" selection-start-line="345" selection-start-column="2" selection-end-line="345" selection-end-column="2" />
|
||||
<folding>
|
||||
<element signature="e#48#68#0" expanded="true" />
|
||||
<marker date="1497837059798" expanded="true" signature="10472:10474" ph="{...}" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="7329">
|
||||
<caret line="364" column="7" lean-forward="true" selection-start-line="364" selection-start-column="7" selection-end-line="364" selection-end-column="7" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/README.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="84">
|
||||
<caret line="4" column="0" lean-forward="true" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
|
||||
<folding>
|
||||
<marker date="1497837224385" expanded="true" signature="588:776" ph="{...}" />
|
||||
</folding>
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
|
@ -945,9 +895,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="126">
|
||||
<caret line="6" column="38" lean-forward="true" selection-start-line="6" selection-start-column="38" selection-end-line="6" selection-end-column="38" />
|
||||
<folding>
|
||||
<element signature="e#0#54#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -963,9 +910,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="270">
|
||||
<caret line="60" column="31" lean-forward="true" selection-start-line="60" selection-start-column="31" selection-end-line="60" selection-end-column="31" />
|
||||
<folding>
|
||||
<element signature="e#0#22#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -981,10 +925,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-171">
|
||||
<caret line="9" column="2" lean-forward="false" selection-start-line="9" selection-start-column="2" selection-end-line="9" selection-end-column="2" />
|
||||
<folding>
|
||||
<element signature="e#0#20#0" expanded="true" />
|
||||
<marker date="1498772578410" expanded="true" signature="211:537" ph="{...}" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -992,7 +932,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1001,7 +940,7 @@
|
|||
<state relative-caret-position="249">
|
||||
<caret line="28" column="9" lean-forward="true" selection-start-line="28" selection-start-column="9" selection-end-line="28" selection-end-column="9" />
|
||||
<folding>
|
||||
<element signature="e#0#54#0" expanded="true" />
|
||||
<element signature="e#0#54#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
@ -1010,7 +949,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="210">
|
||||
<caret line="10" column="19" lean-forward="true" selection-start-line="10" selection-start-column="19" selection-end-line="10" selection-end-column="19" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1018,7 +956,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="307">
|
||||
<caret line="67" column="18" lean-forward="false" selection-start-line="67" selection-start-column="18" selection-end-line="67" selection-end-column="18" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1026,17 +963,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="261">
|
||||
<caret line="22" column="31" lean-forward="false" selection-start-line="22" selection-start-column="26" selection-end-line="22" selection-end-column="31" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/all.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="375">
|
||||
<caret line="27" column="45" lean-forward="false" selection-start-line="27" selection-start-column="45" selection-end-line="27" selection-end-column="45" />
|
||||
<folding>
|
||||
<element signature="e#0#58#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1044,9 +970,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="126">
|
||||
<caret line="6" column="0" lean-forward="true" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#0#54#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1054,7 +977,6 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="84">
|
||||
<caret line="15" column="29" lean-forward="false" selection-start-line="15" selection-start-column="29" selection-end-line="20" selection-end-column="32" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
@ -1062,35 +984,89 @@
|
|||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="294">
|
||||
<caret line="14" column="0" lean-forward="true" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1785">
|
||||
<caret line="92" column="33" lean-forward="false" selection-start-line="92" selection-start-column="33" selection-end-line="92" selection-end-column="33" />
|
||||
<folding>
|
||||
<element signature="e#0#20#0" expanded="true" />
|
||||
<element signature="e#0#20#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1491">
|
||||
<caret line="78" column="3" lean-forward="true" selection-start-line="78" selection-start-column="3" selection-end-line="78" selection-end-column="3" />
|
||||
<state relative-caret-position="231">
|
||||
<caret line="88" column="30" lean-forward="true" selection-start-line="88" selection-start-column="30" selection-end-line="88" selection-end-column="30" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
||||
<entry file="file://$PROJECT_DIR$/test/all.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="333">
|
||||
<caret line="92" column="33" lean-forward="false" selection-start-line="92" selection-start-column="33" selection-end-line="92" selection-end-column="33" />
|
||||
<state relative-caret-position="462">
|
||||
<caret line="22" column="33" lean-forward="true" selection-start-line="22" selection-start-column="33" selection-end-line="22" selection-end-column="33" />
|
||||
<folding>
|
||||
<element signature="e#0#58#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/hooked_service.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="378">
|
||||
<caret line="83" column="24" lean-forward="false" selection-start-line="83" selection-start-column="24" selection-end-line="83" selection-end-column="24" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="458">
|
||||
<caret line="154" column="0" lean-forward="false" selection-start-line="154" selection-start-column="0" selection-end-line="154" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="200">
|
||||
<caret line="295" column="25" lean-forward="false" selection-start-line="295" selection-start-column="25" selection-end-line="295" selection-end-column="25" />
|
||||
<folding>
|
||||
<element signature="e#48#68#0" expanded="true" />
|
||||
<marker date="1497837059798" expanded="true" signature="10472:10474" ph="{...}" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/json_god-2.0.0-beta+1/lib/src/serialize.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="245">
|
||||
<caret line="40" column="27" lean-forward="false" selection-start-line="40" selection-start-column="27" selection-end-line="40" selection-end-column="27" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/test/server_test.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="246">
|
||||
<caret line="187" column="53" lean-forward="true" selection-start-line="187" selection-start-column="53" selection-end-line="187" selection-end-column="53" />
|
||||
<folding>
|
||||
<element signature="e#0#20#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
|
||||
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-2212">
|
||||
<caret line="26" column="38" lean-forward="false" selection-start-line="26" selection-start-column="38" selection-end-line="26" selection-end-column="38" />
|
||||
<folding />
|
||||
<state relative-caret-position="-3416">
|
||||
<caret line="486" column="37" lean-forward="true" selection-start-line="486" selection-start-column="37" selection-end-line="486" selection-end-column="37" />
|
||||
<folding>
|
||||
<element signature="e#38#58#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
|
|
@ -81,8 +81,7 @@ class HookedService extends Service {
|
|||
afterModified._close();
|
||||
afterUpdated._close();
|
||||
afterRemoved._close();
|
||||
|
||||
if (inner is HookedService) inner.close();
|
||||
await inner.close();
|
||||
}
|
||||
|
||||
/// Adds hooks to this instance.
|
||||
|
|
|
@ -136,11 +136,6 @@ class Angel extends AngelBase {
|
|||
/// The native HttpServer running this instancce.
|
||||
HttpServer httpServer;
|
||||
|
||||
/// Handles a server error.
|
||||
_onError(e, [StackTrace st]) {
|
||||
_fatalErrorStream.add(new AngelFatalError(error: e, stack: st));
|
||||
}
|
||||
|
||||
/// Starts the server.
|
||||
///
|
||||
/// Returns false on failure; otherwise, returns the HttpServer.
|
||||
|
@ -254,37 +249,32 @@ class Angel extends AngelBase {
|
|||
|
||||
Future getHandlerResult(
|
||||
handler, RequestContext req, ResponseContext res) async {
|
||||
if (handler is RequestMiddleware) {
|
||||
/*if (handler is RequestMiddleware) {
|
||||
var result = await handler(req, res);
|
||||
|
||||
if (result is RequestHandler)
|
||||
return await getHandlerResult(result, req, res);
|
||||
else
|
||||
return result;
|
||||
}
|
||||
}*/
|
||||
|
||||
if (handler is RequestHandler) {
|
||||
var result = await handler(req, res);
|
||||
if (result is RequestHandler)
|
||||
return await getHandlerResult(result, req, res);
|
||||
else
|
||||
return result;
|
||||
return await getHandlerResult(result, req, res);
|
||||
}
|
||||
|
||||
if (handler is Future) {
|
||||
var result = await handler;
|
||||
if (result is RequestHandler)
|
||||
return await getHandlerResult(result, req, res);
|
||||
else
|
||||
return result;
|
||||
return await getHandlerResult(result, req, res);
|
||||
}
|
||||
|
||||
if (handler is Function) {
|
||||
var result = await runContained(handler, req, res);
|
||||
if (result is RequestHandler)
|
||||
return await getHandlerResult(result, req, res);
|
||||
else
|
||||
return result;
|
||||
return await getHandlerResult(result, req, res);
|
||||
}
|
||||
|
||||
if (handler is Stream) {
|
||||
return await getHandlerResult(await handler.toList(), req, res);
|
||||
}
|
||||
|
||||
var middleware = (req.app ?? this).findMiddleware(handler);
|
||||
|
@ -300,17 +290,13 @@ class Angel extends AngelBase {
|
|||
handler, RequestContext req, ResponseContext res) async {
|
||||
var result = await getHandlerResult(handler, req, res);
|
||||
|
||||
if (result is Future) {
|
||||
return await executeHandler(await result, req, res);
|
||||
} else if (result is bool) {
|
||||
if (result is bool) {
|
||||
return result;
|
||||
} else if (result != null) {
|
||||
res.serialize(result,
|
||||
contentType: res.headers[HttpHeaders.CONTENT_TYPE] ??
|
||||
ContentType.JSON.mimeType);
|
||||
return false;
|
||||
} else if (result is Stream) {
|
||||
return await executeHandler(await result.toList(), req, res);
|
||||
} else
|
||||
return res.isOpen;
|
||||
}
|
||||
|
@ -338,39 +324,36 @@ class Angel extends AngelBase {
|
|||
return parent != null ? parent.findProperty(key) : null;
|
||||
}
|
||||
|
||||
_handleAngelHttpException(AngelHttpException e, StackTrace st,
|
||||
RequestContext req, ResponseContext res, HttpRequest request) async {
|
||||
try {
|
||||
if (req == null || res == null) {
|
||||
_fatalErrorStream.add(new AngelFatalError(
|
||||
request: request,
|
||||
error: e?.error ??
|
||||
e ??
|
||||
new Exception('Unhandled exception while handling request.'),
|
||||
stack: st));
|
||||
return;
|
||||
}
|
||||
|
||||
res.statusCode = e.statusCode;
|
||||
List<String> accept = request?.headers[HttpHeaders.ACCEPT] ?? ['*/*'];
|
||||
if (accept.isEmpty ||
|
||||
accept.contains('*/*') ||
|
||||
accept.contains(ContentType.JSON.mimeType) ||
|
||||
accept.contains("application/javascript")) {
|
||||
res.serialize(e.toMap(),
|
||||
contentType: res.headers[HttpHeaders.CONTENT_TYPE] ??
|
||||
ContentType.JSON.mimeType);
|
||||
} else {
|
||||
await errorHandler(e, req, res);
|
||||
}
|
||||
} catch (_) {
|
||||
handleAngelHttpException(AngelHttpException e, StackTrace st,
|
||||
RequestContext req, ResponseContext res, HttpRequest request,
|
||||
{bool ignoreFinalizers: false}) async {
|
||||
if (req == null || res == null) {
|
||||
_fatalErrorStream.add(new AngelFatalError(
|
||||
request: request,
|
||||
error: e?.error ??
|
||||
e ??
|
||||
new Exception('Unhandled exception while handling request.'),
|
||||
new Exception(
|
||||
'handleAngelHttpException was called on a null request or response context.'),
|
||||
stack: st));
|
||||
return;
|
||||
}
|
||||
|
||||
res.statusCode = e.statusCode;
|
||||
List<String> accept = request?.headers[HttpHeaders.ACCEPT] ?? ['*/*'];
|
||||
if (accept.isEmpty ||
|
||||
accept.contains('*/*') ||
|
||||
accept.contains(ContentType.JSON.mimeType) ||
|
||||
accept.contains("application/javascript")) {
|
||||
res.serialize(e.toMap(),
|
||||
contentType: res.headers[HttpHeaders.CONTENT_TYPE] ??
|
||||
ContentType.JSON.mimeType);
|
||||
} else {
|
||||
await errorHandler(e, req, res);
|
||||
}
|
||||
|
||||
res.end();
|
||||
await sendResponse(request, req, res,
|
||||
ignoreFinalizers: ignoreFinalizers == true);
|
||||
}
|
||||
|
||||
/// Handles a single request.
|
||||
|
@ -415,17 +398,15 @@ class Angel extends AngelBase {
|
|||
// 'Handler completed successfully, did not terminate response: $handler');
|
||||
}
|
||||
} on AngelHttpException catch (e, st) {
|
||||
return await _handleAngelHttpException(e, st, req, res, request);
|
||||
return await handleAngelHttpException(e, st, req, res, request);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
await sendResponse(request, req, res);
|
||||
} on AngelHttpException catch (e, st) {
|
||||
return await _handleAngelHttpException(e, st, req, res, request);
|
||||
} catch (e, st) {
|
||||
_fatalErrorStream
|
||||
.add(new AngelFatalError(request: request, error: e, stack: st));
|
||||
return await handleAngelHttpException(e, st, req, res, request,
|
||||
ignoreFinalizers: true);
|
||||
}
|
||||
} catch (e, st) {
|
||||
_fatalErrorStream
|
||||
|
@ -442,6 +423,7 @@ class Angel extends AngelBase {
|
|||
/// You may [force] the optimization to run, if you are not running in production.
|
||||
void optimizeForProduction({bool force: false}) {
|
||||
if (isProduction == true || force == true) {
|
||||
_isProduction = true;
|
||||
_add(v) {
|
||||
if (v is Function && !_preContained.containsKey(v)) {
|
||||
_preContained[v] = preInject(v);
|
||||
|
@ -497,12 +479,15 @@ class Angel extends AngelBase {
|
|||
|
||||
/// Sends a response.
|
||||
Future sendResponse(
|
||||
HttpRequest request, RequestContext req, ResponseContext res) async {
|
||||
HttpRequest request, RequestContext req, ResponseContext res,
|
||||
{bool ignoreFinalizers: false}) async {
|
||||
_afterProcessed.add(request);
|
||||
|
||||
if (!res.willCloseItself) {
|
||||
for (var finalizer in responseFinalizers) {
|
||||
await finalizer(req, res);
|
||||
if (ignoreFinalizers != true) {
|
||||
for (var finalizer in responseFinalizers) {
|
||||
await finalizer(req, res);
|
||||
}
|
||||
}
|
||||
|
||||
if (res.isOpen) res.end();
|
||||
|
@ -532,10 +517,16 @@ class Angel extends AngelBase {
|
|||
}
|
||||
|
||||
/// Starts the server, wrapped in a [runZoned] call.
|
||||
void listen({InternetAddress address, int port: 3000}) {
|
||||
Future<HttpServer> listen({InternetAddress address, int port: 3000}) {
|
||||
var c = new Completer<HttpServer>();
|
||||
runZoned(() async {
|
||||
await startServer(address, port);
|
||||
}, onError: _onError);
|
||||
await startServer(address, port)
|
||||
.then(c.complete)
|
||||
.catchError(c.completeError);
|
||||
}, onError: (e, st) {
|
||||
_fatalErrorStream.add(new AngelFatalError(error: e, stack: st));
|
||||
});
|
||||
return c.future;
|
||||
}
|
||||
|
||||
/// Mounts the child on this router.
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'hooked_test.dart' as hooked;
|
|||
import 'precontained_test.dart' as precontained;
|
||||
import 'routing_test.dart' as routing;
|
||||
import 'serialize_test.dart' as serialize;
|
||||
import 'server_test.dart' as server;
|
||||
import 'services_test.dart' as services;
|
||||
import 'typed_service_test.dart' as typed_service;
|
||||
import 'util_test.dart' as util;
|
||||
|
@ -24,6 +25,7 @@ main() {
|
|||
group('precontained', precontained.main);
|
||||
group('routing', routing.main);
|
||||
group('serialize', serialize.main);
|
||||
group('server', server.main);
|
||||
group('services', services.main);
|
||||
group('typed_service', typed_service.main);
|
||||
group('util', util.main);
|
||||
|
|
242
test/server_test.dart
Normal file
242
test/server_test.dart
Normal file
|
@ -0,0 +1,242 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:angel_framework/angel_framework.dart';
|
||||
import 'package:matcher/matcher.dart';
|
||||
import 'package:mock_request/mock_request.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
final Uri $foo = Uri.parse('http://localhost:3000/foo');
|
||||
|
||||
/// Additional tests to improve coverage of server.dart
|
||||
main() {
|
||||
group('streams fired', () {
|
||||
test('before+after processed are fired', () async {
|
||||
var app = new Angel();
|
||||
var before = app.beforeProcessed.first;
|
||||
var after = app.afterProcessed.first;
|
||||
var rq = new MockHttpRequest('GET', $foo);
|
||||
rq.close();
|
||||
await app.handleRequest(rq);
|
||||
app.close();
|
||||
expect(await before, rq);
|
||||
expect(await after, rq);
|
||||
});
|
||||
|
||||
test('oncontroller fired', () async {
|
||||
var app = new Angel();
|
||||
var ctrl = new FooController();
|
||||
var f = app.onController.first;
|
||||
await app.configure(ctrl);
|
||||
expect(await f, ctrl);
|
||||
});
|
||||
});
|
||||
|
||||
group('scoping', () {
|
||||
var parent = new Angel()..properties['two'] = 2;
|
||||
var child = new Angel();
|
||||
parent.use('/child', child);
|
||||
|
||||
test('sets children', () {
|
||||
expect(parent.children, contains(child));
|
||||
});
|
||||
|
||||
test('sets parent', () {
|
||||
expect(child.parent, parent);
|
||||
});
|
||||
|
||||
test('properties can climb up hierarchy', () {
|
||||
expect(child.findProperty('two'), 2);
|
||||
});
|
||||
});
|
||||
|
||||
test('custom server generator', () {
|
||||
var app = new Angel.custom(HttpServer.bind);
|
||||
expect(app.serverGenerator, HttpServer.bind);
|
||||
});
|
||||
|
||||
test('default error handler', () async {
|
||||
var app = new Angel();
|
||||
var rq = new MockHttpRequest('GET', $foo);
|
||||
rq.close();
|
||||
var rs = rq.response;
|
||||
var req = await app.createRequestContext(rq);
|
||||
var res = await app.createResponseContext(rs);
|
||||
var e = new AngelHttpException(null,
|
||||
statusCode: 321, message: 'Hello', errors: ['foo', 'bar']);
|
||||
await app.errorHandler(e, req, res);
|
||||
await app.sendResponse(rq, req, res);
|
||||
expect(rs.headers.value(HttpHeaders.CONTENT_TYPE),
|
||||
ContentType.HTML.toString());
|
||||
expect(rs.statusCode, e.statusCode);
|
||||
var body = await rs.transform(UTF8.decoder).join();
|
||||
expect(body, contains('<title>${e.message}</title>'));
|
||||
expect(body, contains('<li>foo</li>'));
|
||||
expect(body, contains('<li>bar</li>'));
|
||||
});
|
||||
|
||||
test('plug-ins run on startup', () async {
|
||||
var app = new Angel();
|
||||
app.justBeforeStart.add((app) async {
|
||||
app.properties['two'] = 2;
|
||||
});
|
||||
await app.startServer();
|
||||
expect(app.properties['two'], 2);
|
||||
await app.close();
|
||||
});
|
||||
|
||||
test('warning when adding routes to flattened router', () {
|
||||
var app = new Angel()..optimizeForProduction(force: true);
|
||||
app.dumpTree();
|
||||
app.get('/', () => 2);
|
||||
app.mount('/foo', new Router()..get('/', 3));
|
||||
});
|
||||
|
||||
test('services close on close call', () async {
|
||||
var app = new Angel();
|
||||
var svc = new CustomCloseService();
|
||||
expect(svc.value, 2);
|
||||
app.use('/', svc);
|
||||
await app.close();
|
||||
expect(svc.value, 3);
|
||||
});
|
||||
|
||||
test('global injection added to injection map', () {
|
||||
var app = new Angel()..inject('a', 'b');
|
||||
expect(app.injections['a'], 'b');
|
||||
});
|
||||
|
||||
test('global injected serializer', () async {
|
||||
var app = new Angel()..injectSerializer((_) => 'x');
|
||||
app.get($foo.path, (req, ResponseContext res) => res.serialize(null));
|
||||
var rq = new MockHttpRequest('GET', $foo)..close();
|
||||
await app.handleRequest(rq);
|
||||
var body = await rq.response.transform(UTF8.decoder).join();
|
||||
expect(body, 'x');
|
||||
});
|
||||
|
||||
group('handler results', () {
|
||||
var app = new Angel();
|
||||
RequestContext req;
|
||||
ResponseContext res;
|
||||
|
||||
setUp(() async {
|
||||
var rq = new MockHttpRequest('GET', $foo)..close();
|
||||
req = await app.createRequestContext(rq);
|
||||
res = await app.createResponseContext(rq.response);
|
||||
});
|
||||
|
||||
group('getHandlerResult', () {
|
||||
test('return request handler', () async {
|
||||
var handler = (req, res) => (req, res) async {
|
||||
return 2;
|
||||
};
|
||||
var r = await app.getHandlerResult(handler, req, res);
|
||||
expect(r, 2);
|
||||
});
|
||||
|
||||
test('return future', () async {
|
||||
var handler = new Future.value(2);
|
||||
expect(await app.getHandlerResult(handler, req, res), 2);
|
||||
});
|
||||
});
|
||||
|
||||
group('executeHandler', () {
|
||||
test('return Stream', () async {
|
||||
var handler = (req, res) => new Stream.fromIterable([2, 3]);
|
||||
expect(await app.executeHandler(handler, req, res), isFalse);
|
||||
});
|
||||
|
||||
test('end response', () async {
|
||||
var handler = (req, res) => res.end();
|
||||
expect(await app.executeHandler(handler, req, res), isFalse);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
group('handleAngelHttpException', () {
|
||||
Angel app;
|
||||
|
||||
setUp(() async {
|
||||
app = new Angel();
|
||||
await app.listen(address: InternetAddress.LOOPBACK_IP_V4, port: 0);
|
||||
app.fatalErrorStream.listen((e) {
|
||||
print('FATAL: ${e.error}');
|
||||
print(e.stack);
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() => app.close());
|
||||
|
||||
test('null req/res', () async {
|
||||
app.handleAngelHttpException(null, null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('null req/res, valid error', () async {
|
||||
app.handleAngelHttpException(
|
||||
new AngelHttpException(new StateError('')), null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('null req/res, http error', () async {
|
||||
app.handleAngelHttpException(
|
||||
new AngelHttpException.forbidden(), null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('can send json', () async {
|
||||
app.get('/wtf', () => throw new AngelHttpException.forbidden());
|
||||
var rq = new MockHttpRequest('GET', new Uri(path: 'wtf'));
|
||||
rq.close();
|
||||
await app.handleRequest(rq);
|
||||
expect(rq.response.statusCode, HttpStatus.FORBIDDEN);
|
||||
expect(
|
||||
rq.response.headers.contentType.mimeType, ContentType.JSON.mimeType);
|
||||
});
|
||||
|
||||
test('can throw in finalizer', () async {
|
||||
app.responseFinalizers
|
||||
.add((req, res) => throw new AngelHttpException.forbidden());
|
||||
var rq = new MockHttpRequest('GET', new Uri(path: 'wtf'));
|
||||
rq.close();
|
||||
await app.handleRequest(rq);
|
||||
expect(rq.response.statusCode, HttpStatus.FORBIDDEN);
|
||||
expect(
|
||||
rq.response.headers.contentType.mimeType, ContentType.JSON.mimeType);
|
||||
});
|
||||
|
||||
test('can send html', () async {
|
||||
app.get('/wtf2', () => throw new AngelHttpException.forbidden());
|
||||
var rq = new MockHttpRequest('GET', new Uri(path: 'wtf2'));
|
||||
rq.headers.set(HttpHeaders.ACCEPT, ContentType.HTML.toString());
|
||||
rq.close();
|
||||
await app.handleRequest(rq);
|
||||
expect(rq.response.statusCode, HttpStatus.FORBIDDEN);
|
||||
expect(
|
||||
rq.response.headers.contentType.mimeType, ContentType.HTML.mimeType);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class CustomCloseService extends Service {
|
||||
int value = 2;
|
||||
|
||||
@override
|
||||
Future close() {
|
||||
value = 3;
|
||||
return super.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Expose('/foo')
|
||||
class FooController extends Controller {
|
||||
@Expose('/bar')
|
||||
bar() async => 'baz';
|
||||
}
|
Loading…
Reference in a new issue