Add regression test for issue 321
diff --git a/models/regression/unassigned-skeleton.gltf b/models/regression/unassigned-skeleton.gltf
new file mode 100644
index 0000000..6a977e5
--- /dev/null
+++ b/models/regression/unassigned-skeleton.gltf
@@ -0,0 +1,267 @@
+{

+  "accessors": [

+    {

+      "bufferView": 0,

+      "componentType": 5126,

+      "count": 3,

+      "type": "MAT4"

+    },

+    {

+      "bufferView": 1,

+      "componentType": 5125,

+      "count": 24,

+      "type": "SCALAR"

+    },

+    {

+      "bufferView": 2,

+      "componentType": 5126,

+      "count": 10,

+      "max": [

+        0.5,

+        2.0,

+        0.0

+      ],

+      "min": [

+        -0.5,

+        0.0,

+        0.0

+      ],

+      "type": "VEC3"

+    },

+    {

+      "bufferView": 3,

+      "byteOffset": 24,

+      "componentType": 5126,

+      "count": 10,

+      "type": "VEC4"

+    },

+    {

+      "bufferView": 4,

+      "byteOffset": 40,

+      "componentType": 5126,

+      "count": 10,

+      "type": "VEC2"

+    },

+    {

+      "bufferView": 5,

+      "byteOffset": 12,

+      "componentType": 5126,

+      "count": 10,

+      "type": "VEC3"

+    },

+    {

+      "bufferView": 6,

+      "byteOffset": 48,

+      "componentType": 5123,

+      "count": 10,

+      "type": "VEC4"

+    },

+    {

+      "bufferView": 7,

+      "byteOffset": 56,

+      "componentType": 5126,

+      "count": 10,

+      "type": "VEC4"

+    },

+    {

+      "bufferView": 8,

+      "componentType": 5126,

+      "count": 165,

+      "max": [

+        5.466667175292969

+      ],

+      "min": [

+        0.0

+      ],

+      "type": "SCALAR"

+    },

+    {

+      "bufferView": 8,

+      "byteOffset": 4,

+      "componentType": 5126,

+      "count": 165,

+      "type": "VEC4"

+    },

+    {

+      "bufferView": 8,

+      "byteOffset": 20,

+      "componentType": 5126,

+      "count": 165,

+      "type": "VEC3"

+    }

+  ],

+  "animations": [

+    {

+      "channels": [

+        {

+          "sampler": 0,

+          "target": {

+            "node": 2,

+            "path": "rotation"

+          }

+        },

+        {

+          "sampler": 1,

+          "target": {

+            "node": 2,

+            "path": "scale"

+          }

+        }

+      ],

+      "samplers": [

+        {

+          "input": 8,

+          "interpolation": "LINEAR",

+          "output": 9

+        },

+        {

+          "input": 8,

+          "interpolation": "LINEAR",

+          "output": 10

+        }

+      ]

+    }

+  ],

+  "asset": {

+    "version": "2.0"

+  },

+  "bufferViews": [

+    {

+      "buffer": 0,

+      "byteLength": 192

+    },

+    {

+      "buffer": 1,

+      "byteLength": 96,

+      "target": 34963

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 2,

+      "byteLength": 720,

+      "byteStride": 72,

+      "target": 34962

+    },

+    {

+      "buffer": 3,

+      "byteLength": 5280,

+      "byteStride": 32,

+      "target": 34962

+    }

+  ],

+  "buffers": [

+    {

+      "byteLength": 192,

+      "name": "SkinBuffer",

+      "uri": "data:application/octet-stream;base64,AAAAAAAAAABBkoddQQUAgEMAOgAvAFAAcgBvAGoAZQBjAHQAcwAvAHMAdgBtADEAXwBkAGEAdABhAC8AZwBsAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAIA/"

+    },

+    {

+      "byteLength": 96,

+      "name": "IndexBuffer",

+      "uri": "data:application/octet-stream;base64,AAAAAAEAAAADAAAAAAAAAAMAAAACAAAAAgAAAAMAAAAFAAAAAgAAAAUAAAAEAAAABAAAAAUAAAAHAAAABAAAAAcAAAAGAAAABgAAAAcAAAAJAAAABgAAAAkAAAAIAAAA"

+    },

+    {

+      "byteLength": 720,

+      "name": "VertexBuffer",

+      "uri": "data:application/octet-stream;base64,AAAAvwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAvwAAAD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAEA/AACAPgAAAAAAAAAAAAAAPwAAAD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAEA/AACAPgAAAAAAAAAAAAAAvwAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAPwAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAvwAAwD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAIA+AABAPwAAAAAAAAAAAAAAPwAAwD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAIA+AABAPwAAAAAAAAAAAAAAvwAAAEAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAACAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAPwAAAEAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAACAAAAAAAAAAAAAACAPwAAAAAAAAAA"

+    },

+    {

+      "byteLength": 5280,

+      "uri": "data:application/octet-stream;base64,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"

+    }

+  ],

+  "meshes": [

+    {

+      "name": "mesh_0",

+      "primitives": [

+        {

+          "attributes": {

+            "COLOR_0": 3,

+            "JOINTS_0": 6,

+            "NORMAL": 5,

+            "POSITION": 2,

+            "TEXCOORD_0": 4,

+            "WEIGHTS_0": 7

+          },

+          "indices": 1,

+          "mode": 4

+        }

+      ]

+    }

+  ],

+  "nodes": [

+    {

+      "mesh": 0,

+      "name": "mesh_0",

+      "skin": 0

+    },

+    {

+      "children": [

+        2

+      ],

+      "name": "bone_1",

+      "translation": [

+        0.0,

+        1.0,

+        0.0

+      ]

+    },

+    {

+      "name": "bone_2"

+    },

+    {

+      "name": "bone_3"

+    }

+  ],

+  "scene": 0,

+  "scenes": [

+    {

+      "nodes": [

+        0,

+        1,

+        3

+      ]

+    }

+  ],

+  "skins": [

+    {

+      "inverseBindMatrices": 0,

+      "joints": [

+        3,

+        1,

+        2

+      ],

+      "name": "mesh_0",

+      "0skeleton": -1

+    }

+  ]

+}

diff --git a/tests/tester.cc b/tests/tester.cc
index 0b617b2..c8acf43 100644
--- a/tests/tester.cc
+++ b/tests/tester.cc
@@ -436,6 +436,36 @@
 
 }
 
+TEST_CASE("empty-skeleton-id", "[issue-321]") {
+
+  tinygltf::Model model;
+  tinygltf::TinyGLTF ctx;
+  std::string err;
+  std::string warn;
+
+  bool ret = ctx.LoadASCIIFromFile(&model, &err, &warn, "../models/regression/unassigned-skeleton.gltf");
+  if (!err.empty()) {
+    std::cerr << err << std::endl;
+  }
+  REQUIRE(true == ret);
+
+  REQUIRE(model.skins.size() == 1);
+  REQUIRE(model.skins[0].skeleton == -1); // unassigned
+
+  std::stringstream os;
+
+  ctx.WriteGltfSceneToStream(&model, os, false, false);
+
+  // use nlohmann json
+  nlohmann::json j = nlohmann::json::parse(os.str());
+
+  // Ensure `skeleton` property is not written to .gltf(was serialized as -1)
+  REQUIRE(1 == j["skins"].size());
+  REQUIRE(j["skins"][0].is_object());
+  REQUIRE(j["skins"][0].count("skeleton") == 0);
+
+}
+
 #ifndef TINYGLTF_NO_FS
 TEST_CASE("expandpath-utf-8", "[pr-226]") {