diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9eb19112..fbbdb6a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,10 +2,10 @@
#### Minimum Required Rust
-* As of this release, `clap` requires `rustc 1.33.0` or greater.
+* As of this release, `clap` requires `rustc 1.36.0` or greater.
-### v2.29.2 (2018-01-16)
+## v2.29.2 (2018-01-16)
#### Features
diff --git a/tests/app_from_crate.rs b/tests/app_from_crate.rs
new file mode 100644
index 00000000..2129a0dd
--- /dev/null
+++ b/tests/app_from_crate.rs
@@ -0,0 +1,26 @@
+use clap::{app_from_crate, ErrorKind};
+
+static EVERYTHING: &str = "clap {{version}}
+Kevin K.
+A simple to use, efficient, and full-featured Command Line Argument Parser
+
+USAGE:
+ clap
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+";
+
+#[test]
+fn app_from_crate() {
+ let res = app_from_crate!().try_get_matches_from(vec!["clap", "--help"]);
+
+ assert!(res.is_err());
+ let err = res.unwrap_err();
+ assert_eq!(err.kind, ErrorKind::HelpDisplayed);
+ assert_eq!(
+ err.message,
+ EVERYTHING.replace("{{version}}", env!("CARGO_PKG_VERSION"))
+ );
+}
diff --git a/tests/cargo.rs b/tests/cargo.rs
new file mode 100644
index 00000000..9fe2234e
--- /dev/null
+++ b/tests/cargo.rs
@@ -0,0 +1,71 @@
+use clap::{crate_authors, crate_description, crate_name, crate_version, App, ErrorKind};
+
+static DESCRIPTION_ONLY: &str = "prog 1
+A simple to use, efficient, and full-featured Command Line Argument Parser
+
+USAGE:
+ prog
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+";
+
+static AUTHORS_ONLY: &str = "prog 1
+Kevin K.
+
+USAGE:
+ prog
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+";
+
+#[test]
+fn crate_version() {
+ let res = App::new("prog")
+ .version(crate_version!())
+ .try_get_matches_from(vec!["prog", "--version"]);
+
+ assert!(res.is_err());
+ let err = res.unwrap_err();
+ assert_eq!(err.kind, ErrorKind::VersionDisplayed);
+ assert_eq!(err.message, format!("prog {}", env!("CARGO_PKG_VERSION")));
+}
+
+#[test]
+fn crate_description() {
+ let res = App::new("prog")
+ .version("1")
+ .about(crate_description!())
+ .try_get_matches_from(vec!["prog", "--help"]);
+
+ assert!(res.is_err());
+ let err = res.unwrap_err();
+ assert_eq!(err.kind, ErrorKind::HelpDisplayed);
+ assert_eq!(err.message, DESCRIPTION_ONLY);
+}
+
+#[test]
+fn crate_authors() {
+ let res = App::new("prog")
+ .version("1")
+ .author(crate_authors!())
+ .try_get_matches_from(vec!["prog", "--help"]);
+
+ assert!(res.is_err());
+ let err = res.unwrap_err();
+ assert_eq!(err.kind, ErrorKind::HelpDisplayed);
+ assert_eq!(err.message, AUTHORS_ONLY);
+}
+
+#[test]
+fn crate_name() {
+ let res = App::new(crate_name!()).try_get_matches_from(vec!["clap", "--version"]);
+
+ assert!(res.is_err());
+ let err = res.unwrap_err();
+ assert_eq!(err.kind, ErrorKind::VersionDisplayed);
+ assert_eq!(err.message, "clap ");
+}