#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# Copyright (C) 2017  Nexedi SA and Contributors.
#                     Kirill Smelkov <kirr@nexedi.com>
#
# This program is free software: you can Use, Study, Modify and Redistribute
# it under the terms of the GNU General Public License version 3, or (at your
# option) any later version, as published by the Free Software Foundation.
#
# You can also Link and Combine this program with other software covered by
# the terms of any of the Free Software licenses or any of the Open Source
# Initiative approved licenses and Convey the resulting work. Corresponding
# source of such a combination shall include the source code for all other
# software used.
#
# This program is distributed WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# See COPYING file for full licensing terms.
# See https://www.nexedi.com/licensing for rationale and options.
"""generate reference pickle objects encoding for tests"""

from ZODB.tests import testSerialize
from ZODB import serialize
from zodbtools.util import escapeqq

def main():
    # dump to go what to expect
    with open("ztestdata_pydata_test.go", "w") as f:
        def emit(v):
            print >>f, v
        emit("// Code generated by %s; DO NOT EDIT." % __file__)
        emit("package zodb")

        # [] of pickle
        t = testSerialize.SerializerTestCase
        testv = [
            t.old_style_without_newargs,
            t.old_style_with_newargs,
            t.new_style_without_newargs,
            t.new_style_with_newargs,
        ]

        r = serialize.ObjectReader(factory=testSerialize._factory)

        emit("\nvar _PyData_ClassName_Testv = [...]_PyDataClassName_TestEntry{")
        for test in testv:
            emit("\t{")
            emit("\t\t%s," % escapeqq(test))
            emit("\t\t%s," % escapeqq(r.getClassName(test)))
            emit("\t},")
        emit('\t{"aaa", "?.?"},') # invalid
        emit("}")

if __name__ == '__main__':
    main()
