diff options
Diffstat (limited to 'libcutl/tests/fs')
| -rw-r--r-- | libcutl/tests/fs/makefile | 17 | ||||
| -rw-r--r-- | libcutl/tests/fs/path/driver.cxx | 144 | ||||
| -rw-r--r-- | libcutl/tests/fs/path/makefile | 69 | 
3 files changed, 230 insertions, 0 deletions
diff --git a/libcutl/tests/fs/makefile b/libcutl/tests/fs/makefile new file mode 100644 index 0000000..9bf1523 --- /dev/null +++ b/libcutl/tests/fs/makefile @@ -0,0 +1,17 @@ +# file      : tests/fs/makefile +# copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +# license   : MIT; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +tests := path + +default   := $(out_base)/ +test      := $(out_base)/.test +clean     := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/libcutl/tests/fs/path/driver.cxx b/libcutl/tests/fs/path/driver.cxx new file mode 100644 index 0000000..6c77e67 --- /dev/null +++ b/libcutl/tests/fs/path/driver.cxx @@ -0,0 +1,144 @@ +// file      : tests/fs/path/driver.cxx +// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +// license   : MIT; see accompanying LICENSE file + +#include <cassert> +#include <iostream> + +#include <cutl/fs/path.hxx> + +using std::cerr; +using std::endl; + +using namespace cutl::fs; + +int +main () +{ +  assert (path ("/").string () == "/"); +  assert (path ("//").string () == "/"); +  assert (path ("/tmp/foo/").string () == "/tmp/foo"); +#ifdef _WIN32 +  assert (path ("\\\\").string () == "\\"); +  assert (path ("/\\").string () == "/"); +  assert (path ("C:").string () == "C:"); +  assert (path ("C:\\").string () == "C:"); +  assert (path ("C:\\tmp\\foo\\").string () == "C:\\tmp\\foo"); +#endif + +  // abslote/relative/root +  // +#ifndef _WIN32 +  assert (path ("/").root ()); +  assert (path ("//").root ()); +  assert (path ("/").absolute ()); +  assert (path ("/foo/bar").absolute ()); +  assert (path ("bar/baz").relative ()); +#else +  assert (path ("C:").root ()); +  assert (path ("C:\\").root ()); +  assert (path ("C:\\").absolute ()); +  assert (path ("C:\\foo\\bar").absolute ()); +  assert (path ("bar\\baz").relative ()); +#endif + + +  // leaf +  // +#ifndef _WIN32 +  assert (path ("/").leaf ().string () == ""); +  assert (path ("/tmp").leaf ().string () == "tmp"); +  assert (path ("//tmp").leaf ().string () == "tmp"); +#else +  assert (path ("C:").leaf ().string () == "C:"); +  assert (path ("C:\\tmp").leaf ().string () == "tmp"); +  assert (path ("C:\\\\tmp").leaf ().string () == "tmp"); +#endif + +  // directory +  // +#ifndef _WIN32 +  assert (path ("/").directory ().string () == ""); +  assert (path ("/tmp").directory ().string () == "/"); +  assert (path ("//tmp").directory ().string () == "/"); +#else +  assert (path ("C:").directory ().string () == ""); +  assert (path ("C:\\tmp").directory ().string () == "C:"); +  assert (path ("C:\\\\tmp").directory ().string () == "C:"); +#endif + +  // base +  // +  assert (path ("/").base ().string () == "/"); +  assert (path ("/foo.txt").base ().string () == "/foo"); +  assert (path (".txt").base ().string () == ".txt"); +  assert (path ("/.txt").base ().string () == "/.txt"); +  assert (path ("foo.txt.orig").base ().string () == "foo.txt"); +#ifdef _WIN32 +  assert (path ("C:").base ().string () == "C:"); +  assert (path ("C:\\foo.txt").base ().string () == "C:\\foo"); +#endif + +  // operator/ +  // +#ifndef _WIN32 +  assert ((path ("/") / path ("tmp")).string () == "/tmp"); +  assert ((path ("foo") / path ("bar")).string () == "foo/bar"); +#else +  assert ((path ("\\") / path ("tmp")).string () == "\\tmp"); +  assert ((path ("C:\\") / path ("tmp")).string () == "C:\\tmp"); +  assert ((path ("foo") / path ("bar")).string () == "foo\\bar"); +#endif + +  // normalize +  // +#ifndef _WIN32 +  assert (path ("../foo").normalize ().string () == "../foo"); +  assert (path ("..///foo").normalize ().string () == "../foo"); +  assert (path ("../../foo").normalize ().string () == "../../foo"); +  assert (path (".././foo").normalize ().string () == "../foo"); +  assert (path (".").normalize ().string () == ""); +  assert (path ("./..").normalize ().string () == ".."); +  assert (path ("../.").normalize ().string () == ".."); +  assert (path ("foo/./..").normalize ().string () == ""); +  assert (path ("/foo/./..").normalize ().string () == "/"); +  assert (path ("./foo").normalize ().string () == "foo"); +#else +  assert (path ("../foo").normalize ().string () == "..\\foo"); +  assert (path ("..///foo").normalize ().string () == "..\\foo"); +  assert (path ("..\\../foo").normalize ().string () == "..\\..\\foo"); +  assert (path (".././foo").normalize ().string () == "..\\foo"); +  assert (path (".").normalize ().string () == ""); +  assert (path ("./..").normalize ().string () == ".."); +  assert (path ("../.").normalize ().string () == ".."); +  assert (path ("foo/./..").normalize ().string () == ""); +  assert (path ("C:/foo/./..").normalize ().string () == "c:"); +  assert (path ("./foo").normalize ().string () == "foo"); + +  assert (path ("C:").normalize ().string () == "c:"); +  assert (path ("C:\\Foo12//Bar").normalize ().string () == "c:\\foo12\\bar"); +#endif + +  // posix_string +  // +  assert (path ("foo/bar/../baz").posix_string () == "foo/bar/../baz"); +#ifdef _WIN32 +  assert (path ("foo\\bar\\..\\baz").posix_string () == "foo/bar/../baz"); +  try +  { +    path ("c:\\foo\\bar\\..\\baz").posix_string (); +    assert (false); +  } +  catch (const invalid_path&) {} +#endif + +  /* +  path p ("../foo"); +  p.complete (); + +  cerr << path::current () << endl; +  cerr << p << endl; +  p.normalize (); +  cerr << p << endl; +  */ +} diff --git a/libcutl/tests/fs/path/makefile b/libcutl/tests/fs/path/makefile new file mode 100644 index 0000000..184510b --- /dev/null +++ b/libcutl/tests/fs/path/makefile @@ -0,0 +1,69 @@ +# file      : tests/fs/path/makefile +# copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +# license   : MIT; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := driver.cxx + +# +# +cxx_obj  := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od   := $(cxx_obj:.o=.o.d) + +cutl.l             := $(out_root)/cutl/cutl.l +cutl.l.cpp-options := $(out_root)/cutl/cutl.l.cpp-options + +driver   := $(out_base)/driver +test     := $(out_base)/.test +clean    := $(out_base)/.clean + +# Build. +# +$(driver): $(cxx_obj) $(cutl.l) +$(cxx_obj) $(cxx_od): $(cutl.l.cpp-options) + + +$(call include-dep,$(cxx_od)) + + +# Alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): $(driver) +	$(call message,test $<,$<) + + +# Clean. +# +$(clean):                            \ +  $(driver).o.clean                  \ +  $(addsuffix .cxx.clean,$(cxx_obj)) \ +  $(addsuffix .cxx.clean,$(cxx_od)) + + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cutl/makefile)  | 
