# PRE: if
#

# Non matching on attribute ref
if (User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
	update reply {
		Filter-Id += 'Fail 0'
	}
}

# Matching on xlat expanded value
if ("%{User-Name}" !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
	update reply {
		Filter-Id += 'Fail 1'
	}
}

# Matching on attribute ref with capture groups
if (User-Name =~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
	# Test all the capture groups
	update {
		reply:User-Name := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
	}
}
else {
	update reply {
		Filter-Id += 'Fail 2'
	}
}

# Checking capture groups are cleared out correctly
if (User-Name =~ /^([0-9])_/) {
	if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1_1') {
		update reply {
			Filter-Id += 'Fail 3'
		}
	}
}
else {
	update reply {
		Filter-Id += 'Fail 3.5'
	}
}

# Checking capture groups are cleared out correctly when there are no matches
if (User-Name =~ /^./) {
	if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1') {
		update reply {
			Filter-Id += 'Fail 4'
		}
	}
}
else {
	update reply {
		Filter-Id += 'Fail 4.5'
	}
}

# compiled - ref - insensitive
if (Calling-Station-Id !~ /:roamyroam$/i) {
	update reply {
		Filter-Id += 'Fail 5'
	}
}

# compiled - expansion - insensitive
if ("%{Calling-Station-Id}" !~ /:roamyroam$/i) {
	update reply {
		Filter-Id += 'Fail 6'
	}
}

# compiled - enum - ref - insensitive
if (Service-Type !~ /^framed-user$/i) {
	update reply {
		Filter-Id += 'Fail 7'
	}
}

# compiled - enum - expansion - insensitive
if ("%{Service-Type}" !~ /^framed-user$/i) {
	update reply {
		Filter-Id += 'Fail 8'
	}
}

# compiled - enum - ref
if (Service-Type =~ /^framed-user$/) {
	update reply {
		Filter-Id += 'Fail 9'
	}
}

update request {
	Tmp-String-0 := "foo\nbar"
}

# compiled - ref - multiline
if (&Tmp-String-0 !~ /^foo$/m) {
	update reply {
		Filter-Id += 'Fail 14'
	}
}

# compiled - ref - non-multiline
if (&Tmp-String-0 =~ /^foo$/) {
	update reply {
		Filter-Id += 'Fail 15'
	}
}

# compiled - ref - non-multiline

# Not all POSIX implementations support the \n character classes
# so only run this test if the server was built with libpcre.
if (("${feature.regex-pcre}" == 'yes') && (&Tmp-String-0 !~ /^foo\nbar$/)) {
	update reply {
		Filter-Id += 'Fail 16'
	}
}

# compiled - ref - multiline
if (&Tmp-String-0 !~ /^bar$/m) {
	update reply {
		Filter-Id += 'Fail 17'
	}
}

# compiled - ref - multiline - sensitive
if (&Tmp-String-0 =~ /^BAR$/m) {
	update reply {
		Filter-Id += 'Fail 17'
	}
}

# compiled - ref - multiline - insensitive
if (&Tmp-String-0 !~ /^BAR$/mi) {
	update reply {
		Filter-Id += 'Fail 17'
	}
}

# compiled - ref - multiline - insensitive (flag order reversed)
if (&Tmp-String-0 !~ /^BAR$/im) {
	update reply {
		Filter-Id += 'Fail 18'
	}
}

