diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index dbf22f49638..668ae906988 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -9,8 +9,28 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30,7 +50,9 @@
org.jetbrains.k2js.translate.*
-
+
+ org.jetbrains.k2js.*
+
org.jetbrains.k2js.translate.*
@@ -221,94 +243,94 @@
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
@@ -354,10 +376,10 @@
-
+
-
+
@@ -399,10 +421,10 @@
-
+
-
+
@@ -434,22 +456,22 @@
@@ -600,7 +622,11 @@
-
+
+
+
+
+
@@ -614,11 +640,15 @@
-
+
-
+
+
+
+
+
@@ -628,7 +658,55 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -636,303 +714,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -977,8 +759,59 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -989,8 +822,36 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1006,7 +867,7 @@
-
+
@@ -1015,111 +876,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -1230,7 +991,12 @@
-
+
+
+
+
+
+
@@ -1263,11 +1029,11 @@
-
-
-
-
-
+
+
+
+
+
localhost
@@ -1323,7 +1089,7 @@
-
+
@@ -1336,14 +1102,14 @@
-
+
-
-
+
+
@@ -1433,116 +1199,114 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/js/src/com/google/dart/compiler/util/AstUtil.java b/js/src/com/google/dart/compiler/util/AstUtil.java
index 7e2a7fc9107..c47a04abcfd 100644
--- a/js/src/com/google/dart/compiler/util/AstUtil.java
+++ b/js/src/com/google/dart/compiler/util/AstUtil.java
@@ -339,4 +339,8 @@ public class AstUtil {
public static JsPrefixOperation not(JsExpression expression) {
return new JsPrefixOperation(JsUnaryOperator.NOT, expression);
}
+
+ public static JsBinaryOperation typeof(JsExpression expression, JsStringLiteral string) {
+ return equals(new JsPrefixOperation(JsUnaryOperator.TYPEOF, expression), string);
+ }
}
diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
index 3176eacbd25..e3d4de6af60 100644
--- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
+++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
@@ -29,12 +29,19 @@ public final class StandardClasses {
declareArray(standardClasses, standardLibrary);
declareIterator(standardClasses, standardLibrary);
declareRange(standardClasses);
+ declareString(standardClasses);
declareJavaArrayList(standardClasses);
declareJavaSystem(standardClasses);
declareJavaInteger(standardClasses);
return standardClasses;
}
+ private static void declareString(@NotNull StandardClasses standardClasses) {
+ String stringFQName = "jet.String";
+ standardClasses.declareStandardTopLevelObject(stringFQName, "String");
+ standardClasses.declareStandardInnerDeclaration(stringFQName, "length", "length");
+ }
+
//TODO: duplication
private static void declareRange(@NotNull StandardClasses standardClasses) {
String intRangeFQName = "jet.IntRange";
diff --git a/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java
index 8c2d8dc7fef..7276485f9ab 100644
--- a/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java
@@ -2,6 +2,7 @@ package org.jetbrains.k2js.translate.expression;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsInvocation;
+import com.google.dart.compiler.backend.js.ast.JsName;
import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
@@ -59,6 +60,14 @@ public final class PatternTranslator extends AbstractTranslator {
@NotNull
private JsExpression translateTypePattern(@NotNull JsExpression expressionToMatch,
@NotNull JetTypePattern pattern) {
+ //TODO: HACK to make some examples work
+ JsName className = getClassReference(pattern).getName();
+ if (className.getIdent().equals("String")) {
+ return AstUtil.typeof(expressionToMatch, program().getStringLiteral("string"));
+ }
+ if (className.getIdent().equals("Int")) {
+ return AstUtil.typeof(expressionToMatch, program().getStringLiteral("number"));
+ }
JsInvocation isCheck = AstUtil.newInvocation(context().namer().isOperationReference(),
expressionToMatch, getClassReference(pattern));
@@ -79,7 +88,7 @@ public final class PatternTranslator extends AbstractTranslator {
}
@NotNull
- private JsExpression getClassReference(@NotNull JetTypePattern pattern) {
+ private JsNameRef getClassReference(@NotNull JetTypePattern pattern) {
JetTypeReference typeReference = getTypeReference(pattern);
return getClassNameReferenceForTypeReference(typeReference);
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
index 1965354d36c..e7cb560cf2a 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
@@ -14,6 +14,7 @@ import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
+import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
@@ -158,6 +159,13 @@ public final class PropertyAccessTranslator extends AccessTranslator {
@NotNull
private JsExpression getterCall() {
+ //TODO: HACK to make standard example work
+ if (DescriptorUtils.getFQName(propertyDescriptor).equals("jet.String.length")) {
+ JsNameRef lengthMethodReference = AstUtil.newQualifiedNameRef("length");
+ AstUtil.setQualifier(lengthMethodReference, translateQualifier());
+ return lengthMethodReference;
+ }
+
JsName getterName = getGetterName();
return qualifiedAccessorInvocation(getterName);
}
diff --git a/translator/test/org/jetbrains/k2js/test/SystemTest.java b/translator/test/org/jetbrains/k2js/test/SystemTest.java
index ae227c9b1bf..7489f37bfd8 100644
--- a/translator/test/org/jetbrains/k2js/test/SystemTest.java
+++ b/translator/test/org/jetbrains/k2js/test/SystemTest.java
@@ -17,64 +17,11 @@ public final class SystemTest extends JavaClassesTest {
@Test
public void systemPrint() throws Exception {
- checkOutput("systemPrint.kt", "Hello, world!");
+ checkOutput("print.kt", "Hello, world!");
}
@Test
- public void printArg() throws Exception {
- checkOutput("printArg.kt", "Hello, world!", "Hello, world!");
+ public void systemPrintln() throws Exception {
+ checkOutput("println.kt", "Hello, world!\n3\n\n");
}
-
- @Test
- public void whileLoop() throws Exception {
- checkOutput("whileLoop.kt", "guest1\nguest2\nguest3\nguest4\n", "guest1", "guest2", "guest3", "guest4");
- }
-
- @Test
- public void ifAsExpression() throws Exception {
- checkOutput("ifAsExpression.kt", "20\n", "10", "20");
- }
-
- @Test
- public void objectOrientedHello() throws Exception {
- checkOutput("objectOrientedHello.kt", "Hello, Pavel!\n", "Pavel");
- }
-
- @Test
- public void multiLanguageHello() throws Exception {
- checkOutput("multiLanguageHello.kt", "Salut!\n", "FR");
- }
-
- @Test
- public void nullChecks() throws Exception {
- checkOutput("nullChecks.kt", "No number supplied");
- checkOutput("nullChecks.kt", "6", "2", "3");
- }
-
- @Test
- public void ranges() throws Exception {
- checkOutput("ranges.kt", "OK\n" +
- " 1 2 3 4 5\n" +
- "Out: array has only 3 elements. x = 4\n" +
- "Yes: array contains aaa\n" +
- "No: array doesn't contains ddd\n", "4");
-
- checkOutput("ranges.kt", " 1 2 3 4 5\n" +
- "Out: array has only 3 elements. x = 10\n" +
- "Yes: array contains aaa\n" +
- "No: array doesn't contains ddd\n", "10");
- }
-
- @Test
- public void forLoop() throws Exception {
- checkOutput("forLoop.kt", "a\n" +
- "b\n" +
- "c\n" +
- "\n" +
- "a\n" +
- "b\n" +
- "c\n", "a", "b", "c");
- checkOutput("forLoop.kt", "123\n\n123\n", "123");
- }
-
}
diff --git a/translator/test/org/jetbrains/k2js/test/WebDemoExamplesTest.java b/translator/test/org/jetbrains/k2js/test/WebDemoExamplesTest.java
new file mode 100644
index 00000000000..06ec087ddec
--- /dev/null
+++ b/translator/test/org/jetbrains/k2js/test/WebDemoExamplesTest.java
@@ -0,0 +1,88 @@
+package org.jetbrains.k2js.test;
+
+import org.junit.Test;
+
+/**
+ * @author Talanov Pavel
+ */
+public final class WebDemoExamplesTest extends TranslationTest {
+
+ final private static String MAIN = "webDemoExamples/";
+
+ @Override
+ protected String mainDirectory() {
+ return MAIN;
+ }
+
+ @Test
+ public void printArg() throws Exception {
+ checkOutput("printArg.kt", "Hello, world!", "Hello, world!");
+ }
+
+ @Test
+ public void whileLoop() throws Exception {
+ checkOutput("whileLoop.kt", "guest1\nguest2\nguest3\nguest4\n", "guest1", "guest2", "guest3", "guest4");
+ }
+
+ @Test
+ public void ifAsExpression() throws Exception {
+ checkOutput("ifAsExpression.kt", "20\n", "10", "20");
+ }
+
+ @Test
+ public void objectOrientedHello() throws Exception {
+ checkOutput("objectOrientedHello.kt", "Hello, Pavel!\n", "Pavel");
+ }
+
+ @Test
+ public void multiLanguageHello() throws Exception {
+ checkOutput("multiLanguageHello.kt", "Salut!\n", "FR");
+ }
+
+ @Test
+ public void nullChecks() throws Exception {
+ checkOutput("nullChecks.kt", "No number supplied");
+ checkOutput("nullChecks.kt", "6", "2", "3");
+ }
+
+ @Test
+ public void ranges() throws Exception {
+ checkOutput("ranges.kt", "OK\n" +
+ " 1 2 3 4 5\n" +
+ "Out: array has only 3 elements. x = 4\n" +
+ "Yes: array contains aaa\n" +
+ "No: array doesn't contains ddd\n", "4");
+
+ checkOutput("ranges.kt", " 1 2 3 4 5\n" +
+ "Out: array has only 3 elements. x = 10\n" +
+ "Yes: array contains aaa\n" +
+ "No: array doesn't contains ddd\n", "10");
+ }
+
+ @Test
+ public void forLoop() throws Exception {
+ checkOutput("forLoop.kt", "a\n" +
+ "b\n" +
+ "c\n" +
+ "\n" +
+ "a\n" +
+ "b\n" +
+ "c\n", "a", "b", "c");
+ checkOutput("forLoop.kt", "123\n\n123\n", "123");
+ }
+
+ @Test
+ public void isCheck() throws Exception {
+ checkOutput("isCheck.kt", "3\nnull\n");
+ }
+
+ @Test
+ public void patternMatching() throws Exception {
+ checkOutput("patternMatching.kt", "Greeting\n" +
+ "One\n" +
+ "Not a string\n" +
+ "Unknown\n");
+ }
+
+
+}
diff --git a/translator/testFiles/java/system/cases/systemPrint.kt b/translator/testFiles/java/system/cases/print.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/systemPrint.kt
rename to translator/testFiles/java/system/cases/print.kt
diff --git a/translator/testFiles/java/system/cases/println.kt b/translator/testFiles/java/system/cases/println.kt
new file mode 100644
index 00000000000..3881178af15
--- /dev/null
+++ b/translator/testFiles/java/system/cases/println.kt
@@ -0,0 +1,5 @@
+fun main(args : Array) {
+ System.out?.println("Hello, world!");
+ System.out?.println(3);
+ System.out?.println();
+}
diff --git a/translator/testFiles/kotlin_lib.js b/translator/testFiles/kotlin_lib.js
index 95c5532e941..19df87fae4f 100644
--- a/translator/testFiles/kotlin_lib.js
+++ b/translator/testFiles/kotlin_lib.js
@@ -28,7 +28,7 @@ var Class = (function () {
;
function create() {
var parent = null, properties = $A(arguments);
- if (Object.isFunction(properties[0]))
+ if (typeof (properties[0]) == "function")
parent = properties.shift();
function klass() {
@@ -80,7 +80,7 @@ var Class = (function () {
for (var i = 0, length = properties.length; i < length; i++) {
var property = properties[i], value = source[property];
- if (ancestor && Object.isFunction(value) &&
+ if (ancestor && (typeof (value) == "function") &&
value.argumentNames()[0] == "$super") {
var method = value;
value = (function (m) {
@@ -144,38 +144,6 @@ var Namespace = (function () {
(function () {
- var _toString = Object.prototype.toString,
- NULL_TYPE = 'Null',
- UNDEFINED_TYPE = 'Undefined',
- BOOLEAN_TYPE = 'Boolean',
- NUMBER_TYPE = 'Number',
- STRING_TYPE = 'String',
- OBJECT_TYPE = 'Object',
- FUNCTION_CLASS = '[object Function]',
- BOOLEAN_CLASS = '[object Boolean]',
- NUMBER_CLASS = '[object Number]',
- STRING_CLASS = '[object String]',
- ARRAY_CLASS = '[object Array]',
- DATE_CLASS = '[object Date]';
-
- function Type(o) {
- switch (o) {
- case null:
- return NULL_TYPE;
- case (void 0):
- return UNDEFINED_TYPE;
- }
- var type = typeof o;
- switch (type) {
- case 'boolean':
- return BOOLEAN_TYPE;
- case 'number':
- return NUMBER_TYPE;
- case 'string':
- return STRING_TYPE;
- }
- return OBJECT_TYPE;
- }
function extend(destination, source) {
for (var property in source)
@@ -183,95 +151,7 @@ var Namespace = (function () {
return destination;
}
- function inspect(object) {
- try {
- if (isUndefined(object)) return 'undefined';
- if (object === null) return 'null';
- return object.inspect ? object.inspect() : String(object);
- } catch (e) {
- if (e instanceof RangeError) return '...';
- throw e;
- }
- }
- function toJSON(value) {
- return Str('', { '':value }, []);
- }
-
- function Str(key, holder, stack) {
- var value = holder[key],
- type = typeof value;
-
- if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
- var _class = _toString.call(value);
-
- switch (_class) {
- case NUMBER_CLASS:
- case BOOLEAN_CLASS:
- case STRING_CLASS:
- value = value.valueOf();
- }
-
- switch (value) {
- case null:
- return 'null';
- case true:
- return 'true';
- case false:
- return 'false';
- }
-
- type = typeof value;
- switch (type) {
- case 'string':
- return value.inspect(true);
- case 'number':
- return isFinite(value) ? String(value) : 'null';
- case 'object':
-
- for (var i = 0, length = stack.length; i < length; i++) {
- if (stack[i] === value) {
- throw new TypeError();
- }
- }
- stack.push(value);
-
- var partial = [];
- if (_class === ARRAY_CLASS) {
- for (var i = 0, length = value.length; i < length; i++) {
- var str = Str(i, value, stack);
- partial.push(typeof str === 'undefined' ? 'null' : str);
- }
- partial = '[' + partial.join(',') + ']';
- } else {
- var keys = Object.keys(value);
- for (var i = 0, length = keys.length; i < length; i++) {
- var key = keys[i], str = Str(key, value, stack);
- if (typeof str !== "undefined") {
- partial.push(key.inspect(true) + ':' + str);
- }
- }
- partial = '{' + partial.join(',') + '}';
- }
- stack.pop();
- return partial;
- }
- }
-
- function stringify(object) {
- return JSON.stringify(object);
- }
-
- function toQueryString(object) {
- return $H(object).toQueryString();
- }
-
- function toHTML(object) {
- return object && object.toHTML ? object.toHTML() : String.interpret(object);
- }
function keys(object) {
if (Type(object) !== OBJECT_TYPE) {
@@ -293,65 +173,10 @@ var Namespace = (function () {
return results;
}
- function clone(object) {
- return extend({ }, object);
- }
-
- function isElement(object) {
- return !!(object && object.nodeType == 1);
- }
-
- function isArray(object) {
- return _toString.call(object) === ARRAY_CLASS;
- }
-
- var hasNativeIsArray = (typeof Array.isArray == 'function')
- && Array.isArray([]) && !Array.isArray({});
-
- if (hasNativeIsArray) {
- isArray = Array.isArray;
- }
-
- function isHash(object) {
- return object instanceof Hash;
- }
-
- function isFunction(object) {
- return _toString.call(object) === FUNCTION_CLASS;
- }
-
- function isString(object) {
- return _toString.call(object) === STRING_CLASS;
- }
-
- function isNumber(object) {
- return _toString.call(object) === NUMBER_CLASS;
- }
-
- function isDate(object) {
- return _toString.call(object) === DATE_CLASS;
- }
-
- function isUndefined(object) {
- return typeof object === "undefined";
- }
-
extend(Object, {
extend:extend,
- inspect:inspect,
- toQueryString:toQueryString,
- toHTML:toHTML,
keys:Object.keys || keys,
values:values,
- clone:clone,
- isElement:isElement,
- isArray:isArray,
- isHash:isHash,
- isFunction:isFunction,
- isString:isString,
- isNumber:isNumber,
- isDate:isDate,
- isUndefined:isUndefined
});
})();
diff --git a/translator/testFiles/java/system/cases/forLoop.kt b/translator/testFiles/webDemoExamples/cases/forLoop.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/forLoop.kt
rename to translator/testFiles/webDemoExamples/cases/forLoop.kt
diff --git a/translator/testFiles/java/system/cases/ifAsExpression.kt b/translator/testFiles/webDemoExamples/cases/ifAsExpression.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/ifAsExpression.kt
rename to translator/testFiles/webDemoExamples/cases/ifAsExpression.kt
diff --git a/translator/testFiles/webDemoExamples/cases/isCheck.kt b/translator/testFiles/webDemoExamples/cases/isCheck.kt
new file mode 100644
index 00000000000..ace651c385c
--- /dev/null
+++ b/translator/testFiles/webDemoExamples/cases/isCheck.kt
@@ -0,0 +1,10 @@
+fun main(args : Array) {
+ System.out?.println(getStringLength("aaa"))
+ System.out?.println(getStringLength(1))
+}
+
+fun getStringLength(obj : Any) : Int? {
+ if (obj is String)
+ return obj.length // no cast to String is needed
+ return null
+}
\ No newline at end of file
diff --git a/translator/testFiles/java/system/cases/multiLanguageHello.kt b/translator/testFiles/webDemoExamples/cases/multiLanguageHello.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/multiLanguageHello.kt
rename to translator/testFiles/webDemoExamples/cases/multiLanguageHello.kt
diff --git a/translator/testFiles/java/system/cases/nullChecks.kt b/translator/testFiles/webDemoExamples/cases/nullChecks.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/nullChecks.kt
rename to translator/testFiles/webDemoExamples/cases/nullChecks.kt
diff --git a/translator/testFiles/java/system/cases/objectOrientedHello.kt b/translator/testFiles/webDemoExamples/cases/objectOrientedHello.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/objectOrientedHello.kt
rename to translator/testFiles/webDemoExamples/cases/objectOrientedHello.kt
diff --git a/translator/testFiles/webDemoExamples/cases/patternMatching.kt b/translator/testFiles/webDemoExamples/cases/patternMatching.kt
new file mode 100644
index 00000000000..3290c9f3755
--- /dev/null
+++ b/translator/testFiles/webDemoExamples/cases/patternMatching.kt
@@ -0,0 +1,18 @@
+fun main(args : Array) {
+ cases("Hello")
+ cases(1)
+ cases(MyClass())
+ cases("hello")
+}
+
+fun cases(obj : Any) {
+ when(obj) {
+ 1 => System.out?.println("One")
+ "Hello" => System.out?.println("Greeting")
+ !is String => System.out?.println("Not a string")
+ else => System.out?.println("Unknown")
+ }
+}
+
+class MyClass() {
+}
diff --git a/translator/testFiles/java/system/cases/printArg.kt b/translator/testFiles/webDemoExamples/cases/printArg.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/printArg.kt
rename to translator/testFiles/webDemoExamples/cases/printArg.kt
diff --git a/translator/testFiles/java/system/cases/ranges.kt b/translator/testFiles/webDemoExamples/cases/ranges.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/ranges.kt
rename to translator/testFiles/webDemoExamples/cases/ranges.kt
diff --git a/translator/testFiles/java/system/cases/whileLoop.kt b/translator/testFiles/webDemoExamples/cases/whileLoop.kt
similarity index 100%
rename from translator/testFiles/java/system/cases/whileLoop.kt
rename to translator/testFiles/webDemoExamples/cases/whileLoop.kt