From 908505ba67f1801e9d58ef27508a013aeb56e353 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Mon, 16 May 2016 15:01:31 -0400 Subject: [PATCH] lib/popcorn: introduce static_files examples Signed-off-by: Alexandre Terrasa --- .../examples/static_files/example_static.nit | 21 ++++ .../static_files/example_static_multiple.nit | 24 +++++ lib/popcorn/examples/static_files/files/index.html | 6 ++ .../examples/static_files/public/css/style.css | 4 + .../examples/static_files/public/hello.html | 17 +++ .../static_files/public/images/trollface.jpg | Bin 0 -> 35576 bytes lib/popcorn/examples/static_files/public/js/app.js | 1 + lib/popcorn/tests/res/test_example_static.res | 73 +++++++++++++ .../tests/res/test_example_static_multiple.res | 113 ++++++++++++++++++++ lib/popcorn/tests/test_example_static.nit | 52 +++++++++ lib/popcorn/tests/test_example_static_multiple.nit | 60 +++++++++++ 11 files changed, 371 insertions(+) create mode 100644 lib/popcorn/examples/static_files/example_static.nit create mode 100644 lib/popcorn/examples/static_files/example_static_multiple.nit create mode 100644 lib/popcorn/examples/static_files/files/index.html create mode 100644 lib/popcorn/examples/static_files/public/css/style.css create mode 100644 lib/popcorn/examples/static_files/public/hello.html create mode 100644 lib/popcorn/examples/static_files/public/images/trollface.jpg create mode 100644 lib/popcorn/examples/static_files/public/js/app.js create mode 100644 lib/popcorn/tests/res/test_example_static.res create mode 100644 lib/popcorn/tests/res/test_example_static_multiple.res create mode 100644 lib/popcorn/tests/test_example_static.nit create mode 100644 lib/popcorn/tests/test_example_static_multiple.nit diff --git a/lib/popcorn/examples/static_files/example_static.nit b/lib/popcorn/examples/static_files/example_static.nit new file mode 100644 index 0000000..c3da6d0 --- /dev/null +++ b/lib/popcorn/examples/static_files/example_static.nit @@ -0,0 +1,21 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2016 Alexandre Terrasa +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import popcorn + +var app = new App +app.use("/", new StaticHandler("public/")) +app.listen("localhost", 3000) diff --git a/lib/popcorn/examples/static_files/example_static_multiple.nit b/lib/popcorn/examples/static_files/example_static_multiple.nit new file mode 100644 index 0000000..1c730c6 --- /dev/null +++ b/lib/popcorn/examples/static_files/example_static_multiple.nit @@ -0,0 +1,24 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2016 Alexandre Terrasa +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import popcorn + +var app = new App +app.use("/", new StaticHandler("public/")) +app.use("/", new StaticHandler("files/")) +app.use("/static", new StaticHandler("public/")) +app.use("/static", new StaticHandler("files/")) +app.listen("localhost", 3000) diff --git a/lib/popcorn/examples/static_files/files/index.html b/lib/popcorn/examples/static_files/files/index.html new file mode 100644 index 0000000..bb850bd --- /dev/null +++ b/lib/popcorn/examples/static_files/files/index.html @@ -0,0 +1,6 @@ + + + +

Another Index

+ + diff --git a/lib/popcorn/examples/static_files/public/css/style.css b/lib/popcorn/examples/static_files/public/css/style.css new file mode 100644 index 0000000..5ba0171 --- /dev/null +++ b/lib/popcorn/examples/static_files/public/css/style.css @@ -0,0 +1,4 @@ +body { + color: blue; + padding: 20px; +} diff --git a/lib/popcorn/examples/static_files/public/hello.html b/lib/popcorn/examples/static_files/public/hello.html new file mode 100644 index 0000000..61521ac --- /dev/null +++ b/lib/popcorn/examples/static_files/public/hello.html @@ -0,0 +1,17 @@ + + + + + + Some Popcorn love + + + + +

Hello Popcorn!

+ + maybe it's a kitten? + + + + diff --git a/lib/popcorn/examples/static_files/public/images/trollface.jpg b/lib/popcorn/examples/static_files/public/images/trollface.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c733bc8899a83ef59a29f290f431c28d057878f GIT binary patch literal 35576 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 ACIA2c literal 0 HcmV?d00001 diff --git a/lib/popcorn/examples/static_files/public/js/app.js b/lib/popcorn/examples/static_files/public/js/app.js new file mode 100644 index 0000000..4a1510d --- /dev/null +++ b/lib/popcorn/examples/static_files/public/js/app.js @@ -0,0 +1 @@ +alert("Hello World!"); diff --git a/lib/popcorn/tests/res/test_example_static.res b/lib/popcorn/tests/res/test_example_static.res new file mode 100644 index 0000000..7f07ed8 --- /dev/null +++ b/lib/popcorn/tests/res/test_example_static.res @@ -0,0 +1,73 @@ + +[Client] curl -s localhost:*****/css/style.css +body { + color: blue; + padding: 20px; +} + +[Client] curl -s localhost:*****/js/app.js +alert("Hello World!"); + +[Client] curl -s localhost:*****/hello.html + + + + + + Some Popcorn love + + + + +

