diff --git a/test/intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode.js b/test/intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode.js
new file mode 100644
index 0000000000000000000000000000000000000000..61e747ef99e6da339b455d6d8cbe30c5d1e9c69c
--- /dev/null
+++ b/test/intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode.js
@@ -0,0 +1,87 @@
+// Copyright 2018 André Bargull. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-Intl.DateTimeFormat.prototype.resolvedOptions
+description: >
+  The resolved locale doesn't include a hc Unicode extension value if the
+  hour12 or hourCycle option is also present.
+info: |
+  12.1.1 InitializeDateTimeFormat(dateTimeFormat, locales, options)
+    ...
+    6. Let hour12 be ? GetOption(options, "hour12", "boolean", undefined, undefined).
+    7. Let hourCycle be ? GetOption(options, "hourCycle", "string", « "h11", "h12", "h23", "h24" », undefined).
+    8. If hour12 is not undefined, then
+      a. Let hourCycle be null.
+    9. Set opt.[[hc]] to hourCycle.
+    ...
+
+  9.2.6 ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData)
+    ...
+    8. For each element key of relevantExtensionKeys in List order, do
+      ...
+      i. If options has a field [[<key>]], then
+        i. Let optionsValue be options.[[<key>]].
+        ii. Assert: Type(optionsValue) is either String, Undefined, or Null.
+        iii. If keyLocaleData contains optionsValue, then
+          1. If SameValue(optionsValue, value) is false, then
+            a. Let value be optionsValue.
+            b. Let supportedExtensionAddition be "".
+      ...
+---*/
+
+var defaultLocale = new Intl.DateTimeFormat().resolvedOptions().locale;
+var defaultLocaleWithHourCycle = defaultLocale + "-u-hc-h11";
+
+function assertLocale(locale, expectedLocale, options, message) {
+  var resolved = new Intl.DateTimeFormat(locale, {
+    hour: "2-digit",
+    hour12: options.hour12,
+    hourCycle: options.hourCycle,
+  }).resolvedOptions();
+  assert.sameValue(resolved.locale, expectedLocale, message + " (With hour option.)");
+
+  // Also test the case when no hour option is present at all.
+  // The resolved options don't include hour12 and hourCycle if the date-time
+  // formatter doesn't include an hour option. This restriction doesn't apply
+  // to the hc Unicode extension value.
+  resolved = new Intl.DateTimeFormat(locale, {
+    hour12: options.hour12,
+    hourCycle: options.hourCycle,
+  }).resolvedOptions();
+  assert.sameValue(resolved.locale, expectedLocale, message + " (Without hour option.)");
+}
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hour12: false,
+  hourCycle: "h23",
+}, "hour12 and hourCycle options and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hour12: false,
+}, "hour12 option and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocale, {
+  hourCycle: "h23",
+}, "hourCycle option and hc Unicode extension value are present.");
+
+assertLocale(defaultLocaleWithHourCycle, defaultLocaleWithHourCycle, {
+}, "Only hc Unicode extension value is present.");
+
+// And make sure the hc Unicode extension doesn't get added if it's not present
+// in the requested locale.
+assertLocale(defaultLocale, defaultLocale, {
+  hour12: false,
+  hourCycle: "h23",
+}, "hour12 and hourCycle options are present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+  hour12: false,
+}, "hourCycle option is present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+  hourCycle: "h23",
+}, "hourCycle option is present, but no hc Unicode extension value.");
+
+assertLocale(defaultLocale, defaultLocale, {
+}, "No options are present and no hc Unicode extension value.");