diff --git a/test/name-tests.cc b/test/name-tests.cc
new file mode 100644
index 0000000..1431f79
--- /dev/null
+++ b/test/name-tests.cc
@@ -0,0 +1,162 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Alexander Afanasyev
+ *                     Zhenkai Zhu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include <sstream>
+#include "ndn-cpp/fields/name.h"
+#include "ndn-cpp/fields/name-component.h"
+#include "ndn-cpp/error.h"
+#include "ndn-cpp/wire/ccnb.h"
+
+#define BOOST_TEST_MAIN 1
+
+#include <boost/test/unit_test.hpp>
+
+using namespace ndn;
+using namespace std;
+using namespace boost;
+
+BOOST_AUTO_TEST_SUITE(NameTests)
+
+BOOST_AUTO_TEST_CASE (Component)
+{
+  name::Component x;
+  BOOST_CHECK_EQUAL (x.size (), 0);
+
+  x = name::Component ("test");
+  BOOST_CHECK_EQUAL (x.size (), 4);
+
+  x = name::Component ("%21test");
+  BOOST_CHECK_EQUAL (x.size (), 5);
+
+  BOOST_CHECK_EQUAL (x.toUri (), "!test");
+
+  x = name::Component ("%20test");
+  BOOST_CHECK_EQUAL (x.size (), 5);
+
+  BOOST_CHECK_EQUAL (x.toUri (), "%20test");
+}
+
+BOOST_AUTO_TEST_CASE (Basic)
+{
+  Name empty = Name ();
+  Name root = Name ("/");
+  BOOST_CHECK_EQUAL (empty, root);
+  BOOST_CHECK_EQUAL (empty, Name ("/"));
+  BOOST_CHECK_EQUAL (root.size(), 0);
+
+  empty.append ("hello");
+  empty.append ("world");
+  BOOST_CHECK_EQUAL (empty.size(), 2);
+  BOOST_CHECK_EQUAL (empty.toUri(), "/hello/world");
+  empty = empty + root;
+  BOOST_CHECK_EQUAL (empty.toUri(), "/hello/world");
+  BOOST_CHECK_EQUAL (empty.get (0).toUri (), "hello");
+  BOOST_CHECK_EQUAL (empty.getSubName(1, 1), Name("/world"));
+  Name name("/hello/world");
+  BOOST_CHECK_EQUAL (empty, name);
+  BOOST_CHECK_EQUAL (name, Name("/hello") + Name("/world"));
+
+  name.appendSeqNum (1);
+  name.appendSeqNum (255);
+  name.appendSeqNum (256);
+  name.appendSeqNum (1234567890);
+
+  BOOST_CHECK_EQUAL (name.toUri (), "/hello/world/%00%01/%00%FF/%00%01%00/%00I%96%02%D2");
+
+  BOOST_CHECK_EQUAL (name.get (5).toSeqNum (), 1234567890);
+  BOOST_CHECK_EQUAL (name.get (4).toSeqNum (), 256);
+  BOOST_CHECK_EQUAL (name.get (3).toSeqNum (), 255);
+  BOOST_CHECK_EQUAL (name.get (2).toSeqNum (), 1);
+
+  BOOST_CHECK_EQUAL (name.get (-1).toUri (), "%00I%96%02%D2");
+
+  BOOST_CHECK_EQUAL (Name ("/%00").get (0).toSeqNum (), 0);
+
+  const char tmp [] = {0, 1, 2, 3, 0x50};
+  BOOST_CHECK_EQUAL (Name ().append (tmp, sizeof(tmp)).toUri (), "/%00%01%02%03P");
+
+  string entree("entr\u00E9e");
+  BOOST_CHECK_EQUAL (Name ().append (entree.c_str(), entree.size()).toUri (), "/entr%C3%A9e");
+  Name entreeName("/entr%C3%A9e");
+  BOOST_CHECK_EQUAL_COLLECTIONS (entreeName.get(0).begin(), entreeName.get(0).end(), entree.begin(), entree.end() );
+
+  Name appendName ("/hello/you");
+  appendName.append (Name ("/hello/you/too"));
+  BOOST_CHECK_EQUAL (appendName.toUri (), "/hello/you/hello/you/too");
+
+  Name appendSelf ("/hello/you");
+  appendSelf.append (appendSelf);
+  BOOST_CHECK_EQUAL (appendSelf.toUri (), "/hello/you/hello/you");
+
+  Name withVersion ("/hello.txt/%FD%95-%25U1%DE%04/%00%01");
+  BOOST_REQUIRE_NO_THROW (withVersion.get (1).toVersion ());
+  BOOST_CHECK_EQUAL (withVersion.get (1).toVersion (), 1370203370106261);
+  
+  BOOST_CHECK_EQUAL (Name("/!").toUri(), "/%21");
+}
+
+BOOST_AUTO_TEST_CASE (Advanced)
+{
+  BOOST_REQUIRE_THROW (Name (""),       error::Name);
+  BOOST_REQUIRE_THROW (Name ("//"), error::Name);
+  BOOST_REQUIRE_THROW (Name ("ndn://"), error::Name);
+  BOOST_REQUIRE_THROW (Name ("bla"),    error::Name);
+  BOOST_REQUIRE_THROW (Name ("bla/"),   error::Name);
+  BOOST_REQUIRE_THROW (Name ("http:/test"), error::Name);
+
+  BOOST_CHECK_EQUAL (Name ("ndn:///").toUri (), "/");
+  BOOST_CHECK_EQUAL (Name ("ccnx:///").toUri (), "/");
+  BOOST_CHECK_EQUAL (Name ("/").toUri (), "/");
+  BOOST_CHECK_EQUAL (Name ("///").toUri (), "/");
+  BOOST_CHECK_EQUAL (Name ("////////////////////////////////////////////////").toUri (), "/");
+  BOOST_CHECK_EQUAL (Name ("ndn://bla:random@something-else:0000/actual/name").toUri (), "/actual/name");
+  BOOST_CHECK_EQUAL (Name ("/slash/").toUri (), "/slash");
+  
+  BOOST_CHECK_EQUAL (Name ().append (".", 1).toUri (), "/...");
+  BOOST_CHECK_EQUAL (Name ("/.").get(0).size(), 0);
+  BOOST_CHECK_EQUAL (Name ("/..").get(0).size(), 0);
+  BOOST_CHECK_EQUAL (Name ("/...").get(0).size(), 0);
+  BOOST_CHECK_EQUAL (Name ("/....").get(0).size(), 1);
+  
+  BOOST_CHECK_EQUAL (Name ().append ("", 0).toUri (), "/...");
+  const char tmp [] = {'.'};
+  BOOST_CHECK_EQUAL (Name ().append (tmp, sizeof(tmp)).toUri (), "/....");
+}
+
+BOOST_AUTO_TEST_CASE (Ordering)
+{
+  // check "canonical" ordering
+  BOOST_CHECK_EQUAL (Name ("/test"), Name ("/test"));
+  BOOST_CHECK_GE (Name ("/test"), Name ("/aaaa"));
+  BOOST_CHECK_GT (Name ("/test"), Name ("/aaaa"));
+  BOOST_CHECK_GT (Name ("/test/test/test"), Name ("/test/test"));
+  BOOST_CHECK_GE (Name ("/test/test/test"), Name ("/test/test"));
+  BOOST_CHECK_GE (Name ("/test/test/test"), Name ("/test/test/test"));
+
+  BOOST_CHECK_LE (Name ("/test"), Name ("/aaaaa"));
+  BOOST_CHECK_LT (Name ("/test"), Name ("/aaaaa"));
+  BOOST_CHECK_LT (Name ("/test/test"), Name ("/test/test/test"));
+  BOOST_CHECK_LE (Name ("/test/test"), Name ("/test/test/test"));
+  BOOST_CHECK_LE (Name ("/test/test/test"), Name ("/test/test/test"));
+}
+
+BOOST_AUTO_TEST_CASE (Encoding)
+{
+  std::stringbuf buffer;
+  std::ostream output (&buffer);
+
+  Name root = Name ("/");
+  wire::Ccnb::appendName(output, root);
+  BOOST_CHECK_EQUAL (buffer.str().size(), 2);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
