From cfd31379be5eefb22a72b5ee90ce8fd17a0802b7 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 6 Apr 2017 19:46:03 +0300 Subject: Implement manifests --- unit-tests/.gitignore | 1 + unit-tests/bootstrap-manifest/buildfile | 11 +++ unit-tests/bootstrap-manifest/driver.cxx | 62 +++++++++++++++ unit-tests/bootstrap-manifest/testscript | 130 +++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100644 unit-tests/.gitignore create mode 100644 unit-tests/bootstrap-manifest/buildfile create mode 100644 unit-tests/bootstrap-manifest/driver.cxx create mode 100644 unit-tests/bootstrap-manifest/testscript (limited to 'unit-tests') diff --git a/unit-tests/.gitignore b/unit-tests/.gitignore new file mode 100644 index 0000000..e54525b --- /dev/null +++ b/unit-tests/.gitignore @@ -0,0 +1 @@ +driver diff --git a/unit-tests/bootstrap-manifest/buildfile b/unit-tests/bootstrap-manifest/buildfile new file mode 100644 index 0000000..aa598ee --- /dev/null +++ b/unit-tests/bootstrap-manifest/buildfile @@ -0,0 +1,11 @@ +# file : unit-tests/bootstrap-manifest/buildfile +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +import libs = libbutl%lib{butl} +import libs += libbbot%lib{bbot} + +exe{driver}: cxx{driver} ../../bbot/cxx{bootstrap-manifest} $libs \ + test{testscript} + +include ../../bbot/ diff --git a/unit-tests/bootstrap-manifest/driver.cxx b/unit-tests/bootstrap-manifest/driver.cxx new file mode 100644 index 0000000..3531383 --- /dev/null +++ b/unit-tests/bootstrap-manifest/driver.cxx @@ -0,0 +1,62 @@ +// file : unit-tests/bootstrap-manifest/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include // ios_base::failbit, ios_base::badbit +#include + +#include +#include + +#include +#include + +#include + +using namespace std; +using namespace butl; +using namespace bbot; + +// Usage: argv[0] (-t|-b|-bm) +// +// Read and parse manifest from STDIN and serialize it to STDOUT. The +// following options specify the manifest type. +// +// -t parse toolchain manifest +// -b parse bootstrap manifest +// -bm parse bootstrapped machine manifest +// +int +main (int argc, char* argv[]) +try +{ + assert (argc == 2); + string opt (argv[1]); + + cin.exceptions (ios_base::failbit | ios_base::badbit); + cout.exceptions (ios_base::failbit | ios_base::badbit); + + manifest_parser p (cin, "stdin"); + manifest_serializer s (cout, "stdout"); + + if (opt == "-t") + toolchain_manifest (p).serialize (s); + else if (opt == "-b") + bootstrap_manifest (p).serialize (s); + else if (opt == "-bm") + bootstrapped_machine_manifest (p).serialize (s); + else + assert (false); + + return 0; +} +catch (const manifest_parsing& e) +{ + cerr << e << endl; + return 1; +} +catch (const manifest_serialization& e) +{ + cerr << e << endl; + return 1; +} diff --git a/unit-tests/bootstrap-manifest/testscript b/unit-tests/bootstrap-manifest/testscript new file mode 100644 index 0000000..2a104be --- /dev/null +++ b/unit-tests/bootstrap-manifest/testscript @@ -0,0 +1,130 @@ +# file : unit-tests/bootstrap-manifest/testscript +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: toolchain-manifest +: +{ + test.options += -t + + : valid + : + $* <>EOF + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + EOF + + : no-id + : + $* <'stdin:2:1: error: no toolchain id specified' == 1 + : 1 + EOI + + : unknown + : + $* <"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1 + : 1 + x: y + EOI +} + +: bootstrap-manifest +: +{ + test.options += -b + + : valid + : + $* <>EOF + : 1 + bbot-version: 1010200 + libbbot-version: 1010100 + EOF + + : dup + : + $* <'stdin:3:1: error: bbot-version redefinition' == 1 + : 1 + bbot-version: 1010200 + bbot-version: 1010200 + EOI + + : invalid-version + : + $* <'stdin:2:15: error: invalid package version' == 1 + : 1 + bbot-version: 1010200A + EOI + + : no-versions + : + $* <'stdin:2:1: error: no package versions specified' == 1 + : 1 + EOI + + : unknown + : + $* <"stdin:2:1: error: unknown name 'x' in bootstrap manifest" == 1 + : 1 + x: y + EOI +} + +: bootstrapped-machine-manifest +: +{ + test.options += -bm + + : valid + : + $* <>EOF + : 1 + : + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: kvm + : + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + : + bbot-version: 1010200 + libbbot-version: 1010100 + EOF + + : unknown + : + $* <"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1 + : 1 + x: y + EOI + + : no-machine + : + $* <'stdin:2:1: error: machine manifest expected' == 1 + : 1 + EOI + + : no-toolchain + : + $* <'stdin:7:1: error: toolchain manifest expected' == 1 + : 1 + : + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: kvm + EOI + + : no-bootstrap + : + $* <'stdin:9:1: error: bootstrap manifest expected' == 1 + : 1 + : + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: kvm + : + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + EOI +} -- cgit v1.1