//Test for Set 1 challenge 2
func TestXor(t *testing.T) {
	text1 := encoding.HexToBytes("1c0111001f010100061a024b53535009181c")
	text2 := encoding.HexToBytes("686974207468652062756c6c277320657965")

	expected_output := "746865206b696420646f6e277420706c6179"
	output := encoding.BytesToHex(Xor(text1, text2))
	if output != expected_output {
		t.Errorf("Xor: Expected output does not match actual output.")
	}
}
//Test for Set 1 challenge 4
func TestSingleByteXorScore(t *testing.T) {
	expected_plaintext := "Now that the party is jumping\n"

	file, err := os.Open("../files/4.txt")
	if err != nil {
		t.Errorf("SingleByteXorScore: Error opening 4.txt")
	}

	defer file.Close()

	scanner := bufio.NewScanner(file)

	var winner []byte
	for scanner.Scan() {
		line := encoding.HexToBytes(scanner.Text())
		if SingleByteXorScore(line) {
			//t.Log("Detected Single Byte XOR: ", line)
			winner = line
			continue
		}
		if SingleByteXorScore(line) && winner != nil {
			t.Errorf("SingleByteXorScore: Detected more than one possible single character xor ciphertext")
		}
	}
	if actual_plaintext, _ := BreakSingleCharXor(winner); string(actual_plaintext) != expected_plaintext {
		t.Errorf("SingleByteXorScore: Expected decrypted text does not match actual decrypted text.")
		t.Errorf("Expected: %v\n", expected_plaintext)
		t.Errorf("Actual:   %v\n", actual_plaintext)
	}

}
//Test for Set 1 challenge 3
func TestPlaintextScore(t *testing.T) {
	plaintext := "Cooking MC's like a pound of bacon"
	ciphertext := encoding.HexToBytes("1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736")
	maxPT, _ := BreakSingleCharXor(ciphertext)
	if string(maxPT) != plaintext {
		t.Errorf("PlaintextScore: Expected output does not match actual output.")
		t.Errorf("Expected: %v\n", plaintext)
		t.Errorf("Actual: %v\n", string(maxPT))
	}

}
//Test for Set 1 challenge 8
func TestDetectECBMode(t *testing.T) {
	file, err := os.Open("../files/8.txt")
	if err != nil {
		t.Errorf("DetectECBMode: Error opening file.")
	}

	defer file.Close()

	scanner := bufio.NewScanner(file)

	var detected bool
	for scanner.Scan() {
		line := encoding.HexToBytes(scanner.Text())
		if DetectECB256Mode(line) && detected {
			t.Errorf("DetectECBMode: Detected multiple lines.")
			detected = true
		}
	}

}