#!/usr/bin/env python

"""
This script takes a list of keywords and generates a testcase, that checks
if using the keyword as identifier fails, for every keyword. The generate
test files are set read-only.
Test for https://github.com/rust-lang/rust/issues/2275

sample usage: src/etc/generate-keyword-tests.py as break
"""

import sys
import os
import datetime
import stat


template = """\
// This file was auto-generated using 'src/etc/generate-keyword-tests.py %s'

fn main() {
    let %s = "foo"; //~ error: expected pattern, found keyword `%s`
}
"""

test_dir = os.path.abspath(
    os.path.join(os.path.dirname(__file__), '../test/ui/parser')
)

for kw in sys.argv[1:]:
    test_file = os.path.join(test_dir, 'keyword-%s-as-identifier.rs' % kw)

    # set write permission if file exists, so it can be changed
    if os.path.exists(test_file):
        os.chmod(test_file, stat.S_IWUSR)

    with open(test_file, 'wt') as f:
        f.write(template % (kw, kw, kw))

    # mark file read-only
    os.chmod(test_file, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
