aboutsummaryrefslogtreecommitdiff
path: root/unit-tests
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests')
-rw-r--r--unit-tests/.gitignore1
-rw-r--r--unit-tests/bootstrap-manifest/buildfile11
-rw-r--r--unit-tests/bootstrap-manifest/driver.cxx62
-rw-r--r--unit-tests/bootstrap-manifest/testscript130
4 files changed, 204 insertions, 0 deletions
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> // ios_base::failbit, ios_base::badbit
+#include <iostream>
+
+#include <butl/manifest-parser>
+#include <butl/manifest-serializer>
+
+#include <bbot/types>
+#include <bbot/utility>
+
+#include <bbot/bootstrap-manifest>
+
+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 >>EOF
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ EOF
+
+ : no-id
+ :
+ $* <<EOI 2>'stdin:2:1: error: no toolchain id specified' == 1
+ : 1
+ EOI
+
+ : unknown
+ :
+ $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1
+ : 1
+ x: y
+ EOI
+}
+
+: bootstrap-manifest
+:
+{
+ test.options += -b
+
+ : valid
+ :
+ $* <<EOF >>EOF
+ : 1
+ bbot-version: 1010200
+ libbbot-version: 1010100
+ EOF
+
+ : dup
+ :
+ $* <<EOI 2>'stdin:3:1: error: bbot-version redefinition' == 1
+ : 1
+ bbot-version: 1010200
+ bbot-version: 1010200
+ EOI
+
+ : invalid-version
+ :
+ $* <<EOI 2>'stdin:2:15: error: invalid package version' == 1
+ : 1
+ bbot-version: 1010200A
+ EOI
+
+ : no-versions
+ :
+ $* <<EOI 2>'stdin:2:1: error: no package versions specified' == 1
+ : 1
+ EOI
+
+ : unknown
+ :
+ $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrap manifest" == 1
+ : 1
+ x: y
+ EOI
+}
+
+: bootstrapped-machine-manifest
+:
+{
+ test.options += -bm
+
+ : valid
+ :
+ $* <<EOF >>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
+ :
+ $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1
+ : 1
+ x: y
+ EOI
+
+ : no-machine
+ :
+ $* <<EOI 2>'stdin:2:1: error: machine manifest expected' == 1
+ : 1
+ EOI
+
+ : no-toolchain
+ :
+ $* <<EOI 2>'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
+ :
+ $* <<EOI 2>'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
+}