blob: ba253da3382ba13efcf8a8f4bf0f5c881e8bf38c [file] [log] [blame]
// Copyright 2020 CUE Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-- in.cue --
import "path"
#OSes: [path.Unix, path.Windows, path.Plan9]
#AnyOS: or(#OSes)
// Test these OSes for all tests below.
{
[string]: {
unix: _
plan9: _
windows: _
}
}
Split: [OS=#AnyOS]: [ARG=string]: path.Split(ARG, OS)
Split: default: [ARG=string]: path.Split(ARG)
Split: default: Split.unix
Split: [_]: {
"/foo/bar/baz": _
"a/b": _
"//host/share/foo": _
#"\\host\share\foo"#: _
"c:/foo/bar": _
#"c:\foo\bar"#: _
}
SplitList: [OS=string]: [ARG=string]: path.SplitList(ARG, OS)
SplitList: [_]: {
"a:b": _
"a\u0000b": _
"a;b": _
}
Clean: [OS=#AnyOS]: [ARG=string]: path.Clean(ARG, OS)
Clean: default: [ARG=string]: path.Clean(ARG)
Clean: default: Clean.unix
Clean: [_]: {
"abc//def//ghi": _
#"c:\abc\def\..\.."#: _
}
Slash: [OS=string]: [ARG=string]: {
to: path.ToSlash(ARG, OS)
from: path.FromSlash(ARG, OS)
// should roundtrip
to: path.ToSlash(from, OS)
from: path.FromSlash(to, OS)
}
Slash: [_]: {
"": _
"/": _
"/a/b": _
"/a//b": _
}
Ext: [OS=#AnyOS]: [ARG=string]: path.Ext(ARG, OS)
Ext: default: [ARG=string]: path.Ext(ARG)
Ext: default: Ext.unix
Ext: [_]: {
// Same for all OS-es
"path.go": ".go"
"path.pb.go": ".go"
"a.dir/b": ""
"a.dir/b.go": ".go"
"a.dir/": ""
// Differs on Windows.
"a.dir\\foo": _
}
Resolve: [OS=#AnyOS]: [A1=_]: [A2=_]: path.Resolve(A1, A2, OS)
Resolve: default: [A1=_]: [A2=_]: path.Resolve(A1, A2)
Resolve: default: Resolve.unix
Resolve: [_]: {
"a/b/c": "d/e": _
"/a/b": "/c/d": _
"c:/a": #"d:\"#: _
"//home/user/foo": "bar": _
"//home/user/foo": "//other/abs/foo": _
}
IsAbs: [OS=#AnyOS]: [ARG=string]: path.IsAbs(ARG, OS)
IsAbs: default: [ARG=string]: path.IsAbs(ARG)
IsAbs: default: IsAbs.unix
IsAbs: [_]: {
"": _
"/a": _
"a": _
"c:": _
"c:/": _
"c:\\": _
"//home/user/foo": _
}
Volume: [OS=string]: [ARG=string]: path.VolumeName(ARG, OS)
Volume: [!="windows"]: [string]: "" // non-windows is always ""
Volume: [_]: {
"c:/foo/bar": _
"c:": _
"2:": _
"": _
#"\\\host"#: _
#"\\\host\"#: _
#"\\\host\share"#: _
#"\\\host\\share"#: _
#"\\host"#: _
#"//host"#: _
#"\\host\"#: _
#"//host/"#: _
#"\\host\share"#: _
#"//host/share"#: _
#"\\host\share\"#: _
#"//host/share/"#: _
#"\\host\share\foo"#: _
#"//host/share/foo"#: _
#"\\host\share\\foo\\\bar\\\\baz"#: _
#"//host/share//foo///bar////baz"#: _
#"\\host\share\foo\..\bar"#: _
#"//host/share/foo/../bar"#: _
}
-- out/path --
#OSes: ["unix", "windows", "plan9"]
#AnyOS: "unix" | "windows" | "plan9"
Split: {
unix: {
"/foo/bar/baz": ["/foo/bar/", "baz"]
"a/b": ["a/", "b"]
"//host/share/foo": ["//host/share/", "foo"]
"\\\\host\\share\\foo": ["", "\\\\host\\share\\foo"]
"c:/foo/bar": ["c:/foo/", "bar"]
"c:\\foo\\bar": ["", "c:\\foo\\bar"]
}
plan9: {
"/foo/bar/baz": ["/foo/bar/", "baz"]
"a/b": ["a/", "b"]
"//host/share/foo": ["//host/share/", "foo"]
"\\\\host\\share\\foo": ["", "\\\\host\\share\\foo"]
"c:/foo/bar": ["c:/foo/", "bar"]
"c:\\foo\\bar": ["", "c:\\foo\\bar"]
}
default: {
"/foo/bar/baz": ["/foo/bar/", "baz"]
"a/b": ["a/", "b"]
"//host/share/foo": ["//host/share/", "foo"]
"\\\\host\\share\\foo": ["", "\\\\host\\share\\foo"]
"c:/foo/bar": ["c:/foo/", "bar"]
"c:\\foo\\bar": ["", "c:\\foo\\bar"]
}
windows: {
"/foo/bar/baz": ["/foo/bar/", "baz"]
"a/b": ["a/", "b"]
"//host/share/foo": ["//host/share/", "foo"]
"\\\\host\\share\\foo": ["\\\\host\\share\\", "foo"]
"c:/foo/bar": ["c:/foo/", "bar"]
"c:\\foo\\bar": ["c:\\foo\\", "bar"]
}
}
SplitList: {
unix: {
"a:b": ["a", "b"]
"a\u0000b": ["a\u0000b"]
"a;b": ["a;b"]
}
plan9: {
"a:b": ["a:b"]
"a\u0000b": ["a", "b"]
"a;b": ["a;b"]
}
windows: {
"a:b": ["a:b"]
"a\u0000b": ["a\u0000b"]
"a;b": ["a", "b"]
}
}
Clean: {
unix: {
"abc//def//ghi": "abc/def/ghi"
"c:\\abc\\def\\..\\..": "c:\\abc\\def\\..\\.."
}
plan9: {
"abc//def//ghi": "abc/def/ghi"
"c:\\abc\\def\\..\\..": "c:\\abc\\def\\..\\.."
}
default: {
"abc//def//ghi": "abc/def/ghi"
"c:\\abc\\def\\..\\..": "c:\\abc\\def\\..\\.."
}
windows: {
"abc//def//ghi": "abc\\def\\ghi"
"c:\\abc\\def\\..\\..": "c:\\"
}
}
Slash: {
unix: {
"": {
// should roundtrip
to: ""
from: ""
}
"/": {
// should roundtrip
to: "/"
from: "/"
}
"/a/b": {
// should roundtrip
to: "/a/b"
from: "/a/b"
}
"/a//b": {
// should roundtrip
to: "/a//b"
from: "/a//b"
}
}
plan9: {
"": {
// should roundtrip
to: ""
from: ""
}
"/": {
// should roundtrip
to: "/"
from: "/"
}
"/a/b": {
// should roundtrip
to: "/a/b"
from: "/a/b"
}
"/a//b": {
// should roundtrip
to: "/a//b"
from: "/a//b"
}
}
windows: {
"": {
// should roundtrip
to: ""
from: ""
}
"/": {
// should roundtrip
to: "/"
from: "\\"
}
"/a/b": {
// should roundtrip
to: "/a/b"
from: "\\a\\b"
}
"/a//b": {
// should roundtrip
to: "/a//b"
from: "\\a\\\\b"
}
}
}
Ext: {
unix: {
// Same for all OS-es
"path.go": ".go"
"path.pb.go": ".go"
"a.dir/b": ""
"a.dir/b.go": ".go"
"a.dir/": ""
// Differs on Windows.
"a.dir\\foo": ".dir\\foo"
}
plan9: {
// Same for all OS-es
"path.go": ".go"
"path.pb.go": ".go"
"a.dir/b": ""
"a.dir/b.go": ".go"
"a.dir/": ""
// Differs on Windows.
"a.dir\\foo": ".dir\\foo"
}
default: {
// Same for all OS-es
"path.go": ".go"
"path.pb.go": ".go"
"a.dir/b": ""
"a.dir/b.go": ".go"
"a.dir/": ""
// Differs on Windows.
"a.dir\\foo": ".dir\\foo"
}
windows: {
// Same for all OS-es
"path.go": ".go"
"path.pb.go": ".go"
"a.dir/b": ""
"a.dir/b.go": ".go"
"a.dir/": ""
// Differs on Windows.
"a.dir\\foo": ""
}
}
Resolve: {
unix: {
"a/b/c": {
"d/e": "a/b/c/d/e"
}
"/a/b": {
"/c/d": "/c/d"
}
"c:/a": {
"d:\\": "c:/a/d:\\"
}
"//home/user/foo": {
bar: "/home/user/foo/bar"
"//other/abs/foo": "/other/abs/foo"
}
}
plan9: {
"a/b/c": {
"d/e": "a/b/c/d/e"
}
"/a/b": {
"/c/d": "/c/d"
}
"c:/a": {
"d:\\": "c:/a/d:\\"
}
"//home/user/foo": {
bar: "/home/user/foo/bar"
"//other/abs/foo": "/other/abs/foo"
}
}
default: {
"a/b/c": {
"d/e": "a/b/c/d/e"
}
"/a/b": {
"/c/d": "/c/d"
}
"c:/a": {
"d:\\": "c:/a/d:\\"
}
"//home/user/foo": {
bar: "/home/user/foo/bar"
"//other/abs/foo": "/other/abs/foo"
}
}
windows: {
"a/b/c": {
"d/e": "a\\b\\c\\d\\e"
}
"/a/b": {
"/c/d": "\\a\\b\\c\\d"
}
"c:/a": {
"d:\\": "d:\\"
}
"//home/user/foo": {
bar: "\\\\home\\user\\foo\\bar"
"//other/abs/foo": "\\\\other\\abs\\foo"
}
}
}
IsAbs: {
unix: {
"": false
"/a": true
a: false
"c:": false
"c:/": false
"c:\\": false
"//home/user/foo": true
}
plan9: {
"": false
"/a": true
a: false
"c:": false
"c:/": false
"c:\\": false
"//home/user/foo": true
}
default: {
"": false
"/a": true
a: false
"c:": false
"c:/": false
"c:\\": false
"//home/user/foo": true
}
windows: {
"": false
"/a": false
a: false
"c:": false
"c:/": true
"c:\\": true
"//home/user/foo": true
}
}
Volume: {
unix: {
"c:/foo/bar": ""
"c:": ""
"2:": ""
"": ""
"\\\\\\host": ""
"\\\\\\host\\": ""
"\\\\\\host\\share": ""
"\\\\\\host\\\\share": ""
"\\\\host": ""
"//host": ""
"\\\\host\\": ""
"//host/": ""
"\\\\host\\share": ""
"//host/share": ""
"\\\\host\\share\\": ""
"//host/share/": ""
"\\\\host\\share\\foo": ""
"//host/share/foo": ""
"\\\\host\\share\\\\foo\\\\\\bar\\\\\\\\baz": ""
"//host/share//foo///bar////baz": ""
"\\\\host\\share\\foo\\..\\bar": ""
"//host/share/foo/../bar": ""
}
plan9: {
"c:/foo/bar": ""
"c:": ""
"2:": ""
"": ""
"\\\\\\host": ""
"\\\\\\host\\": ""
"\\\\\\host\\share": ""
"\\\\\\host\\\\share": ""
"\\\\host": ""
"//host": ""
"\\\\host\\": ""
"//host/": ""
"\\\\host\\share": ""
"//host/share": ""
"\\\\host\\share\\": ""
"//host/share/": ""
"\\\\host\\share\\foo": ""
"//host/share/foo": ""
"\\\\host\\share\\\\foo\\\\\\bar\\\\\\\\baz": ""
"//host/share//foo///bar////baz": ""
"\\\\host\\share\\foo\\..\\bar": ""
"//host/share/foo/../bar": ""
}
windows: {
"c:/foo/bar": "c:"
"c:": "c:"
"2:": ""
"": ""
"\\\\\\host": ""
"\\\\\\host\\": ""
"\\\\\\host\\share": ""
"\\\\\\host\\\\share": ""
"\\\\host": ""
"//host": ""
"\\\\host\\": ""
"//host/": ""
"\\\\host\\share": "\\\\host\\share"
"//host/share": "//host/share"
"\\\\host\\share\\": "\\\\host\\share"
"//host/share/": "//host/share"
"\\\\host\\share\\foo": "\\\\host\\share"
"//host/share/foo": "//host/share"
"\\\\host\\share\\\\foo\\\\\\bar\\\\\\\\baz": "\\\\host\\share"
"//host/share//foo///bar////baz": "//host/share"
"\\\\host\\share\\foo\\..\\bar": "\\\\host\\share"
"//host/share/foo/../bar": "//host/share"
}
}