Hello Popcorn!

+ + maybe it's a kitten? + + + + + +[Client] curl -s localhost:*****/ + + + + + Not Found + + +

404 Not Found

+ + +[Client] curl -s localhost:*****/css/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + +[Client] curl -s localhost:*****/static/css/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + +[Client] curl -s localhost:*****/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + \ No newline at end of file diff --git a/lib/popcorn/tests/res/test_example_static_multiple.res b/lib/popcorn/tests/res/test_example_static_multiple.res new file mode 100644 index 0000000..1b14f14 --- /dev/null +++ b/lib/popcorn/tests/res/test_example_static_multiple.res @@ -0,0 +1,113 @@ + +[Client] curl -s localhost:*****/css/style.css +body { + color: blue; + padding: 20px; +} + +[Client] curl -s localhost:*****/js/app.js +alert("Hello World!"); + +[Client] curl -s localhost:*****/hello.html + + + + + + Some Popcorn love + + + + +

Hello Popcorn!

+ + maybe it's a kitten? + + + + + +[Client] curl -s localhost:*****/ +Warning: Headers already sent! + + + +

Another Index

+ + + + + +

Another Index

+ + + +[Client] curl -s localhost:*****/static/css/style.css +body { + color: blue; + padding: 20px; +} + +[Client] curl -s localhost:*****/static/js/app.js +alert("Hello World!"); + +[Client] curl -s localhost:*****/static/hello.html + + + + + + Some Popcorn love + + + + +

Hello Popcorn!

+ + maybe it's a kitten? + + + + + +[Client] curl -s localhost:*****/static/ + + + +

Another Index

+ + + +[Client] curl -s localhost:*****/css/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + +[Client] curl -s localhost:*****/static/css/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + +[Client] curl -s localhost:*****/not_found.nit + + + + + Not Found + + +

404 Not Found

+ + \ No newline at end of file diff --git a/lib/popcorn/tests/test_example_static.nit b/lib/popcorn/tests/test_example_static.nit new file mode 100644 index 0000000..e23a7be --- /dev/null +++ b/lib/popcorn/tests/test_example_static.nit @@ -0,0 +1,52 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2016 Alexandre Terrasa +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base_tests +import example_static + +class TestClient + super ClientThread + + redef fun main do + system "curl -s {host}:{port}/css/style.css" + system "curl -s {host}:{port}/js/app.js" + system "curl -s {host}:{port}/hello.html" + system "curl -s {host}:{port}/" + + system "curl -s {host}:{port}/css/not_found.nit" + system "curl -s {host}:{port}/static/css/not_found.nit" + system "curl -s {host}:{port}/not_found.nit" + + return null + end +end + +var app = new App +app.use("/", new StaticHandler("../examples/static_files/public/")) + +var host = test_host +var port = test_port + +var server = new AppThread(host, port, app) +server.start +0.1.sleep + +var client = new TestClient(host, port) +client.start +client.join +0.1.sleep + +exit 0 diff --git a/lib/popcorn/tests/test_example_static_multiple.nit b/lib/popcorn/tests/test_example_static_multiple.nit new file mode 100644 index 0000000..5e99ae1 --- /dev/null +++ b/lib/popcorn/tests/test_example_static_multiple.nit @@ -0,0 +1,60 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2016 Alexandre Terrasa +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base_tests +import example_static_multiple + +class TestClient + super ClientThread + + redef fun main do + system "curl -s {host}:{port}/css/style.css" + system "curl -s {host}:{port}/js/app.js" + system "curl -s {host}:{port}/hello.html" + system "curl -s {host}:{port}/" + + system "curl -s {host}:{port}/static/css/style.css" + system "curl -s {host}:{port}/static/js/app.js" + system "curl -s {host}:{port}/static/hello.html" + system "curl -s {host}:{port}/static/" + + system "curl -s {host}:{port}/css/not_found.nit" + system "curl -s {host}:{port}/static/css/not_found.nit" + system "curl -s {host}:{port}/not_found.nit" + + return null + end +end + +var app = new App +app.use("/", new StaticHandler("../examples/static_files/public/")) +app.use("/", new StaticHandler("../examples/static_files/files/")) +app.use("/static", new StaticHandler("../examples/static_files/public/")) +app.use("/static", new StaticHandler("../examples/static_files/files/")) + +var host = test_host +var port = test_port + +var server = new AppThread(host, port, app) +server.start +0.1.sleep + +var client = new TestClient(host, port) +client.start +client.join +0.1.sleep + +exit 0 -- 1.7.9.5