Просмотр исходного кода

Merge pull request #1890 from blink1073/fix-tests

Fix path and url functions and update tests
Afshin Darian 8 лет назад
Родитель
Сommit
7ec5eced43
4 измененных файлов с 102 добавлено и 113 удалено
  1. 4 13
      src/coreutils/path.ts
  2. 8 1
      src/coreutils/url.ts
  3. 8 17
      test/src/coreutils/path.spec.ts
  4. 82 82
      test/src/index.ts

+ 4 - 13
src/coreutils/path.ts

@@ -7,6 +7,8 @@ import * as posix
 
 /**
  * The namespace for path-related functions.
+ *
+ * Note that Jupyter server paths do not start with a leading slash.
  */
 export
 namespace PathExt {
@@ -18,7 +20,7 @@ namespace PathExt {
    */
   export
   function join(...paths: string[]): string {
-    return posix.join(...paths);
+    return removeSlash(posix.join(...paths));
   }
 
   /**
@@ -41,7 +43,7 @@ namespace PathExt {
    */
   export
   function dirname(path: string): string {
-    return posix.dirname(path);
+    return removeSlash(posix.dirname(path));
   }
 
   /**
@@ -110,17 +112,6 @@ namespace PathExt {
     return removeSlash(posix.relative(from, to));
   }
 
-  /**
-   * Determines whether {path} is an absolute path. An absolute path will
-   * always resolve to the same location, regardless of the working directory.
-   *
-   * @param path - The path to test.
-   */
-  export
-  function isAbsolute(path: string): boolean {
-    return posix.isAbsolute(path);
-  }
-
   /**
    * Normalize a file extension to be of the type `'.foo'`.
    *

+ 8 - 1
src/coreutils/url.ts

@@ -24,6 +24,7 @@ namespace URLExt {
   function parse(url: string): IUrl {
     if (typeof document !== 'undefined') {
       let a = document.createElement('a');
+      a.href = url;
       return a;
     }
     return urlparse(url);
@@ -96,7 +97,13 @@ namespace URLExt {
    */
   export
   function isLocal(url: string): boolean {
-    return !parse(url).protocol && url.indexOf('//') !== 0;
+    switch (parse(url).hostname) {
+    case 'localhost':
+    case '':
+      return true;
+    default:
+      return false;
+    }
   }
 
   /**

+ 8 - 17
test/src/coreutils/path.spec.ts

@@ -10,7 +10,7 @@ import {
 } from '../../../lib/coreutils';
 
 
-const TESTPATH = '/foo/test/simple/test-path.js';
+const TESTPATH = 'foo/test/simple/test-path.js';
 
 
 describe('@jupyterlab/coreutils', () => {
@@ -20,8 +20,8 @@ describe('@jupyterlab/coreutils', () => {
     describe('.join()', () => {
 
       it('should join the arguments and normalize the path', () => {
-        let path = PathExt.join('/foo', '../../../bar');
-        expect(path).to.equal('/bar');
+        let path = PathExt.join('foo', '../../../bar');
+        expect(path).to.equal('../../bar');
       });
 
     });
@@ -37,7 +37,7 @@ describe('@jupyterlab/coreutils', () => {
     describe('.dirname()', () => {
 
       it('should get the directory name of a path', () => {
-        expect(PathExt.dirname(TESTPATH)).to.equal('/foo/test/simple');
+        expect(PathExt.dirname(TESTPATH)).to.equal('foo/test/simple');
       });
 
     });
@@ -65,9 +65,9 @@ describe('@jupyterlab/coreutils', () => {
 
     describe('.resolve()', () => {
 
-      it('should resolve a sequence of paths to an absolute path', () => {
-        let path = PathExt.resolve('/var/lib', '../', 'file/');
-        expect(path).to.equal('/var/file');
+      it('should resolve a sequence of paths to an absolute path on the server', () => {
+        let path = PathExt.resolve('var/lib', '../', 'file/');
+        expect(path).to.equal('var/file');
       });
 
     });
@@ -75,21 +75,12 @@ describe('@jupyterlab/coreutils', () => {
     describe('.relative()', () => {
 
       it('should solve the relative path', () => {
-        let path = PathExt.relative('/var/lib', '/var/apache');
+        let path = PathExt.relative('var/lib', 'var/apache');
         expect(path).to.equal('../apache');
       });
 
     });
 
-    describe('.isAbsolute()', () => {
-
-      it('should determine whether a path is absolute', () => {
-        expect(PathExt.isAbsolute('/home/foo')).to.equal(true);
-        expect(PathExt.isAbsolute('./baz')).to.equal(false);
-      });
-
-    });
-
     describe('.normalizeExtension()', () => {
 
       it('should normalize a file extension to be of type `.foo`', () => {

+ 82 - 82
test/src/index.ts

@@ -3,97 +3,97 @@
 
 import '@phosphor/widgets/style/index.css';
 
-// import './application/instancetracker.spec';
-// import './application/loader.spec';
-// import './application/shell.spec';
-
-// import './apputils/dialog.spec';
-// import './apputils/iframe.spec';
-// import './apputils/jsoneditor.spec';
-// import './apputils/sanitizer.spec';
-// import './apputils/styling.spec';
-// import './apputils/vdom.spec';
-
-// import './cells/model.spec';
-// import './cells/widget.spec';
-
-// import './codeeditor/editor.spec';
-// import './codeeditor/widget.spec';
-
-// import './codemirror/editor.spec';
-// import './codemirror/factory.spec';
-
-// import './commandlinker/commandlinker.spec';
-
-// import './completer/handler.spec';
-// import './completer/model.spec';
-// import './completer/widget.spec';
-
-// import './console/foreign.spec';
-// import './console/history.spec';
-// import './console/panel.spec';
-// import './console/widget.spec';
-
-// import './coreutils/activitymonitor.spec';
-// import './coreutils/nbformat.spec';
-// import './coreutils/observablejson.spec';
-// import './coreutils/observablemap.spec';
-// import './coreutils/observablestring.spec';
-// import './coreutils/observablevector.spec';
-// import './coreutils/path.spec';
-// import './coreutils/time.spec';
-// import './coreutils/url.spec';
-// import './coreutils/uuid.spec';
-// import './coreutils/undoablevector.spec';
-
-// import './csvwidget/table.spec';
-// import './csvwidget/toolbar.spec';
-// import './csvwidget/widget.spec';
-
-// import './docmanager/manager.spec';
-// import './docmanager/savehandler.spec';
-// import './docmanager/widgetmanager.spec';
-
-// import './docregistry/context.spec';
-// import './docregistry/default.spec';
-// import './docregistry/registry.spec';
-
-// import './editorwidget/widget.spec';
-
-// import './filebrowser/crumbs.spec';
+import './application/instancetracker.spec';
+import './application/loader.spec';
+import './application/shell.spec';
+
+import './apputils/dialog.spec';
+import './apputils/iframe.spec';
+import './apputils/jsoneditor.spec';
+import './apputils/sanitizer.spec';
+import './apputils/styling.spec';
+import './apputils/vdom.spec';
+
+import './cells/model.spec';
+import './cells/widget.spec';
+
+import './codeeditor/editor.spec';
+import './codeeditor/widget.spec';
+
+import './codemirror/editor.spec';
+import './codemirror/factory.spec';
+
+import './commandlinker/commandlinker.spec';
+
+import './completer/handler.spec';
+import './completer/model.spec';
+import './completer/widget.spec';
+
+import './console/foreign.spec';
+import './console/history.spec';
+import './console/panel.spec';
+import './console/widget.spec';
+
+import './coreutils/activitymonitor.spec';
+import './coreutils/nbformat.spec';
+import './coreutils/observablejson.spec';
+import './coreutils/observablemap.spec';
+import './coreutils/observablestring.spec';
+import './coreutils/observablevector.spec';
+import './coreutils/path.spec';
+import './coreutils/time.spec';
+import './coreutils/url.spec';
+import './coreutils/uuid.spec';
+import './coreutils/undoablevector.spec';
+
+import './csvwidget/table.spec';
+import './csvwidget/toolbar.spec';
+import './csvwidget/widget.spec';
+
+import './docmanager/manager.spec';
+import './docmanager/savehandler.spec';
+import './docmanager/widgetmanager.spec';
+
+import './docregistry/context.spec';
+import './docregistry/default.spec';
+import './docregistry/registry.spec';
+
+import './editorwidget/widget.spec';
+
+import './filebrowser/crumbs.spec';
 import './filebrowser/model.spec';
 
-// import './imagewidget/widget.spec';
+import './imagewidget/widget.spec';
 
-// import './inspector/inspector.spec';
+import './inspector/inspector.spec';
 
-// import './instancerestorer/instancerestorer.spec';
+import './instancerestorer/instancerestorer.spec';
 
-// import './markdownwidget/widget.spec';
+import './markdownwidget/widget.spec';
 
-// import './renderers/renderers.spec';
-// import './renderers/latex.spec';
+import './renderers/renderers.spec';
+import './renderers/latex.spec';
 
-// import './rendermime/mimemodel.spec';
-// import './rendermime/outputmodel.spec';
-// import './rendermime/rendermime.spec';
+import './rendermime/mimemodel.spec';
+import './rendermime/outputmodel.spec';
+import './rendermime/rendermime.spec';
 
-// import './notebook/actions.spec';
-// import './notebook/celltools.spec';
-// import './notebook/default-toolbar.spec';
-// import './notebook/model.spec';
-// import './notebook/modelfactory.spec';
-// import './notebook/panel.spec';
-// import './notebook/trust.spec';
-// import './notebook/widget.spec';
-// import './notebook/widgetfactory.spec';
-// import './notebook/tracker.spec';
+import './notebook/actions.spec';
+import './notebook/celltools.spec';
+import './notebook/default-toolbar.spec';
+import './notebook/model.spec';
+import './notebook/modelfactory.spec';
+import './notebook/panel.spec';
+import './notebook/trust.spec';
+import './notebook/widget.spec';
+import './notebook/widgetfactory.spec';
+import './notebook/tracker.spec';
 
-// import './outputarea/model.spec';
-// import './outputarea/widget.spec';
+import './outputarea/model.spec';
+import './outputarea/widget.spec';
 
-// import './statedb/statedb.spec';
+import './statedb/statedb.spec';
 
-// import './terminal/terminal.spec';
+import './terminal/terminal.spec';
 
-// import './toolbar/toolbar.spec';
+import './toolbar/toolbar.spec';