// Copyright 2017 Google Inc. All rights reserved.
//
// 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.

package zip

import (
	"bytes"
	"testing"
)

var stripZip64Testcases = []struct {
	name string
	in   []byte
	out  []byte
}{
	{
		name: "empty",
		in:   []byte{},
		out:  []byte{},
	},
	{
		name: "trailing data",
		in:   []byte{1, 2, 3},
		out:  []byte{1, 2, 3},
	},
	{
		name: "valid non-zip64 extra",
		in:   []byte{2, 0, 2, 0, 1, 2},
		out:  []byte{2, 0, 2, 0, 1, 2},
	},
	{
		name: "two valid non-zip64 extras",
		in:   []byte{2, 0, 2, 0, 1, 2, 2, 0, 0, 0},
		out:  []byte{2, 0, 2, 0, 1, 2, 2, 0, 0, 0},
	},
	{
		name: "simple zip64 extra",
		in:   []byte{1, 0, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8},
		out:  []byte{},
	},
	{
		name: "zip64 extra and valid non-zip64 extra",
		in:   []byte{1, 0, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 2, 0, 0, 0},
		out:  []byte{2, 0, 0, 0},
	},
	{
		name: "invalid extra",
		in:   []byte{0, 0, 8, 0, 0, 0},
		out:  []byte{0, 0, 8, 0, 0, 0},
	},
	{
		name: "zip64 extra and extended-timestamp extra and valid non-zip64 extra",
		in:   []byte{1, 0, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 85, 84, 5, 0, 1, 1, 2, 3, 4, 2, 0, 0, 0},
		out:  []byte{2, 0, 0, 0},
	},
}

func TestStripZip64Extras(t *testing.T) {
	for _, testcase := range stripZip64Testcases {
		got := stripExtras(testcase.in)
		if !bytes.Equal(got, testcase.out) {
			t.Errorf("Failed testcase %s\ninput: %v\n want: %v\n  got: %v\n", testcase.name, testcase.in, testcase.out, got)
		}
	}
}
