diff --git a/build-tests/api-extractor-lib1-test/api-extractor.json b/build-tests/api-extractor-lib1-test/api-extractor.json
new file mode 100644
index 00000000000..f7e7752264f
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/api-extractor.json
@@ -0,0 +1,15 @@
+{
+  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/api-extractor.schema.json",
+  "compiler" : {
+    "configType": "tsconfig",
+    "rootFolder": "."
+  },
+
+  "dtsRollup": {
+    "enabled": true
+  },
+
+  "project": {
+    "entryPointSourceFile": "lib/index.d.ts"
+  }
+}
diff --git a/build-tests/api-extractor-lib1-test/build.js b/build-tests/api-extractor-lib1-test/build.js
new file mode 100644
index 00000000000..6378977fc0b
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/build.js
@@ -0,0 +1,27 @@
+const fsx = require('fs-extra');
+const child_process = require('child_process');
+const path = require('path');
+const process = require('process');
+
+function executeCommand(command) {
+  console.log('---> ' + command);
+  child_process.execSync(command, { stdio: 'inherit' });
+}
+
+// Clean the old build outputs
+console.log(`==> Starting build.js for ${path.basename(process.cwd())}`);
+fsx.emptyDirSync('dist');
+fsx.emptyDirSync('lib');
+fsx.emptyDirSync('temp');
+
+// Run the TypeScript compiler
+executeCommand('node node_modules/typescript/lib/tsc');
+
+// Run the API Extractor command-line
+if (process.argv.indexOf('--production') >= 0) {
+  executeCommand('node node_modules/@microsoft/api-extractor/lib/start run');
+} else {
+  executeCommand('node node_modules/@microsoft/api-extractor/lib/start run --local');
+}
+
+console.log(`==> Finished build.js for ${path.basename(process.cwd())}`);
diff --git a/build-tests/api-extractor-lib1-test/etc/api-extractor-lib1-test.api.ts b/build-tests/api-extractor-lib1-test/etc/api-extractor-lib1-test.api.ts
new file mode 100644
index 00000000000..21a6363e3be
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/etc/api-extractor-lib1-test.api.ts
@@ -0,0 +1,8 @@
+// @public (undocumented)
+declare class Lib1Class {
+}
+
+// @public (undocumented)
+interface Lib1Interface {
+}
+
diff --git a/build-tests/api-extractor-lib1-test/package.json b/build-tests/api-extractor-lib1-test/package.json
new file mode 100644
index 00000000000..21bf7db17aa
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/package.json
@@ -0,0 +1,18 @@
+{
+  "name": "api-extractor-lib1-test",
+  "description": "Building this project is a regression test for api-extractor",
+  "version": "1.0.0",
+  "private": true,
+  "main": "lib/index.js",
+  "typings": "dist/internal/api-extractor-lib1-test.d.ts",
+  "scripts": {
+    "build": "node build.js"
+  },
+  "dependencies": {
+    "@microsoft/api-extractor": "7.0.9",
+    "@types/jest": "23.3.11",
+    "@types/node": "8.5.8",
+    "fs-extra": "~7.0.1",
+    "typescript": "~3.1.6"
+  }
+}
diff --git a/build-tests/api-extractor-lib1-test/src/index.ts b/build-tests/api-extractor-lib1-test/src/index.ts
new file mode 100644
index 00000000000..779a9ca42b3
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/src/index.ts
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+/**
+ * api-extractor-lib1-test
+ *
+ * @remarks
+ * This library is consumed by api-extractor-scenarios.
+ *
+ * @packagedocumentation
+ */
+
+/** @public */
+export class Lib1Class {
+}
+
+/** @public */
+export interface Lib1Interface {
+}
diff --git a/build-tests/api-extractor-lib1-test/tsconfig.json b/build-tests/api-extractor-lib1-test/tsconfig.json
new file mode 100644
index 00000000000..76bd8f2d5ef
--- /dev/null
+++ b/build-tests/api-extractor-lib1-test/tsconfig.json
@@ -0,0 +1,28 @@
+{
+  "compilerOptions": {
+    "target": "es6",
+    "forceConsistentCasingInFileNames": true,
+    "module": "commonjs",
+    "declaration": true,
+    "sourceMap": true,
+    "experimentalDecorators": true,
+    "strictNullChecks": true,
+    "types": [
+      "node",
+      "jest"
+    ],
+    "lib": [
+      "es5",
+      "scripthost",
+      "es2015.collection",
+      "es2015.promise",
+      "es2015.iterable",
+      "dom"
+    ],
+    "outDir": "lib"
+  },
+  "include": [
+    "src/**/*.ts",
+    "typings/tsd.d.ts"
+  ]
+}
\ No newline at end of file
diff --git a/build-tests/api-extractor-lib2-test/api-extractor.json b/build-tests/api-extractor-lib2-test/api-extractor.json
new file mode 100644
index 00000000000..f7e7752264f
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/api-extractor.json
@@ -0,0 +1,15 @@
+{
+  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/api-extractor.schema.json",
+  "compiler" : {
+    "configType": "tsconfig",
+    "rootFolder": "."
+  },
+
+  "dtsRollup": {
+    "enabled": true
+  },
+
+  "project": {
+    "entryPointSourceFile": "lib/index.d.ts"
+  }
+}
diff --git a/build-tests/api-extractor-lib2-test/build.js b/build-tests/api-extractor-lib2-test/build.js
new file mode 100644
index 00000000000..6378977fc0b
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/build.js
@@ -0,0 +1,27 @@
+const fsx = require('fs-extra');
+const child_process = require('child_process');
+const path = require('path');
+const process = require('process');
+
+function executeCommand(command) {
+  console.log('---> ' + command);
+  child_process.execSync(command, { stdio: 'inherit' });
+}
+
+// Clean the old build outputs
+console.log(`==> Starting build.js for ${path.basename(process.cwd())}`);
+fsx.emptyDirSync('dist');
+fsx.emptyDirSync('lib');
+fsx.emptyDirSync('temp');
+
+// Run the TypeScript compiler
+executeCommand('node node_modules/typescript/lib/tsc');
+
+// Run the API Extractor command-line
+if (process.argv.indexOf('--production') >= 0) {
+  executeCommand('node node_modules/@microsoft/api-extractor/lib/start run');
+} else {
+  executeCommand('node node_modules/@microsoft/api-extractor/lib/start run --local');
+}
+
+console.log(`==> Finished build.js for ${path.basename(process.cwd())}`);
diff --git a/build-tests/api-extractor-lib2-test/etc/api-extractor-lib2-test.api.ts b/build-tests/api-extractor-lib2-test/etc/api-extractor-lib2-test.api.ts
new file mode 100644
index 00000000000..8a0cc8985ff
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/etc/api-extractor-lib2-test.api.ts
@@ -0,0 +1,8 @@
+// @public (undocumented)
+declare class Lib2Class {
+}
+
+// @public (undocumented)
+interface Lib2Interface {
+}
+
diff --git a/build-tests/api-extractor-lib2-test/package.json b/build-tests/api-extractor-lib2-test/package.json
new file mode 100644
index 00000000000..d75e8112688
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/package.json
@@ -0,0 +1,18 @@
+{
+  "name": "api-extractor-lib2-test",
+  "description": "Building this project is a regression test for api-extractor",
+  "version": "1.0.0",
+  "private": true,
+  "main": "lib/index.js",
+  "typings": "dist/internal/api-extractor-lib2-test.d.ts",
+  "scripts": {
+    "build": "node build.js"
+  },
+  "dependencies": {
+    "@microsoft/api-extractor": "7.0.9",
+    "@types/jest": "23.3.11",
+    "@types/node": "8.5.8",
+    "fs-extra": "~7.0.1",
+    "typescript": "~3.1.6"
+  }
+}
diff --git a/build-tests/api-extractor-lib2-test/src/index.ts b/build-tests/api-extractor-lib2-test/src/index.ts
new file mode 100644
index 00000000000..18afcb444ba
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/src/index.ts
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+/**
+ * api-extractor-lib2-test
+ *
+ * @remarks
+ * This library is consumed by api-extractor-scenarios.
+ *
+ * @packagedocumentation
+ */
+
+/** @public */
+export class Lib2Class {
+}
+
+/** @public */
+export interface Lib2Interface {
+}
diff --git a/build-tests/api-extractor-lib2-test/tsconfig.json b/build-tests/api-extractor-lib2-test/tsconfig.json
new file mode 100644
index 00000000000..76bd8f2d5ef
--- /dev/null
+++ b/build-tests/api-extractor-lib2-test/tsconfig.json
@@ -0,0 +1,28 @@
+{
+  "compilerOptions": {
+    "target": "es6",
+    "forceConsistentCasingInFileNames": true,
+    "module": "commonjs",
+    "declaration": true,
+    "sourceMap": true,
+    "experimentalDecorators": true,
+    "strictNullChecks": true,
+    "types": [
+      "node",
+      "jest"
+    ],
+    "lib": [
+      "es5",
+      "scripthost",
+      "es2015.collection",
+      "es2015.promise",
+      "es2015.iterable",
+      "dom"
+    ],
+    "outDir": "lib"
+  },
+  "include": [
+    "src/**/*.ts",
+    "typings/tsd.d.ts"
+  ]
+}
\ No newline at end of file
diff --git a/build-tests/api-extractor-scenarios/build-config.json b/build-tests/api-extractor-scenarios/build-config.json
index 286b998868d..bacfa2d20af 100644
--- a/build-tests/api-extractor-scenarios/build-config.json
+++ b/build-tests/api-extractor-scenarios/build-config.json
@@ -1,6 +1,11 @@
 {
   "scenarioFolderNames": [
     "apiItemKinds",
+    "exportDuplicate1",
+    "exportImportedExternal",
+    "exportStar1",
+    "exportStar2",
+    "exportStar3",
     "defaultExportOfEntryPoint1",
     "defaultExportOfEntryPoint2",
     "defaultExportOfEntryPoint3",
diff --git a/build-tests/api-extractor-scenarios/build.js b/build-tests/api-extractor-scenarios/build.js
index 62ed8742ad3..1dd86a5dfb9 100644
--- a/build-tests/api-extractor-scenarios/build.js
+++ b/build-tests/api-extractor-scenarios/build.js
@@ -15,6 +15,7 @@ console.log();
 fsx.emptyDirSync('dist');
 fsx.emptyDirSync('lib');
 fsx.emptyDirSync('temp');
+fsx.emptyDirSync('etc/test-outputs');
 
 // Run the TypeScript compiler
 executeCommand('node node_modules/typescript/lib/tsc');
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.json
new file mode 100644
index 00000000000..cab56916e16
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.json
@@ -0,0 +1,43 @@
+{
+  "metadata": {
+    "toolPackage": "@microsoft/api-extractor",
+    "toolVersion": "7.0.9",
+    "schemaVersion": 1000
+  },
+  "kind": "Package",
+  "canonicalReference": "api-extractor-scenarios",
+  "docComment": "",
+  "name": "api-extractor-scenarios",
+  "members": [
+    {
+      "kind": "EntryPoint",
+      "canonicalReference": "",
+      "name": "",
+      "members": [
+        {
+          "kind": "Class",
+          "canonicalReference": "(X:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "X"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "X",
+          "members": [],
+          "implementsTokenRanges": []
+        }
+      ]
+    }
+  ]
+}
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.ts
new file mode 100644
index 00000000000..8fd670992b9
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/api-extractor-scenarios.api.ts
@@ -0,0 +1,6 @@
+// @public (undocumented)
+declare class X {
+}
+
+
+// (No @packageDocumentation comment for this package)
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/rollup.d.ts
new file mode 100644
index 00000000000..78633c812e7
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportDuplicate1/rollup.d.ts
@@ -0,0 +1,6 @@
+
+/** @public */
+export declare class X {
+}
+
+export { }
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.json
new file mode 100644
index 00000000000..cad382ad5bf
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.json
@@ -0,0 +1,112 @@
+{
+  "metadata": {
+    "toolPackage": "@microsoft/api-extractor",
+    "toolVersion": "7.0.9",
+    "schemaVersion": 1000
+  },
+  "kind": "Package",
+  "canonicalReference": "api-extractor-scenarios",
+  "docComment": "",
+  "name": "api-extractor-scenarios",
+  "members": [
+    {
+      "kind": "EntryPoint",
+      "canonicalReference": "",
+      "name": "",
+      "members": [
+        {
+          "kind": "Interface",
+          "canonicalReference": "(DoubleRenamedLib2Class:interface)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare interface "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib2Interface"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "DoubleRenamedLib2Class",
+          "members": [],
+          "extendsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(Lib1Class:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib1Class"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib1Class",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Interface",
+          "canonicalReference": "(Lib1Interface:interface)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare interface "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib1Interface"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib1Interface",
+          "members": [],
+          "extendsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(RenamedLib2Class:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib2Class"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "RenamedLib2Class",
+          "members": [],
+          "implementsTokenRanges": []
+        }
+      ]
+    }
+  ]
+}
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.ts
new file mode 100644
index 00000000000..001501d55a9
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/api-extractor-scenarios.api.ts
@@ -0,0 +1,18 @@
+// @public (undocumented)
+declare interface DoubleRenamedLib2Class {
+}
+
+// @public (undocumented)
+declare class Lib1Class {
+}
+
+// @public (undocumented)
+declare interface Lib1Interface {
+}
+
+// @public (undocumented)
+declare class RenamedLib2Class {
+}
+
+
+// (No @packageDocumentation comment for this package)
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/rollup.d.ts
new file mode 100644
index 00000000000..69140abd56a
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternal/rollup.d.ts
@@ -0,0 +1,10 @@
+import { Lib2Interface as DoubleRenamedLib2Class } from 'api-extractor-lib2-test';
+export { DoubleRenamedLib2Class };
+import { Lib1Class } from 'api-extractor-lib1-test';
+export { Lib1Class };
+import { Lib1Interface } from 'api-extractor-lib1-test';
+export { Lib1Interface };
+import { Lib2Class as RenamedLib2Class } from 'api-extractor-lib2-test';
+export { RenamedLib2Class };
+
+export { }
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.json
new file mode 100644
index 00000000000..000e964edff
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.json
@@ -0,0 +1,89 @@
+{
+  "metadata": {
+    "toolPackage": "@microsoft/api-extractor",
+    "toolVersion": "7.0.9",
+    "schemaVersion": 1000
+  },
+  "kind": "Package",
+  "canonicalReference": "api-extractor-scenarios",
+  "docComment": "",
+  "name": "api-extractor-scenarios",
+  "members": [
+    {
+      "kind": "EntryPoint",
+      "canonicalReference": "",
+      "name": "",
+      "members": [
+        {
+          "kind": "Class",
+          "canonicalReference": "(A:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "A"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "A",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(B:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "B"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "B",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(C:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "C"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "C",
+          "members": [],
+          "implementsTokenRanges": []
+        }
+      ]
+    }
+  ]
+}
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.ts
new file mode 100644
index 00000000000..220b915badf
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/api-extractor-scenarios.api.ts
@@ -0,0 +1,14 @@
+// @public (undocumented)
+declare class A {
+}
+
+// @public (undocumented)
+declare class B {
+}
+
+// @public (undocumented)
+declare class C {
+}
+
+
+// (No @packageDocumentation comment for this package)
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/rollup.d.ts
new file mode 100644
index 00000000000..47bf36a4473
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar1/rollup.d.ts
@@ -0,0 +1,14 @@
+
+/** @public */
+export declare class A {
+}
+
+/** @public */
+export declare class B {
+}
+
+/** @public */
+export declare class C {
+}
+
+export { }
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.json
new file mode 100644
index 00000000000..e9c3832f46b
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.json
@@ -0,0 +1,135 @@
+{
+  "metadata": {
+    "toolPackage": "@microsoft/api-extractor",
+    "toolVersion": "7.0.9",
+    "schemaVersion": 1000
+  },
+  "kind": "Package",
+  "canonicalReference": "api-extractor-scenarios",
+  "docComment": "",
+  "name": "api-extractor-scenarios",
+  "members": [
+    {
+      "kind": "EntryPoint",
+      "canonicalReference": "",
+      "name": "",
+      "members": [
+        {
+          "kind": "Class",
+          "canonicalReference": "(A:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "A"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "A",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(Lib1Class:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib1Class"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib1Class",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Interface",
+          "canonicalReference": "(Lib1Interface:interface)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare interface "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib1Interface"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib1Interface",
+          "members": [],
+          "extendsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(Lib2Class:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib2Class"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib2Class",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Interface",
+          "canonicalReference": "(Lib2Interface:interface)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare interface "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib2Interface"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib2Interface",
+          "members": [],
+          "extendsTokenRanges": []
+        }
+      ]
+    }
+  ]
+}
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.ts
new file mode 100644
index 00000000000..58c7024adcc
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/api-extractor-scenarios.api.ts
@@ -0,0 +1,22 @@
+// @public (undocumented)
+declare class A {
+}
+
+// @public (undocumented)
+declare class Lib1Class {
+}
+
+// @public (undocumented)
+declare interface Lib1Interface {
+}
+
+// @public (undocumented)
+declare class Lib2Class {
+}
+
+// @public (undocumented)
+declare interface Lib2Interface {
+}
+
+
+// (No @packageDocumentation comment for this package)
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts
new file mode 100644
index 00000000000..68e902a19f9
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar2/rollup.d.ts
@@ -0,0 +1,22 @@
+
+/** @public */
+export declare class A {
+}
+
+/** @public */
+export declare class Lib1Class {
+}
+
+/** @public */
+export declare interface Lib1Interface {
+}
+
+/** @public */
+export declare class Lib2Class {
+}
+
+/** @public */
+export declare interface Lib2Interface {
+}
+
+export { }
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.json
new file mode 100644
index 00000000000..482892907d1
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.json
@@ -0,0 +1,66 @@
+{
+  "metadata": {
+    "toolPackage": "@microsoft/api-extractor",
+    "toolVersion": "7.0.9",
+    "schemaVersion": 1000
+  },
+  "kind": "Package",
+  "canonicalReference": "api-extractor-scenarios",
+  "docComment": "",
+  "name": "api-extractor-scenarios",
+  "members": [
+    {
+      "kind": "EntryPoint",
+      "canonicalReference": "",
+      "name": "",
+      "members": [
+        {
+          "kind": "Class",
+          "canonicalReference": "(A:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "A"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "A",
+          "members": [],
+          "implementsTokenRanges": []
+        },
+        {
+          "kind": "Class",
+          "canonicalReference": "(Lib1Class:class)",
+          "docComment": "/**\n * @public\n */\n",
+          "excerptTokens": [
+            {
+              "kind": "Content",
+              "text": "export declare class "
+            },
+            {
+              "kind": "Reference",
+              "text": "Lib1Class"
+            },
+            {
+              "kind": "Content",
+              "text": " "
+            }
+          ],
+          "releaseTag": "Public",
+          "name": "Lib1Class",
+          "members": [],
+          "implementsTokenRanges": []
+        }
+      ]
+    }
+  ]
+}
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.ts
new file mode 100644
index 00000000000..74b9d6fec05
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/api-extractor-scenarios.api.ts
@@ -0,0 +1,10 @@
+// @public (undocumented)
+declare class A {
+}
+
+// @public (undocumented)
+declare class Lib1Class {
+}
+
+
+// (No @packageDocumentation comment for this package)
diff --git a/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/rollup.d.ts b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/rollup.d.ts
new file mode 100644
index 00000000000..4f2d0815801
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/etc/test-outputs/exportStar3/rollup.d.ts
@@ -0,0 +1,10 @@
+
+/** @public */
+export declare class A {
+}
+
+/** @public */
+export declare class Lib1Class {
+}
+
+export { }
diff --git a/build-tests/api-extractor-scenarios/package.json b/build-tests/api-extractor-scenarios/package.json
index 2d7ddfc02a7..5e2939c57a6 100644
--- a/build-tests/api-extractor-scenarios/package.json
+++ b/build-tests/api-extractor-scenarios/package.json
@@ -13,6 +13,8 @@
     "@microsoft/node-core-library": "3.9.0",
     "@types/jest": "23.3.11",
     "@types/node": "8.5.8",
+    "api-extractor-lib1-test": "1.0.0",
+    "api-extractor-lib2-test": "1.0.0",
     "fs-extra": "~7.0.1",
     "typescript": "~3.1.6"
   }
diff --git a/build-tests/api-extractor-scenarios/src/exportDuplicate1/index.ts b/build-tests/api-extractor-scenarios/src/exportDuplicate1/index.ts
new file mode 100644
index 00000000000..151d4a08cae
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportDuplicate1/index.ts
@@ -0,0 +1,11 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+/** @public */
+class X {
+}
+
+export { X }
+
+// TODO: "Internal Error: The symbol Y was also exported as X; this is not supported yet"
+// export { X as Y}
diff --git a/build-tests/api-extractor-scenarios/src/exportImportedExternal/index.ts b/build-tests/api-extractor-scenarios/src/exportImportedExternal/index.ts
new file mode 100644
index 00000000000..0a4230fb714
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportImportedExternal/index.ts
@@ -0,0 +1,11 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+import { Lib1Interface } from 'api-extractor-lib1-test';
+export { Lib1Interface }
+
+import { Lib2Interface as RenamedLib2Class } from 'api-extractor-lib2-test';
+export { RenamedLib2Class as DoubleRenamedLib2Class }
+
+export { Lib1Class } from 'api-extractor-lib1-test';
+export { Lib2Class as RenamedLib2Class } from 'api-extractor-lib2-test';
diff --git a/build-tests/api-extractor-scenarios/src/exportStar1/index.ts b/build-tests/api-extractor-scenarios/src/exportStar1/index.ts
new file mode 100644
index 00000000000..4fb1ad380ce
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar1/index.ts
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export * from './reexportStar';
+
+// TODO: "Internal Error: The symbol A was also exported as B; this is not supported yet"
+// export { A as B } from './localFile';
diff --git a/build-tests/api-extractor-scenarios/src/exportStar1/localFile.ts b/build-tests/api-extractor-scenarios/src/exportStar1/localFile.ts
new file mode 100644
index 00000000000..95fbe424bb5
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar1/localFile.ts
@@ -0,0 +1,8 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+/** @public */
+export class A { }
+
+/** @public */
+export class B { }
diff --git a/build-tests/api-extractor-scenarios/src/exportStar1/reexportStar.ts b/build-tests/api-extractor-scenarios/src/exportStar1/reexportStar.ts
new file mode 100644
index 00000000000..b382f373b00
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar1/reexportStar.ts
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export * from './localFile';
+
+/** @public */
+export class C { }
diff --git a/build-tests/api-extractor-scenarios/src/exportStar2/index.ts b/build-tests/api-extractor-scenarios/src/exportStar2/index.ts
new file mode 100644
index 00000000000..0c69d7b4abe
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar2/index.ts
@@ -0,0 +1,6 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export * from './reexportStar';
+
+export * from 'api-extractor-lib2-test';
diff --git a/build-tests/api-extractor-scenarios/src/exportStar2/reexportStar.ts b/build-tests/api-extractor-scenarios/src/exportStar2/reexportStar.ts
new file mode 100644
index 00000000000..f2ed3c7966f
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar2/reexportStar.ts
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export * from 'api-extractor-lib1-test';
+
+/** @public */
+export class A { }
diff --git a/build-tests/api-extractor-scenarios/src/exportStar3/index.ts b/build-tests/api-extractor-scenarios/src/exportStar3/index.ts
new file mode 100644
index 00000000000..7bab9d0eb46
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar3/index.ts
@@ -0,0 +1,4 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export { A, Lib1Class } from './reexportStar';
diff --git a/build-tests/api-extractor-scenarios/src/exportStar3/reexportStar.ts b/build-tests/api-extractor-scenarios/src/exportStar3/reexportStar.ts
new file mode 100644
index 00000000000..f2ed3c7966f
--- /dev/null
+++ b/build-tests/api-extractor-scenarios/src/exportStar3/reexportStar.ts
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+export * from 'api-extractor-lib1-test';
+
+/** @public */
+export class A { }
diff --git a/build-tests/api-extractor-scenarios/src/runScenarios.ts b/build-tests/api-extractor-scenarios/src/runScenarios.ts
index d4cdcc43909..1ad27389ee7 100644
--- a/build-tests/api-extractor-scenarios/src/runScenarios.ts
+++ b/build-tests/api-extractor-scenarios/src/runScenarios.ts
@@ -2,7 +2,7 @@
 // See LICENSE in the project root for license information.
 
 import * as process from 'process';
-import { JsonFile, Executable } from '@microsoft/node-core-library';
+import { JsonFile, Executable, FileSystem } from '@microsoft/node-core-library';
 
 function executeCommand(command: string, args: string[]): void {
   console.log(`---> ${command} ${args.join(' ')}`);
@@ -16,6 +16,10 @@ function executeCommand(command: string, args: string[]): void {
   if (result.error) {
     throw result.error.toString();
   }
+
+  if (result.status !== 0) {
+    throw new Error('The process returned a nonzero exit code');
+  }
 }
 
 export function runScenarios(buildConfigPath: string): void {
@@ -67,18 +71,13 @@ export function runScenarios(buildConfigPath: string): void {
 
     JsonFile.save(apiExtractorJson, apiExtractorJsonPath, { ensureFolderExists: true });
 
-    // Run the API Extractor command-line
-    if (process.argv.indexOf('--production') >= 0) {
-      executeCommand(apiExtractorBinary, ['run', '--config', apiExtractorJsonPath]);
-    } else {
-      // Create an empty file to force API Extractor to create a missing output file
-      // TODO: Add an api-extractor option to force creation of a missing .api.ts file
-      // See GitHub issue https://github.com/Microsoft/web-build-tools/issues/1018
-      JsonFile.save('', `etc/test-outputs/${scenarioFolderName}/api-extractor-scenarios.api.ts`,
-        { ensureFolderExists: true });
-
-      executeCommand(apiExtractorBinary, ['run', '--local', '--config', apiExtractorJsonPath]);
-    }
+    // Create an empty file to force API Extractor to create a missing output file
+    // TODO: Add an api-extractor option to force creation of a missing .api.ts file
+    // See GitHub issue https://github.com/Microsoft/web-build-tools/issues/1018
+    FileSystem.writeFile(`./etc/test-outputs/${scenarioFolderName}/api-extractor-scenarios.api.ts`, '',
+      { ensureFolderExists: true });
 
+    // Run the API Extractor command-line
+    executeCommand(apiExtractorBinary, ['run', '--local', '--config', apiExtractorJsonPath]);
   }
 }
diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json
index 4f1a1d61876..788922c86da 100644
--- a/common/config/rush/nonbrowser-approved-packages.json
+++ b/common/config/rush/nonbrowser-approved-packages.json
@@ -130,6 +130,14 @@
       "name": "@yarnpkg/lockfile",
       "allowedCategories": [ "libraries" ]
     },
+    {
+      "name": "api-extractor-lib1-test",
+      "allowedCategories": [ "tests" ]
+    },
+    {
+      "name": "api-extractor-lib2-test",
+      "allowedCategories": [ "tests" ]
+    },
     {
       "name": "api-extractor-test-01",
       "allowedCategories": [ "tests" ]
diff --git a/common/config/rush/shrinkwrap.yaml b/common/config/rush/shrinkwrap.yaml
index 2c1de5f5830..43373ca0eb2 100644
--- a/common/config/rush/shrinkwrap.yaml
+++ b/common/config/rush/shrinkwrap.yaml
@@ -8,6 +8,8 @@ dependencies:
   '@rush-temp/api-documenter': 'file:projects/api-documenter.tgz'
   '@rush-temp/api-documenter-test': 'file:projects/api-documenter-test.tgz'
   '@rush-temp/api-extractor': 'file:projects/api-extractor.tgz'
+  '@rush-temp/api-extractor-lib1-test': 'file:projects/api-extractor-lib1-test.tgz'
+  '@rush-temp/api-extractor-lib2-test': 'file:projects/api-extractor-lib2-test.tgz'
   '@rush-temp/api-extractor-scenarios': 'file:projects/api-extractor-scenarios.tgz'
   '@rush-temp/api-extractor-test-01': 'file:projects/api-extractor-test-01.tgz'
   '@rush-temp/api-extractor-test-02': 'file:projects/api-extractor-test-02.tgz'
@@ -10082,6 +10084,30 @@ packages:
       integrity: sha512-UrWQq7mRjurECP9jG1raSNTsPVxg7gfnguuxro7njKXTtxqXc4GSvvwEWKAfYxeiGIqDqUFqNa0S2ii4nDkLew==
       tarball: 'file:projects/api-documenter.tgz'
     version: 0.0.0
+  'file:projects/api-extractor-lib1-test.tgz':
+    dependencies:
+      '@types/jest': 23.3.11
+      '@types/node': 8.5.8
+      fs-extra: 7.0.1
+      typescript: 3.1.6
+    dev: false
+    name: '@rush-temp/api-extractor-lib1-test'
+    resolution:
+      integrity: sha512-2JNRSRsQAKPgR3aHokv6u7Gr0ZdrR87wqXaE112xjwYuYOdnKDKItZvHpp25GaM8hY51C+hLjfTuF0EORacp1g==
+      tarball: 'file:projects/api-extractor-lib1-test.tgz'
+    version: 0.0.0
+  'file:projects/api-extractor-lib2-test.tgz':
+    dependencies:
+      '@types/jest': 23.3.11
+      '@types/node': 8.5.8
+      fs-extra: 7.0.1
+      typescript: 3.1.6
+    dev: false
+    name: '@rush-temp/api-extractor-lib2-test'
+    resolution:
+      integrity: sha512-jRXDzpzsPYoD9DGGDpLz7JcKqaQn3BeTUskj+OVQTrdX7fUmhkfqVvGmVZoneB6BlAbsWt+0DQEbfCYacNE6ew==
+      tarball: 'file:projects/api-extractor-lib2-test.tgz'
+    version: 0.0.0
   'file:projects/api-extractor-scenarios.tgz':
     dependencies:
       '@types/jest': 23.3.11
@@ -10091,7 +10117,7 @@ packages:
     dev: false
     name: '@rush-temp/api-extractor-scenarios'
     resolution:
-      integrity: sha512-QqHVhNYBiu+wK043dd4stKy8iE9OCR43h9FyLytlItPYDz5xRorKCCwHiTtKrB1w0RR2PLk4B6kamENKxHfFWA==
+      integrity: sha512-94rg9S9GDja2/UWNItlrcgq3C/ksE2bajlPMTuRK3r/Uf6mJHy1LDqGb20ABahbPMc+01Ys0XLA00314F7QQEw==
       tarball: 'file:projects/api-extractor-scenarios.tgz'
     version: 0.0.0
   'file:projects/api-extractor-test-01.tgz':
@@ -10798,6 +10824,8 @@ specifiers:
   '@rush-temp/api-documenter': 'file:./projects/api-documenter.tgz'
   '@rush-temp/api-documenter-test': 'file:./projects/api-documenter-test.tgz'
   '@rush-temp/api-extractor': 'file:./projects/api-extractor.tgz'
+  '@rush-temp/api-extractor-lib1-test': 'file:./projects/api-extractor-lib1-test.tgz'
+  '@rush-temp/api-extractor-lib2-test': 'file:./projects/api-extractor-lib2-test.tgz'
   '@rush-temp/api-extractor-scenarios': 'file:./projects/api-extractor-scenarios.tgz'
   '@rush-temp/api-extractor-test-01': 'file:./projects/api-extractor-test-01.tgz'
   '@rush-temp/api-extractor-test-02': 'file:./projects/api-extractor-test-02.tgz'
diff --git a/rush.json b/rush.json
index 1abb212f39d..af3cd38625f 100644
--- a/rush.json
+++ b/rush.json
@@ -307,6 +307,18 @@
       "reviewCategory": "tests",
       "shouldPublish": false
     },
+    {
+      "packageName": "api-extractor-lib1-test",
+      "projectFolder": "build-tests/api-extractor-lib1-test",
+      "reviewCategory": "tests",
+      "shouldPublish": false
+    },
+    {
+      "packageName": "api-extractor-lib2-test",
+      "projectFolder": "build-tests/api-extractor-lib2-test",
+      "reviewCategory": "tests",
+      "shouldPublish": false
+    },
     {
       "packageName": "api-extractor-scenarios",
       "projectFolder": "build-tests/api-extractor-scenarios",
