Improve test coverage for guththila_token
diff --git a/guththila/tests/Makefile.am b/guththila/tests/Makefile.am
index ac32c34..d180486 100644
--- a/guththila/tests/Makefile.am
+++ b/guththila/tests/Makefile.am
@@ -4,17 +4,17 @@
 # The ASF licenses this file to You 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.
-TESTS = test_guththila test_attribute test_stack
-noinst_PROGRAMS = test_guththila test_attribute test_stack
-check_PROGRAMS = test_guththila test_attribute test_stack
+TESTS = test_guththila test_attribute test_stack test_token
+noinst_PROGRAMS = test_guththila test_attribute test_stack test_token
+check_PROGRAMS = test_guththila test_attribute test_stack test_token
 SUBDIRS =
 
 test_guththila_SOURCES = test_guththila.cc
@@ -44,3 +44,11 @@
 				 ../../util/src/libaxutil.la \
 				 $(top_builddir)/$(GTEST)/libgtest.a \
 				 $(top_builddir)/$(GTEST)/libgtest_main.a
+
+test_token_SOURCES = test_token.cc
+
+test_token_LDADD = \
+				 $(top_builddir)/src/libguththila.la \
+				 ../../util/src/libaxutil.la \
+				 $(top_builddir)/$(GTEST)/libgtest.a \
+				 $(top_builddir)/$(GTEST)/libgtest_main.a
diff --git a/guththila/tests/test_token.cc b/guththila/tests/test_token.cc
new file mode 100644
index 0000000..7d21e0c
--- /dev/null
+++ b/guththila/tests/test_token.cc
@@ -0,0 +1,95 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You 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.
+*/
+
+#include <gtest/gtest.h>
+
+#include <guththila.h>
+
+
+class TestToken: public ::testing::Test
+{
+
+    protected:
+        void SetUp()
+        {
+            m_allocator = axutil_allocator_init(NULL);
+            ASSERT_NE(m_allocator, nullptr);
+            m_env = axutil_env_create(m_allocator);
+            ASSERT_NE(m_env, nullptr);
+        }
+
+        void TearDown()
+        {
+            axutil_env_free(m_env);
+        }
+
+        axutil_allocator_t *m_allocator;
+        axutil_env_t *m_env;
+};
+
+
+TEST_F(TestToken, test_token) {
+
+    int status;
+    guththila_tok_list_t *tok_list;
+
+    tok_list = (guththila_tok_list_t*)AXIS2_MALLOC(m_allocator, sizeof(guththila_tok_list_t));
+    ASSERT_NE(tok_list, nullptr);
+
+    status = guththila_tok_list_init(tok_list, m_env);
+    ASSERT_EQ(status, GUTHTHILA_SUCCESS);
+
+    const char * abc = "abcdefghijklmnopqrstuvwxyz";
+    const char * p;
+
+    guththila_token_t * tokens = (guththila_token_t*)AXIS2_MALLOC(m_allocator,
+                                                                    strlen(abc) * sizeof(guththila_token_t));
+    ASSERT_NE(tokens, nullptr);
+
+    for (p = abc; *p != 0; ++p)
+    {
+        int index = p - abc;
+        guththila_set_token(&tokens[index], (char*)p, index % 7 + 1, 1, 0, 0, 1, m_env);
+        status = guththila_tok_list_release_token(tok_list, &tokens[index], m_env);
+        /* NOTE: status is index+16 because _init is pushing a bunch of empty
+         * tokens onto the stack.  I'm not sure this is correct behavior,
+         * but I don't want to risk changing it right now.
+         * TODO: invesitgate.  See AXIS2C-1698
+         */
+        ASSERT_EQ(status, index + 16);
+    }
+
+    for (p-=1; p >= abc; --p)
+    {
+        ASSERT_EQ((guththila_token_t*)guththila_tok_list_get_token(tok_list, m_env), &tokens[p-abc]);
+    }
+
+    guththila_token_t tok0;
+    guththila_set_token(&tok0, (char*)abc, 1, 1, 0, 0, 1, m_env);
+
+    ASSERT_NE(0, guththila_tok_tok_cmp(&tokens[0], &tokens[1], m_env));
+    ASSERT_EQ(0, guththila_tok_tok_cmp(&tokens[0], &tok0, m_env));
+
+    ASSERT_NE(0, guththila_tok_str_cmp(&tokens[0], "b", strlen("b"), m_env));
+    ASSERT_EQ(0, guththila_tok_str_cmp(&tokens[0], "a", strlen("a"), m_env));
+
+    /*TODO test guththila_tok_list_grow*/
+    /*TODO test guththila_tok_list_free_data*/
+    guththila_tok_list_free(tok_list, m_env);
+    AXIS2_FREE(m_allocator, tokens);
+
+}