15ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// Copyright 2009 the V8 project authors. All rights reserved.
25ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// Redistribution and use in source and binary forms, with or without
35ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// modification, are permitted provided that the following conditions are
45ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// met:
55ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//
65ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//     * Redistributions of source code must retain the above copyright
75ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       notice, this list of conditions and the following disclaimer.
85ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//     * Redistributions in binary form must reproduce the above
95ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       copyright notice, this list of conditions and the following
105ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       disclaimer in the documentation and/or other materials provided
115ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       with the distribution.
125ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//     * Neither the name of Google Inc. nor the names of its
135ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       contributors may be used to endorse or promote products derived
145ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//       from this software without specific prior written permission.
155ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//
165ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
28196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
295ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/version.h"
31196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h"
325ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
335ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgusing namespace v8::internal;
345ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
355ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
3671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
3771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
385ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
395ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgvoid SetVersion(int major, int minor, int build, int patch,
405ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org                bool candidate, const char* soname) {
415ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::major_ = major;
425ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::minor_ = minor;
435ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::build_ = build;
445ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::patch_ = patch;
455ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::candidate_ = candidate;
465ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::soname_ = soname;
475ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org}
485ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
495ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org} }  // namespace v8::internal
505ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
515ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
525ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgstatic void CheckVersion(int major, int minor, int build,
535ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org                         int patch, bool candidate,
545ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org                         const char* expected_version_string,
555ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org                         const char* expected_generic_soname) {
565ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  static v8::internal::EmbeddedVector<char, 128> version_str;
575ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  static v8::internal::EmbeddedVector<char, 128> soname_str;
585ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
595ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  // Test version without specific SONAME.
605ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  SetVersion(major, minor, build, patch, candidate, "");
615ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::GetString(version_str);
625ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CHECK_EQ(expected_version_string, version_str.start());
635ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::GetSONAME(soname_str);
645ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CHECK_EQ(expected_generic_soname, soname_str.start());
655ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
665ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  // Test version with specific SONAME.
675ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  const char* soname = "libv8.so.1";
685ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  SetVersion(major, minor, build, patch, candidate, soname);
695ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::GetString(version_str);
705ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CHECK_EQ(expected_version_string, version_str.start());
715ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  Version::GetSONAME(soname_str);
725ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CHECK_EQ(soname, soname_str.start());
735ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org}
745ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
755ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org
765ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgTEST(VersionString) {
77a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#ifdef USE_SIMULATOR
78a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(0, 0, 0, 0, false, "0.0.0 SIMULATOR", "libv8-0.0.0.so");
79a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(0, 0, 0, 0, true,
80a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org               "0.0.0 (candidate) SIMULATOR", "libv8-0.0.0-candidate.so");
81a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(1, 0, 0, 0, false, "1.0.0 SIMULATOR", "libv8-1.0.0.so");
82a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(1, 0, 0, 0, true,
83a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org               "1.0.0 (candidate) SIMULATOR", "libv8-1.0.0-candidate.so");
84a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(1, 0, 0, 1, false, "1.0.0.1 SIMULATOR", "libv8-1.0.0.1.so");
85a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(1, 0, 0, 1, true,
86a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org               "1.0.0.1 (candidate) SIMULATOR", "libv8-1.0.0.1-candidate.so");
87a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(2, 5, 10, 7, false, "2.5.10.7 SIMULATOR", "libv8-2.5.10.7.so");
88a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  CheckVersion(2, 5, 10, 7, true,
89a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org               "2.5.10.7 (candidate) SIMULATOR", "libv8-2.5.10.7-candidate.so");
90a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#else
915ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(0, 0, 0, 0, false, "0.0.0", "libv8-0.0.0.so");
925ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(0, 0, 0, 0, true,
935ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org               "0.0.0 (candidate)", "libv8-0.0.0-candidate.so");
945ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(1, 0, 0, 0, false, "1.0.0", "libv8-1.0.0.so");
955ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(1, 0, 0, 0, true,
965ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org               "1.0.0 (candidate)", "libv8-1.0.0-candidate.so");
975ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(1, 0, 0, 1, false, "1.0.0.1", "libv8-1.0.0.1.so");
985ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(1, 0, 0, 1, true,
995ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org               "1.0.0.1 (candidate)", "libv8-1.0.0.1-candidate.so");
1005ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(2, 5, 10, 7, false, "2.5.10.7", "libv8-2.5.10.7.so");
1015ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org  CheckVersion(2, 5, 10, 7, true,
1025ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org               "2.5.10.7 (candidate)", "libv8-2.5.10.7-candidate.so");
103a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#endif
1045ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org}
105